diff --git a/contrib/README.md b/contrib/README.md new file mode 100644 index 0000000..936d661 --- /dev/null +++ b/contrib/README.md @@ -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. \ No newline at end of file diff --git a/contrib/install-daemon.sh b/contrib/install-daemon.sh new file mode 100755 index 0000000..5d6030d --- /dev/null +++ b/contrib/install-daemon.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash +# Install teleportfling as a per-user systemd service (daemon mode). +# +# Builds the headless binary, places it in ~/.local/bin, installs the user +# unit from contrib/teleportfling.service, and creates a starter daemon +# config. Run without sudo: +# +# ./contrib/install-daemon.sh +# +# Then start it with: +# +# systemctl --user enable --now teleportfling +set -euo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +BIN_DIR="${HOME}/.local/bin" +SERVICE_DIR="${HOME}/.config/systemd/user" +CONFIG_DIR="${HOME}/.config/teleportfling" +CONFIG="${CONFIG_DIR}/daemon.json" + +echo "Building teleportfling..." +(cd "${HERE}" && go build -o "${BIN_DIR}/teleportfling" ./cmd/teleportfling) + +echo "Installing systemd user unit..." +mkdir -p "${SERVICE_DIR}" +install -m 0644 "${HERE}/contrib/teleportfling.service" "${SERVICE_DIR}/teleportfling.service" + +if [[ ! -f "${CONFIG}" ]]; then + echo "Creating default daemon config at ${CONFIG}..." + mkdir -p "${CONFIG_DIR}" + cat > "${CONFIG}" <<'EOF' +{ + "name": "TeleportFling Daemon", + "port": 9756, + "quality": 80, + "fps": 30, + "source": "screen", + "audio": true, + "stream_index": 0, + "announce": true +} +EOF +fi + +echo "Reloading systemd and enabling the service..." +systemctl --user daemon-reload +systemctl --user enable teleportfling + +cat <