From 6ac272af57d7d6baab56fda876a2b4542498249a Mon Sep 17 00:00:00 2001 From: ScreenTinker Date: Mon, 10 Aug 2026 10:50:34 -0500 Subject: [PATCH] Pi installer: stop advertising what was never installed (#245) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three reports from the same operator, two of them the script describing a state it never reached — the same shape as the first round of #245. Guide missing sudo: frontend/guides/raspberry-pi-digital-signage.html said `curl -sL … | bash` while the script's own header and its root check both say `| sudo bash`. The script fails loudly with the right command, so nothing is half-installed, but the guide should not have to be corrected by an error message. Also documents the --player-only form, which the guide never showed. MOTD advertised commands that mode did not create: section 11 creates screentinker-status/update/logs only when PLAYER_ONLY is false, while section 12 wrote an /etc/motd listing all three unconditionally. A Player-Only Pi therefore greeted its operator with three commands that were not on it, at every SSH login. The command list is now appended per-mode. The cheap fix would have been to print nothing on a player. That trades a wrong banner for a machine nobody can inspect over SSH, so Player-Only now gets its own screentinker-status (kiosk state, which server it points at, and whether that server is actually reachable) and screentinker-logs (kiosk). screentinker-update is genuinely not applicable — there is no local server to update — and is not offered. Wayland cursor never hidden: the launcher stated the compositor cursor config was written "below when wayfire.ini exists". It never was — wayfire.ini and hide_cursor each appeared exactly once in the whole script, both inside that comment. unclutter is installed but only runs on the X11 branch, so a Wayland Pi kept a mouse pointer on the sign while the install looked complete. Now configures wayfire's hide-cursor plugin at install time, idempotently and after backing the file up, and says plainly that labwc has no equivalent rather than failing silently. Tests: raspberry-pi-setup.test.js gains a check that no MOTD advertises a command its mode does not install (both modes, extracted from the script rather than re-typed), that a player is not left with zero diagnostics, and that the Wayland cursor claim is backed by code outside a comment. Both mutations verified to fail: putting screentinker-update back in the player MOTD, and removing the hide-cursor write. NOT fixed, and not guessed at: the ALT+F4-on-first-pairing symptom and the reconnect storm. The crash-restore fix those would need is already in 1.9.33 and targets a different symptom, and `observed=6/5 per 10000ms` is six reconnects in ten seconds, which matches neither the solo-widget cycle nor the kiosk RestartSec=10. Both need the kiosk-side log — which, until this commit, a Player-Only Pi had no command to read. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Bvjey4FNam49MN7ybjcq6A --- .../guides/raspberry-pi-digital-signage.html | 8 +- scripts/raspberry-pi-setup.sh | 115 +++++++++++++++++- server/test/raspberry-pi-setup.test.js | 60 +++++++++ 3 files changed, 179 insertions(+), 4 deletions(-) diff --git a/frontend/guides/raspberry-pi-digital-signage.html b/frontend/guides/raspberry-pi-digital-signage.html index 13206d1..0da6109 100644 --- a/frontend/guides/raspberry-pi-digital-signage.html +++ b/frontend/guides/raspberry-pi-digital-signage.html @@ -81,7 +81,13 @@

Step 2: Run the ScreenTinker installer

Open a terminal on the Pi and run:

-
curl -sL https://screentinker.com/scripts/raspberry-pi-setup.sh | bash
+
curl -sL https://screentinker.com/scripts/raspberry-pi-setup.sh | sudo bash
+

The sudo is required — the installer writes systemd units, installs packages and + configures autostart. Without it the script stops on its first line and prints the correct + command, so nothing is half-installed.

+

That gives you All-in-One: the server and the player on the same Pi. To use + the Pi as a player only, pointing at a ScreenTinker server you already run:

+
curl -sL https://screentinker.com/scripts/raspberry-pi-setup.sh | sudo bash -s -- --player-only https://your-server

The script will: