Skip to content

Stream Deck on Linux

Elgato's Stream Deck software only exists for Windows and macOS, and does not work under Wine (it needs Windows' USB HID APIs). The deck itself works perfectly on Linux with StreamController.

1. Install StreamController

flatpak install flathub com.core447.StreamController

Then install the plugins you need from its store: OBS, Media (Spotify, any MPRIS player), Discord, Twitch, OS (hotkeys, commands, websites).

2. Give your user access to the deck

If StreamController shows no deck, your user is not allowed to open it:

tuxcast deck list   # "no permission"?
tuxcast deck udev | sudo tee /etc/udev/rules.d/70-streamdeck.rules
sudo udevadm control --reload && sudo udevadm trigger

→ tuxcast deck

3. Bring your profiles over

Export your profiles on Windows or macOS (Preferences → Profiles → ⋯ → Export), copy them over, and convert:

tuxcast convert Streaming.streamDeckProfile

Images, titles, folders and most actions come along. The report lists the keys to finish by hand: usually programs opened by a Windows path and soundboard sounds.

→ tuxcast convert

4. Make each plugin work

Plugin Needs
OBS obs-websocket on, with its password entered in the plugin (OBS guide)
Media A player that implements MPRIS. Spotify: the Flathub build, not the snap (why)
Discord Discord's socket visible from the Flatpak: tuxcast bridge discord --install (why)
Twitch A one-time OAuth login. The plugin listens on port 3000 for it, which clashes with local web dev servers (fix)

Plugin fixes that survive updates

StreamController reinstalls plugins from scratch when they update, which wipes any change you made to their files. Describe the change as a tuxcast patch and it is re-applied automatically:

mkdir -p ~/.config/tuxcast/patches
curl -fsSL https://raw.githubusercontent.com/achedon12/tuxcast/main/contrib/patches/twitch-oauth-port.toml \
  -o ~/.config/tuxcast/patches/twitch-oauth-port.toml
tuxcast patch install

When the deck freezes

After StreamController crashes, the deck can stay dark and the logs show Failed to read feature report (-1). Instead of unplugging it:

tuxcast deck reset