File locations
Where DisplaySync stores things and why. If you're tailing logs, hunting a stale config, or recovering after a reinstall, this is your map.
The desktop sign uses a single application data root for everything sign-specific (logs, database, identity, config, cache). On Windows, that root lives under C:\ProgramData\ rather than per-user %APPDATA% because the kiosk auto-login user shouldn't own files that survive a re-image. On Linux, the equivalent is /var/lib/.
Application data root
The sign app picks the data root using a priority list resolved at startup. The first writable candidate wins:
| Platform | Path | Selection priority |
|---|---|---|
| Windows | C:\ProgramData\DisplaySync\ | First — installer-managed, machine-wide |
| Linux | /var/lib/displaysync/ | First on Linux |
| Dev fallback | <repo>/data/ | When neither above is writable |
The installer creates the Windows path and grants the kiosk user write access; on Linux the package manager handles /var/lib/displaysync/.
Inside the data root
| Path | Purpose | Created by |
|---|---|---|
logs/sign.log | Main runtime log (rolling) | LogService |
logs/error.log | Errors only (companion file) | LogService |
database/sign.db | SQLite — content cache, history | DatabaseService |
sign-config.json | Identity + runtime flags (monitoringMode, currentUrl, signId, shortCode, etc.) | ConfigService |
.maintenance | Sentinel file — watchdog skips relaunch when present | Manual or USB recovery script |
cache/ | Electron / web-content cache | Electron |
External paths
| Path | Purpose | Notes |
|---|---|---|
C:\ProgramData\Tailscale\ | Tailscale state (node identity, derp prefs) | Created by Tailscale installer |
Task Scheduler → \Microsoft\Windows\TaskScheduler\DisplaySync Sign\ | Watchdog scheduled task | Created by USB recovery setup.ps1 — see USB recovery → Setup script |
USB drive root: setup.bat, setup.ps1, config.json, etc. | USB recovery template | Six files documented in Building the drive |
Sentry release ID
Errors that surface in Sentry from a kiosk carry a release tag in the format:
displaysync-sign@<version>
For example, a v1.3.1 sign reports its release as [email protected]. This is set by desktop-sign's Sentry initialization. See Error codes → Sentry tags and context for the rest of the Sentry context fields.
Linux differences
The desktop sign on Raspberry Pi / Linux follows the same layout under /var/lib/displaysync/:
logs/sign.logandlogs/error.log— same names, same purposedatabase/sign.db— SQLite, same schemasign-config.json— same fields- No watchdog scheduled task — systemd is the equivalent (
displaysync-sign.service) - No Tailscale
C:\ProgramData\— Tailscale state on Linux lives under/var/lib/tailscale/
See Linux & Raspberry Pi for the Linux-specific install layout.
How to find these in a hurry
Windows kiosk (RDP / VNC / local keyboard):
# Open Explorer at the data root:
explorer "C:\ProgramData\DisplaySync"
# Tail the live log:
Get-Content "C:\ProgramData\DisplaySync\logs\sign.log" -Wait -Tail 50
# Show errors only:
Get-Content "C:\ProgramData\DisplaySync\logs\error.log" -Tail 100
C:\ProgramData\ is hidden by default in Explorer's address bar — paste the full path or enable "Show hidden items" under the View tab.
Linux:
# Tail the live log:
sudo tail -f /var/lib/displaysync/logs/sign.log
# Show errors only:
sudo tail -100 /var/lib/displaysync/logs/error.log
Related
- Log locations — when to tail what, how to search
- USB recovery → Setup script — what the recovery script wipes (the data root) and what it leaves alone
- Installing DisplaySync — the install step that creates the data root
- Remote control → Monitoring mode —
sign-config.jsoncarries the persistedmonitoringModeflag