Home · Install
Install
Two files. The standalone tarball is the site manager on the LAN. The Pi agent is a kiosk that talks only to that box, never to dutywall.com.
Stable URLs (always the current build):
agents/.install.shcurl -fsSL -O https://dutywall.com/download/dutywall-standalone.tar.gz curl -fsSL -O https://dutywall.com/download/dutywall-pi-agent.tar.gz curl -fsSL -O https://dutywall.com/download/dutywall-roku-channel.tar.gz curl -fsSL -O https://dutywall.com/download/dutywall-windows-agent.tar.gz curl -fsSL -O https://dutywall.com/download/dutywall-android-kiosk.tar.gz curl -fsSL -O https://dutywall.com/download/SHA256SUMS sha256sum -c SHA256SUMS
Full platform steps: Setup docs: Linux, Windows, Raspberry Pi, macOS, then screens.
One machine on the facility LAN is the site manager. Displays poll it. Cloud, if used, is outbound HTTPS from this box only. A Windows mini-PC HDMI’d to a TV is a screen (step 2); a Windows PC running Docker Desktop is the box. Guides: Linux · Windows · Pi · macOS.
tar -xzf dutywall-standalone.tar.gz
cd dutywall-standalone-*
cp .env.standalone.example .env
# DUTYWALL_BASE_URL=http://<this-LAN-IP>:8090
# DUTYWALL_PANEL_USER / DUTYWALL_PANEL_PASSWORD
# Optional cloud attach (from https://dutywall.com/app → site → Copy env):
# DUTYWALL_CLOUD_URL=https://dutywall.com
# DUTYWALL_SITE_ID=site_…
# DUTYWALL_SITE_TOKEN=…
# Linux / Pi:
docker compose up -d --build
# Windows (Docker Desktop, Linux containers):
# powershell -ExecutionPolicy Bypass -File .\scripts\standalone-up.ps1
curl -sS http://127.0.0.1:8090/healthz
# standalone → {"ok":true,"mode":"standalone"}
# attached → {"ok":true,"mode":"managed"}
Panel: http://<LAN-IP>:8090/. Keep :8090 on the LAN. Do not publish it.
Every client talks to the box on the LAN (http://<BOX>:8090), never to dutywall.com.
| Display | What to install | Notes |
|---|---|---|
| Any browser / Fire TV Silk | Open /player | No install. Demo or a spare stick. Not a locked kiosk. |
| Raspberry Pi | dutywall-pi-agent.tar.gz | Best new screen: CEC power, ~$60. |
| Existing Roku TV | dutywall-roku-channel.tar.gz | Developer Mode. ./install.sh IP PASSWORD or box panel → Install/Update. |
| Windows mini-PC | dutywall-windows-agent.tar.gz | install.ps1 -MasterUrl "http://BOX:8090" |
| Fire TV / Android TV / tablet | dutywall-android-kiosk.tar.gz | Source; ./gradlew assembleRelease then adb install. No prebuilt APK yet. |
tar -xzf dutywall-pi-agent.tar.gz cd dutywall-pi-agent-* sudo ./install.sh sudo nano /etc/dutywall-kiosk.conf # MASTER_URL=http://<BOX-LAN-IP>:8090 # SCREEN_ID= (blank = 6-character enroll code on the TV) sudo systemctl start dutywall-kiosk
Bind the code in the box panel → Enroll a screen. Group names (lobby, breakroom, …) are zones, not timers.
Enable Developer Mode + Fast TV Start on the TV. Username is always rokudev.
tar -xzf dutywall-roku-channel.tar.gz cd dutywall-roku-channel-* ./install.sh <ROKU-IP> <DEV-PASSWORD> # optional launch: ./install.sh <ROKU-IP> <DEV-PASSWORD> http://<BOX-LAN-IP>:8090 Lobby
Then add the TV in the box panel (id, IP, group, same password) so heartbeats and later Install/Update work. There is no Roku Store listing.
tar -xzf dutywall-windows-agent.tar.gz # elevated PowerShell on the PC driving the TV: install.ps1 -MasterUrl "http://<BOX-LAN-IP>:8090"
Edit master_url in app/src/main/res/values/strings.xml, build a release APK, adb install. Until then, Silk/Chrome at http://<BOX>:8090/player is enough to prove a screen.
Architecture: displays → on-site box :8090 → optional outbound to https://dutywall.com. Do not set MASTER_URL to dutywall.com. Do not reuse a site token already bound to another box (unassign or mint a new site first). NWS user-agent must be a real contact. Panic webhook is DUTYWALL_ALERT_TOKEN on the box.
No. Download the zip here, then the Pi only talks to the box on the LAN.
No for the box or the Pi. Cloud is optional: set SITE_ID and SITE_TOKEN on the box if you want multi-site desired state.
No. One site token, one box. Create another site in the cloud panel for a second facility.