feat: add systemd user service for daemon mode

- contrib/teleportfling.service: per-user unit running the headless CLI
  with its own config (~/.config/teleportfling/daemon.json)
- contrib/install-daemon.sh: builds the binary, installs the unit and a
  starter daemon config
- contrib/README.md: install and management instructions
- todo.md: mark --config and daemon items complete
This commit is contained in:
2026-09-19 08:35:12 +01:00
parent 34efbaf26d
commit 973c75f3b4
4 changed files with 120 additions and 3 deletions
+40
View File
@@ -0,0 +1,40 @@
# Running TeleportFling as a daemon
`teleportfling` (the headless CLI) can run as a per-user systemd service so
the stream starts automatically with your graphical session.
## Prerequisites
- The binary must be built (the flake dev shell provides all cgo deps).
- The screen-capture backend needs the session D-Bus and a PipeWire instance,
which is why the unit is a *user* service tied to `graphical-session.target`.
## Install
```sh
./contrib/install-daemon.sh
```
This:
1. Builds `cmd/teleportfling` and installs it to `~/.local/bin/`.
2. Installs `contrib/teleportfling.service` as a user unit.
3. Creates `~/.config/teleportfling/daemon.json` on first run.
4. Runs `systemctl --user daemon-reload` and enables the service.
## Manage
```sh
systemctl --user start teleportfling # start now
systemctl --user enable teleportfling # start at login (done by installer)
systemctl --user status teleportfling # check status / logs
journalctl --user -u teleportfling -f # follow logs
systemctl --user stop teleportfling # stop
```
## Config
The unit passes `--config ~/.config/teleportfling/daemon.json`. Edit that
file to change name, port, quality, fps, source, audio or announcement, then
restart the service. Any flags you add to the `ExecStart=` line override the
file values.