Conversation
trccd.service covers the IPC daemon, but nothing drives the panel on login — so after a reboot the LCD holds whatever frame it had until someone opens the GUI or runs `trcc display play` by hand. This adds the missing piece. - packaging/systemd/trcc-display.service — user unit running the ticker - packaging/systemd/trcc-display-ticker — wrapper that resolves the device via `trcc detect` so the unit hardcodes no VID:PID, with TRCC_DEVICE / TRCC_BIN overrides via ~/.config/trcc/ticker.env - README: install/uninstall, the env-file overrides, and the fact that trccd and trcc-display must not both run Restart=always with StartLimitBurst=0 because USB enumeration frequently lands after graphical-session.target; the helper exits non-zero when no device is present so systemd backs off and retries rather than treating it as success. Tested on Arch (Hyprland, Thermalright Trofeo Vision 9.16, 0416:5408, ly wire, 1920x462): survives reboot, ticker drives the panel from login, and detection still resolves the key while the ticker holds the interface. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Dexlabo
commented
Sep 13, 2026
Dexlabo
left a comment
Author
There was a problem hiding this comment.
Review (human + GitKraken MCP — no GK AI credits)
Verdict: Looks good to merge from a packaging/design standpoint, with small non-blocking hardening notes. (GitHub won’t let the author approve their own PR, so this is a comment review.)
What works
trcc-display-tickerauto-detects viatrcc detect, withTRCC_DEVICE/TRCC_BINoverrides — right call for a shipped unit.Restart=always+StartLimitBurst=0+ exit 1 on missing device matches late USB at login.- README documents the USB mutex with
trccdand the GUI-busy workaround. - Matches existing
trccd.servicestyle; real hardware test called out (Trofeo Vision0416:5408).
Nits (non-blocking)
ExecStopPostis fragile — empty detect still runsdisplay sleep "". Prefer reuse of the helper (or no-op when no key). Also it only uses${TRCC_BIN:-/usr/bin/trcc}and won’t fall back to PATH the way the helper does, so pip/pipx-only installs may fail to blank on stop.- Helper path is root-only —
ExecStart=/usr/bin/trcc-display-ticker+sudo installis fine for distro packaging, awkward for fully user-local installs. Optional: allow~/.local/binfor the helper. - Follow-up — GUI hang when USB is busy (noted in the PR body) deserves its own issue; README workaround isn’t enough long-term.
Checks
No CI/reviews previously; Copilot review failed on quota. Merge state was otherwise mergeable.
Owner
|
@Dexlabo — thank you for this, and apologies for the delay. A systemd user unit is the right shape for the stats ticker — it's what the platform expects, rather than us inventing our own supervision. There are two reviews on it already; I haven't given it a proper pass yet and didn't want that to keep reading as silence. It's wanted and it hasn't been forgotten. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The gap
trccd.serviceregisters the IPC daemon, but nothing drives the panel on login. After a reboot the LCD keeps whatever frame it last had until someone opens the GUI or runstrcc display playby hand. On a machine where the cooler display is the point, that reads as "the app stopped working."What this adds
packaging/systemd/trcc-display.service— user unit running the render-and-send tickerpackaging/systemd/trcc-display-ticker— small wrapper that resolves the device viatrcc detect, so the unit hardcodes no VID:PID.display playrequires an explicit key, and a shipped unit naming one contributor's panel is useless to everyone else.TRCC_DEVICE/TRCC_BINoverrides come from~/.config/trcc/ticker.envfor multi-panel setups and pip/pipx installs.trccdandtrcc-displaymust not both run, since only one process can hold a panel's USB interface.Design notes
Restart=alwayswithStartLimitBurst=0: USB enumeration frequently lands aftergraphical-session.target, so a first attempt at login often finds no device. The helper exits non-zero when nothing is detected, letting systemd back off and retry rather than recording a success and giving up.ExecStopPostblanks the panel, so stopping the unit doesn't leave a stale frame lit.Testing
Arch Linux, Hyprland, Thermalright Trofeo Vision 9.16 (
0416:5408,lywire, 1920×462):systemd-analyze verifyclean once the helper is installed to/usr/binSeparate finding, not fixed here
When another process holds the USB interface, the GUI's splash blocks indefinitely instead of reporting the device is busy —
discover_and_connectduring bootstrap hangs rather than raising. With a ticker running this is easy to hit, and it presents as a frozen app with nothing in~/.trcc/trcc.log. The README works around it by telling users to stop the unit first, but a "device busy — stop trcc-display.service" error would be the real fix. Happy to open a separate issue if useful.