Skip to content

Installation

cvrt-jh edited this page Aug 12, 2026 · 2 revisions

Installation

Prerequisites

  • Raspberry Pi (3B+ or newer recommended)
  • Raspberry Pi OS 64-bit (Bookworm)
  • Elgato Stream Deck MK.2

From Binary

sudo cp deckd /usr/local/bin/
sudo mkdir -p /etc/deckd
sudo cp config.example.toml /etc/deckd/config.toml

# udev rules for non-root USB access
sudo cp udev/40-streamdeck.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules

# Service user and systemd
sudo useradd -r -s /usr/sbin/nologin -G plugdev deckd
sudo cp systemd/deckd.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now deckd

From Source

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
sudo apt install -y pkg-config libudev-dev libhidapi-dev
git clone https://github.com/cvrt-jh/deckd.git
cd deckd
cargo build --release

Building for a Raspberry Pi

Prefer building natively in a container that matches the target distro. The glibc matches by construction, and on an arm64 host it runs at native speed:

deploy/build-pi.sh          # artifact at target/pi/deckd

Two traps make a cross-compiled binary look fine until the service fails to start:

  1. cross only works from an x86_64 host. Its images are published for linux/amd64 only, so on an Apple Silicon Mac every tag fails with no matching manifest for linux/arm64/v8.

  2. glibc must not be newer than the target's. glibc is backward compatible, not forward. A binary built against 2.39 will not start on Debian Bookworm (2.36):

    /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.39' not found
    

Check any binary before deploying it:

objdump -T deckd | grep -oE 'GLIBC_2\.[0-9]+' | sort -uV | tail -1

Do not rely on the build's exit code alone. Confirm the artifact exists and is the right architecture: an exported CARGO_TARGET_DIR silently redirects output while the log still reports Finished release profile and the shell exits 0.

Cross-compiling from an x86_64 host still works if the image's glibc is old enough for the target. Cross.toml in the repo carries the required libudev-dev:arm64 pre-build step.

Verify

deckd --config /etc/deckd/config.toml --check
sudo systemctl status deckd
journalctl -u deckd -f

Clone this wiki locally