A modern, network-enabled music player platform built on Rockbox technology. rockboxd.tsiry-sandratraina.com
rust deno navidrome airplay libadwaita zig mpris snapcast mpd rockbox audio subsonic
README.md

Running rockboxd as a service #

rockboxd is a long-running music server. This directory ships ready-to-use service definitions so it starts at boot and is supervised (restarted on crash) by your platform's init system.

Platform Init system File
Linux systemd systemd/rockbox.service
macOS launchd LaunchAgents/com.github.rockbox.plist
FreeBSD rc.d rc.d/freebsd/rockboxd
NetBSD rc.d rc.d/netbsd/rockboxd

All of them assume rockboxd is installed on PATH (typically /usr/local/bin/rockboxd, or /usr/pkg/bin/rockboxd on NetBSD/pkgsrc) and that its settings live in ~/.config/rockbox.org/settings.toml for the user the service runs as. Because rockboxd links SDL, the service files set SDL_VIDEODRIVER=dummy so it runs headless.


Linux (systemd) #

# Per-user service (recommended — picks up ~/.config/rockbox.org/settings.toml):
mkdir -p ~/.config/systemd/user
cp systemd/rockbox.service ~/.config/systemd/user/rockbox.service
systemctl --user daemon-reload
systemctl --user enable --now rockbox.service

# Follow logs:
journalctl --user -u rockbox.service -f

To keep a user service running without an active login session: loginctl enable-linger $USER.

For a system-wide service, copy the unit into /etc/systemd/system/ instead, add User= / Group= lines under [Service], and use systemctl without --user.


macOS (launchd) #

cp LaunchAgents/com.github.rockbox.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.github.rockbox.plist

# Stop / unload:
launchctl unload ~/Library/LaunchAgents/com.github.rockbox.plist

Logs are written to /tmp/rockbox.log and /tmp/rockbox.err.log. Adjust ProgramArguments if your binary is not at /usr/local/bin/rockbox.


FreeBSD (rc.d) #

# Install the script:
cp rc.d/freebsd/rockboxd /usr/local/etc/rc.d/rockboxd
chmod 555 /usr/local/etc/rc.d/rockboxd

# Create a dedicated user (once):
pw useradd rockbox -m -s /usr/sbin/nologin

# Enable and start:
sysrc rockboxd_enable="YES"
sysrc rockboxd_user="rockbox"
service rockboxd start
service rockboxd status

The script wraps rockboxd with daemon(8) for backgrounding, supervision (-r restarts it if it exits), privilege drop, and logging to /var/log/rockboxd.log.

Tunables (set with sysrc in /etc/rc.conf):

Variable Default Description
rockboxd_enable NO Enable the service at boot
rockboxd_user rockbox User the daemon runs as
rockboxd_group ${rockboxd_user} Group the daemon runs as
rockboxd_bin /usr/local/bin/rockboxd Path to the binary
rockboxd_logfile /var/log/rockboxd.log Log destination
rockboxd_env SDL_VIDEODRIVER=dummy Environment passed to the binary
rockboxd_flags (empty) Extra flags for rockboxd

NetBSD (rc.d) #

# Install the script:
cp rc.d/netbsd/rockboxd /etc/rc.d/rockboxd
chmod 555 /etc/rc.d/rockboxd

# Create a dedicated user (once):
useradd -m -s /sbin/nologin rockbox

# Enable in /etc/rc.conf:
echo 'rockboxd=YES'            >> /etc/rc.conf
echo 'rockboxd_user="rockbox"' >> /etc/rc.conf

# Start:
/etc/rc.d/rockboxd start
/etc/rc.d/rockboxd status

The script looks for the binary at /usr/pkg/bin/rockboxd first (pkgsrc), then falls back to /usr/local/bin/rockboxd. It backgrounds rockboxd, drops privileges with su, and logs to /var/log/rockboxd.log.

NetBSD's base system has no daemon(8) supervisor, so the script does not auto-restart on crash. If you need supervision, run it under daemontools or runit from pkgsrc.

Tunables (set in /etc/rc.conf):

Variable Default Description
rockboxd NO Enable the service at boot
rockboxd_user rockbox User the daemon runs as
rockboxd_logfile /var/log/rockboxd.log Log destination
rockboxd_env SDL_VIDEODRIVER=dummy Environment passed to the binary
rockboxd_flags (empty) Extra flags for rockboxd