Problem
streamdeck sees the Stream Deck device but cannot open it:
A Stream Deck is attached, but it could not be opened.
/dev/hidraw* existed but hidapi/streamdeck could not access the device.
- Cause: Linux Mint 21.3 handles HID devices and USB permissions differently than Ubuntu. The default README udev rules are insufficient for Original V2 devices.
Steps Taken and Why
- Install dependencies
sudo apt install libhidapi-libusb0 python3-pip libxcb-xinerama0
python3 -m pip install --upgrade pip
libhidapi-libusb0 → kernel library for HID communication.
libxcb-xinerama0 → required for Qt to load X11 plugins.
- Upgrading pip ensures Python packages install correctly.
- Configure udev rules
File: /etc/udev/rules.d/99-streamdeck.rules:
SUBSYSTEM=="usb", ATTR{idVendor}=="0fd9", ATTR{idProduct}=="006d", MODE="0666", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006d", MODE="0666", GROUP="plugdev"
- The first line gives read/write access to the USB device node, which libusb or hidapi may query.
- The second line ensures all hidraw interfaces are readable/writable by the user.
MODE="0666" → read/write for all users.
GROUP="plugdev" → ensures standard users in the plugdev group can access the device.
Reload rules:
sudo udevadm control --reload-rules
sudo udevadm trigger
- Reloading and triggering ensures changes apply immediately.
- Unplug/replug the Stream Deck for the rule to take effect.
- Install Python hidapi and test access
python3 -m pip install --user hidapi --upgrade
python3 -c "
import hid
for device in hid.enumerate():
if device['vendor_id'] == 0xfd9 and device['product_id'] == 0x006d:
d = hid.device()
d.open(device['vendor_id'], device['product_id'])
print('Device opened successfully!')
d.close()
"
- Ensures Python can communicate with the Stream Deck via HID.
- Confirms the udev permissions are correct.
- If this fails, StreamDeck-UI cannot work regardless of backend.
- Install Stream Deck GUI package
python3 -m pip install --user streamdeck
- Installs the GUI in the user environment (
~/.local/bin).
- Avoids conflicts with system Python packages.
- Launch GUI with hidapi backend
STREAMDECK_BACKEND=hidapi QT_QPA_PLATFORM=xcb streamdeck
STREAMDECK_BACKEND=hidapi → forces the application to use hidraw devices instead of libusb, which works on Mint.
QT_QPA_PLATFORM=xcb → ensures Qt uses the X11 plugin, required for Mint Cinnamon.
- GUI now detects the device, allows editing buttons, and updates hardware.
Key Insights
- On Mint 21.3, both the USB node and hidraw interface must be explicitly accessible.
0666 permissions plus plugdev group ensures Python and GUI can open the device.
- hidapi is the only backend guaranteed to work on Original V2 devices under Mint; libusb fails due to missing access to
/dev/bus/usb.
** Worth noting that this took an EMBARRASSINGLY long time to resolve.
Problem
streamdecksees the Stream Deck device but cannot open it:A Stream Deck is attached, but it could not be opened./dev/hidraw*existed but hidapi/streamdeck could not access the device.Steps Taken and Why
libhidapi-libusb0→ kernel library for HID communication.libxcb-xinerama0→ required for Qt to load X11 plugins.File:
/etc/udev/rules.d/99-streamdeck.rules:MODE="0666"→ read/write for all users.GROUP="plugdev"→ ensures standard users in the plugdev group can access the device.Reload rules:
~/.local/bin).STREAMDECK_BACKEND=hidapi→ forces the application to use hidraw devices instead of libusb, which works on Mint.QT_QPA_PLATFORM=xcb→ ensures Qt uses the X11 plugin, required for Mint Cinnamon.Key Insights
0666permissions plusplugdevgroup ensures Python and GUI can open the device./dev/bus/usb.** Worth noting that this took an EMBARRASSINGLY long time to resolve.