Programster's Blog

Tutorials focusing on Linux, programming, and open-source

Stream Deck Mini

Update - 27th December, 2025

I received a full size MK2 streamdeck for Christmas, and initially it wasn't recognized with the previous setup.

After following the instructions outlined in the Streamdeck Linux GUI intructions for Debian/Ubuntu, I got it to work, but had to delete the /etc/udev/rules.d/70-streamdeck.rules from what I had created quite some time ago for the streamdeck mini.

Steps

The steps are below, in case they disappear from the original source:

sudo apt install libhidapi-libusb0 pipx

Create a file at /etc/udev/rules.d/60-streamdeck.rules with the following content:

SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0063", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006c", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006d", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0080", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0084", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="008f", TAG+="uaccess"
KERNEL=="uinput", SUBSYSTEM=="misc", OPTIONS+="static_node=uinput", TAG+="uaccess", GROUP="input", MODE="0660"

Then manually run:

sudo udevadm trigger

... to reload the rules immediately.

Run the following to install the streamdeck linux gui project:

python3 -m pipx install streamdeck-linux-gui

Running this for me ended in an error message because I already had a symlink at:

$HOME/.local/bin/streamdeck

... that pointed to:

$HOME/.local/bin/streamdeck

... but manually changing it to point to:

$HOME/.local/pipx/venvs/streamdeck-linux-gui/bin/streamdeck

... resolved my issue.

Original Post (Outdated)

I was given a Stream Deck Mini for Christmas, and it has turned out to be massively beneficial. I use it for all sorts of things, like quick access buttons for controlling Spotify, keyboard entry of timesheet categories, a small sound board, and I plan to configure some buttons for automatically switching between using my headphones or my speakers, and possibly a push-to-talk button.

You may be wondering how I manage to do all of that with just 6 buttons, but that's because the device has "pages", and I use the first "page" as a menu screen for 6 sub screens. E.g. button 1 takes me to the sound deck menu, and button two takes me to the sound settings menu etc. In each sub-menu, the 6th button takes me back to the main menu, so I currently have 6 x 5 = 30 useful buttons.

Installation

The first thing we need to do is install Python PIP.

Then we need to install some additional packages that are required.

sudo apt install -y libudev-dev libusb-1.0-0-dev libhidapi-libusb0 libxcb-xinerama0

After having installed PIP, we can use it to install the streamdeck module and the UI tool that we can use to configure it if we wish (the alternative is to manually configure it through Python code).

pip install streamdeck
pip3 install streamdeck_ui --user

Now we need to add some udev rules in order to allow us to have the privileges to access/modify the device without being the root user.

sudo vim /etc/udev/rules.d/70-streamdeck.rules

Paste in the following contents:

SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", TAG+="uaccess"

Note: There are many tutorials out there with lots of lines, this is the only one we need.

Make the new rules take effect:

sudo udevadm trigger

Finally, we need to unplug and plug in the device.

Stream Deck UI

After having run the installation steps, we should now have the Stream Deck UI tool which can be manually run by executing:

streamdeck

Automatic Startup

It is probably a good idea to add an entry to your startup commands to automatically start the streamdeck on login. The command/tool will have been installed to your user directory's .local/bin folder like so:

/home/stuart/.local/bin/streamdeck

Automatic Typing

The Stream Deck Mini UI has an interface for automatically entering text for you, but if you need to do this as part of a script that the deck performs, you may find the following snippet useful:

from pynput.keyboard import Key, Controller
keyboard = Controller()
keyboard.type('textToTypeGoesHere')

References

Last updated: 27th December 2024
First published: 31st December 2022

This blog is created by Stuart Page

I'm a freelance web developer and technology consultant based in Surrey, UK, with over 10 years experience in web development, DevOps, Linux Administration, and IT solutions.

Need support with your infrastructure or web services?

Get in touch