This guide will help you install Capacitimer on an Ubuntu Server NUC to run as a dedicated fullscreen display.
- Fresh Ubuntu Server installation on your NUC
- Network connectivity between your NUC and laptop
- SSH access to the NUC (for initial setup)
The setup will:
- Install X server (minimal GUI) and Openbox window manager
- Auto-login to console on boot
- Automatically start X server
- Launch Capacitimer in fullscreen mode
- Run web server accessible from your laptop
# Install dependencies (if not already done)
npm install
# Build the application and create Linux .deb package
npm run dist:linux:intelThis will create a .deb file in the out/ directory named something like:
Capacitimer-1.0.0-linux-x64.deb
Transfer the .deb file and installation script to your NUC:
# From your Mac, in the capacitimer directory
scp out/Capacitimer-*.deb your-username@nuc-ip-address:~/
scp install-linux-server.sh your-username@nuc-ip-address:~/SSH into your NUC and run the installation script:
ssh your-username@nuc-ip-address
# Make the script executable
chmod +x install-linux-server.sh
# Run the installation (requires sudo)
sudo ./install-linux-server.shThe script will:
- Install required system packages (X server, Openbox, Node.js)
- Install the Capacitimer .deb package
- Configure auto-login
- Set up X server to start automatically
- Create systemd service
- Configure fullscreen mode
After installation completes, reboot the NUC:
sudo rebootThe system will automatically:
- Boot and auto-login
- Start X server
- Launch Capacitimer in fullscreen
From your laptop, open a web browser:
- Control Interface:
http://nuc-ip-address/control.html - Display Page:
http://nuc-ip-address/display.html
The NUC's IP address will be shown at the end of the installation script output.
-
System Packages:
xorg- X Window Systemopenbox- Minimal window managernodejs&npm- JavaScript runtimeunclutter- Hides mouse cursorx11-xserver-utils- X utilities (xset for power management)
-
Capacitimer Application:
- Installed to
/opt/capacitimer(or via .deb to/opt/Capacitimer) - Runs on startup in fullscreen
- Installed to
-
Services:
capacitimer-display.service- Systemd service for auto-start- Getty auto-login on tty1
/etc/systemd/system/capacitimer-display.service- Main systemd service/etc/systemd/system/getty@tty1.service.d/autologin.conf- Auto-login config~/.xinitrc- X session startup script~/.bash_profile- Starts X on console login
sudo systemctl status capacitimer-display# Follow live logs
sudo journalctl -u capacitimer-display -f
# View recent logs
sudo journalctl -u capacitimer-display -n 50sudo systemctl restart capacitimer-display# Stop the service first
sudo systemctl stop capacitimer-display
# Start X and Capacitimer manually
startx-
Check if X is running:
ps aux | grep X -
Check display variable:
echo $DISPLAY
-
Try restarting the service:
sudo systemctl restart capacitimer-display
-
Check NUC's IP address:
hostname -I
-
Check web server is running:
sudo netstat -tulpn | grep node -
Test from NUC itself:
curl http://localhost/control.html
-
Check firewall on NUC:
sudo ufw status
-
If UFW is active, allow HTTP:
sudo ufw allow 80/tcp sudo ufw allow 3001/tcp
Edit /etc/X11/xorg.conf or add a display mode in .xinitrc:
# Add before launching Capacitimer
xrandr --output HDMI-1 --mode 1920x1080Edit ~/.xinitrc and remove the --fullscreen flag:
/usr/bin/capacitimer --no-sandboxRe-run the installation script as a different user:
sudo ./install-linux-server.sh# Stop and disable service
sudo systemctl stop capacitimer-display
sudo systemctl disable capacitimer-display
# Remove service files
sudo rm /etc/systemd/system/capacitimer-display.service
sudo rm -rf /etc/systemd/system/getty@tty1.service.d/
# Remove application
sudo apt-get remove capacitimer
# OR if installed manually:
sudo rm -rf /opt/capacitimer
# Remove user config files
rm ~/.xinitrc ~/.bash_profile
# Reload systemd
sudo systemctl daemon-reload- The NUC will show the main timer display window in fullscreen
- Control the timer from your laptop's web browser
- The web server starts on port 80 (or next available port)
- WebSocket runs on port 3001 for real-time updates
- Screen blanking and power management are disabled
- Mouse cursor is automatically hidden
- The web server has no authentication
- Only use on trusted networks
- Consider setting up a firewall if exposing to larger networks
- The
--no-sandboxflag is required for Electron on Linux servers without GPU
- Uses minimal resources (Openbox is very lightweight)
- No desktop environment overhead
- Ideal for dedicated display purposes
- Works well on modest hardware (Intel NUC, Raspberry Pi 4, etc.)