Skip to content

feat(linux): Add full-featured Linux port of QMK Toolbox#499

Closed
Aghabeiki wants to merge 1 commit intoqmk:masterfrom
Aghabeiki:master
Closed

feat(linux): Add full-featured Linux port of QMK Toolbox#499
Aghabeiki wants to merge 1 commit intoqmk:masterfrom
Aghabeiki:master

Conversation

@Aghabeiki
Copy link
Copy Markdown

This commit introduces a comprehensive port of the QMK Toolbox to the Linux platform, achieving feature parity with the existing Windows and macOS versions.

The Linux implementation is built with Python and PySide6 (Qt6) and includes all core functionalities:

  • Firmware flashing via external tools (dfu-util, dfu-programmer, avrdude, etc.)
  • Auto-Flash mode on device connection
  • HID Console for debugging
  • Key Tester utility
  • EEPROM clearing and device reset capabilities

Key architectural features include:

  • Asynchronous, non-blocking UI for all flashing operations
  • Real-time USB hotplug detection using pyudev
  • A device-probing fallback for HID console on Linux systems where hidapi usage pages are not reported
  • udev rules for managing device permissions without requiring root access
  • Packaging scripts for Debian, Arch, and AppImage distributions

New documentation provides detailed guides for installation, flashing, and troubleshooting on Linux. The main project README has been updated to reflect this major addition.

Description

Types of Changes

  • Core
  • Bugfix
  • New feature
  • Enhancement/optimization
  • Documentation

Issues Fixed or Closed by This PR

This commit introduces a comprehensive port of the QMK Toolbox to the Linux platform, achieving feature parity with the existing Windows and macOS versions.

The Linux implementation is built with Python and PySide6 (Qt6) and includes all core functionalities:
- Firmware flashing via external tools (dfu-util, dfu-programmer, avrdude, etc.)
- Auto-Flash mode on device connection
- HID Console for debugging
- Key Tester utility
- EEPROM clearing and device reset capabilities

Key architectural features include:
- Asynchronous, non-blocking UI for all flashing operations
- Real-time USB hotplug detection using pyudev
- A device-probing fallback for HID console on Linux systems where hidapi usage pages are not reported
- udev rules for managing device permissions without requiring root access
- Packaging scripts for Debian, Arch, and AppImage distributions

New documentation provides detailed guides for installation, flashing, and troubleshooting on Linux. The main project README has been updated to reflect this major addition.
@Aghabeiki Aghabeiki closed this Feb 3, 2026
@borrougagnou
Copy link
Copy Markdown

Hello !
Little question, why this MR is unmerged ?

It doesn't work ?

@Aghabeiki
Copy link
Copy Markdown
Author

Aghabeiki commented Feb 11, 2026

Hi,
it work as far as I tested on my keyboard,
I have no time right now to prepare it for merge.

@borrougagnou
Copy link
Copy Markdown

borrougagnou commented Feb 12, 2026

Thank for your answer, I don't see the issue part on your PR so I'll post here:

Here's what I did and what I have:

CONFIG:
Ubuntu 24.04
Python 3.12
Keyboard ND104 Chilkey - who need hidraw access with this 2 ID:
    UBEST ND104 Keyboard - idVendor = "6d67", idProduct = "016c"
    UBEST ND104 Screen   - idVendor = "5542", idProduct = "0001"
$> git clone https://github.com/Aghabeiki/qmk_toolbox.git

$> sudo apt install git python3-pip virtualenv dfu-util dfu-programmer avrdude teensy-loader-cli

$> cd linux
$> virtualenv venv
$> source venv/bin/activate
$> pip install -U pip
$> pip install -e .
$> deactivate
$> source venv/bin/activate

$> qmk-toolbox 
qt.qpa.plugin: From 6.5.0, xcb-cursor0 or libxcb-cursor0 is needed to load the Qt xcb platform plugin.
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb, wayland-brcm, wayland-egl, wayland, vnc, vkkhrdisplay, offscreen, minimalegl, minimal, linuxfb, eglfs.

$> cd src
$> python -m qmk_toolbox.main
qt.qpa.plugin: From 6.5.0, xcb-cursor0 or libxcb-cursor0 is needed to load the Qt xcb platform plugin.
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb, wayland-brcm, wayland-egl, wayland, vnc, vkkhrdisplay, offscreen, minimalegl, minimal, linuxfb, eglfs.

Aborted (core dumped)

after installing the package libxcb-cursor0 it worked (with both command)

@borrougagnou
Copy link
Copy Markdown

borrougagnou commented Feb 12, 2026

Do you have an idea how to test this software ? (just test if the keyboard is detected)
I go into "Tools > HID Console" and I can't select something on the list
only "Tools > Key Tester" is working (but very limited because there is no "Full Keyboard Support" + no ISO mode)

Screenshot from 2026-02-12 22-44-55

When I pressed the "Flash" button I saw this error:

Traceback (most recent call last):
  File "/home/ubuntu/qmk_toolbox/linux/src/qmk_toolbox/ui/main_window.py", line 239, in flash_firmware
    asyncio.create_task(self._flash_firmware_async())
  File "/usr/lib/python3.12/asyncio/tasks.py", line 417, in create_task
    loop = events.get_running_loop()
           ^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: no running event loop

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants