One-line install for Raspberry Pi (Pi OS/Pi OS Lite) or Intel NUC (Ubuntu):
curl -fsSL https://raw.githubusercontent.com/tomhillmeyer/capacitimer/main/install.sh | bashThis script will:
- Auto-detect your architecture (ARM64 for Raspberry Pi, AMD64 for Intel NUC)
- Download the latest Capacitimer release from GitHub
- Install system dependencies (xorg, openbox, etc.)
- Configure auto-login and fullscreen display
- Grant port 80 binding capability
After installation completes:
sudo rebootIf you prefer to manually install or need to use a local .deb file:
-
Build the Linux package (from your Mac):
# For Intel NUC (amd64): npm run dist:linux:intel # For Raspberry Pi (arm64): npm run dist:linux:arm
This creates files in
out/:Capacitimer-1.0.0-linux-amd64.deb(Intel/AMD)Capacitimer-1.0.0-linux-arm64.deb(Raspberry Pi)
-
Copy to device:
# Replace with your device's username and IP scp out/Capacitimer-*-linux-*.deb user@192.168.1.146:~/ scp install-linux-server.sh user@192.168.1.146:~/
-
Install on device:
ssh user@192.168.1.146 chmod +x install-linux-server.sh sudo ./install-linux-server.sh
-
Reboot:
sudo reboot
From your laptop's browser:
- Control:
http://nuc-ip-address/control.html - Display:
http://nuc-ip-address/display.html
The NUC displays the timer fullscreen automatically on boot.
# Check if app is running
ps aux | grep capacitimer
# Get NUC IP
hostname -I
# View X server logs
cat ~/.local/share/xorg/Xorg.0.log
# Restart the display (requires console access, not SSH)
# From physical console: Ctrl+Alt+F1, login, then:
killall capacitimer
startxIf you're stuck in a boot loop with X server errors:
-
Stop the loop - Press
Ctrl+Cat the console to break out -
SSH into the NUC from your laptop
-
Run diagnostics:
# Copy diagnostic script to NUC first (from your Mac) scp diagnose-nuc.sh capacitimer@192.168.1.146:~/ # Then on NUC via SSH: chmod +x diagnose-nuc.sh ./diagnose-nuc.sh
-
Check the X server log for specific errors:
cat ~/.local/share/xorg/Xorg.0.log | grep -i "error\|failed\|fatal"
-
Common fixes:
# If Capacitimer binary not found, reinstall capability: sudo find /opt /usr/lib -name "capacitimer" -type f -executable | grep -v ".sh$" | head -1 | xargs -I {} sudo setcap 'cap_net_bind_service=+ep' {} # If .xinitrc has issues, check it: cat ~/.xinitrc # Disable auto-startx temporarily to diagnose: mv ~/.bash_profile ~/.bash_profile.bak # Reboot and it won't auto-start X sudo reboot
# Check if Capacitimer process is running
ps aux | grep capacitimer
# Check X server logs for errors
cat ~/.local/share/xorg/Xorg.0.log
# Test manually (from physical console, not SSH)
startxIf can't connect from laptop:
# Check if app is running and which port it's using
ps aux | grep capacitimer
# Check firewall
sudo ufw status
# Allow if needed
sudo ufw allow 80/tcp
sudo ufw allow 3001/tcp
# Verify port 80 capability is set (should show cap_net_bind_service)
# For .deb installation:
getcap /usr/bin/capacitimer
# For manual installation:
getcap $(which node)
# If capability not set, run:
# For .deb: sudo setcap 'cap_net_bind_service=+ep' /usr/bin/capacitimer
# For manual: sudo setcap 'cap_net_bind_service=+ep' $(which node)- NUC: Fullscreen display (auto-starts on boot)
- Laptop: Control interface via web browser
- Communication: Web server (port 80) + WebSocket (port 3001)