DisplaySync/ docs

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:

PlatformPathSelection priority
WindowsC:\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

PathPurposeCreated by
logs/sign.logMain runtime log (rolling)LogService
logs/error.logErrors only (companion file)LogService
database/sign.dbSQLite — content cache, historyDatabaseService
sign-config.jsonIdentity + runtime flags (monitoringMode, currentUrl, signId, shortCode, etc.)ConfigService
.maintenanceSentinel file — watchdog skips relaunch when presentManual or USB recovery script
cache/Electron / web-content cacheElectron

External paths

PathPurposeNotes
C:\ProgramData\Tailscale\Tailscale state (node identity, derp prefs)Created by Tailscale installer
Task Scheduler → \Microsoft\Windows\TaskScheduler\DisplaySync Sign\Watchdog scheduled taskCreated by USB recovery setup.ps1 — see USB recovery → Setup script
USB drive root: setup.bat, setup.ps1, config.json, etc.USB recovery templateSix 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.log and logs/error.log — same names, same purpose
  • database/sign.db — SQLite, same schema
  • sign-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