September 10, 2026

Keychron Q8 -- using VIA

I bought my first Q8 (blue without knob) in March of 2026. In September of 2026 I bought a second one, in anticipation of getting a Mac Mini at the end of the month. This second one is a black Q8 with a knob.

I did some searching before buying it, and saw statements that claimed that it would "just work" with linux and the knob would control audio volume.

The knob does something, but it isn't clear what. If I rotate it with focus in a terminal windows, the cursor blinks as I rotate the knob, but no characters appear. If I try rotating it while watching a Youtube video, wierd things happen. The sound begins "stuttering" and the video seems to be doing a very short repeat loop.

New udev entry

I tried using this link to run the VIA utility in my browser: It complained at first about not finding my keyboard. (I have everything set up fine for my original Q8). It turned out I had to add an additional line to my udev file.

I already had a file, but needed to add a second line to the file /etc/udev/rules.d/99-via.rules as follows:

KERNEL=="hidraw*", ATTRS{idVendor}=="3434", ATTRS{idProduct}=="0180", MODE="0666", TAG+="uaccess"
KERNEL=="hidraw*", ATTRS{idVendor}=="3434", ATTRS{idProduct}=="0181", MODE="0666", TAG+="uaccess"
The entry with 0180 is for the Q8 without a knob. The 0181 entry is for the Q8 with a knob. Then do this:
su
udevadm control --reload-rules
udevadm trigger
Then unplug and replug the keyboard.

The knob needs new firmware

Now VIA recognizes the keyboard, but when I try to select the knob on the diagram, it says:
"Your current firmware does not support rotary encoders,
 install the latest firmware for your device"
This is surprising. It seems odd that they should ship the keyboard with incorrect firmware.

I can select and reconfigure other keys without a problem. for example I select the CAPS lock key and change it to do nothing.

Keychron launcher

Several web searches tell me to use the "launcher" to set up the knob. I try this, and it works a lot like VIA. But when I select the knob it also tells me that my firware does not support the knob.

Installing new firmware

For the record, to do a factory reset, hold Fn+J+Z for 4 seconds. The backlight will flash red quickly for 3 seconds to confirm that they keyboard has been reset. This page tells me that I use the "launcher" to install new firmware.

I find 2 versions of "Q8 with knob" firmware, last updated in 2023. There is ANSI and ISO. Some searching confirms that my keyboard is a Q8 ANSI with knob. I have a rectangular "enter" key. An ISO board would have an enter key shaped like an upside down "L". I download both of these:

-rw-r--r-- 1 tom tom      47856 Sep 10 12:52  q8_us_knob_v1.7.bin
-rw-r--r-- 1 tom tom      47856 Sep 10 12:52  q8_iso_knob_v1.5.bin
I delete the second file (the iso version).

You have two options for installing the firmware. The recommended way is to use the launcher web interface to do it. Alternately you can use the "toolbox", but they only offer the toolbox for mac or windows.

I read that on linux you can use dfu-util or "qmk" which is a command line tool.

To do this, you must put the keyboard into bootloader mode as follows:

I get the keycap puller and pull straight up to remove the right space bar. Under it I see the reset button and above it a tiny red LED02.

New keyboard -- the play by play

I fire up launcher and go through the business to connect the keyboard It shows it connected and tells me "Q8 KNOB" at the upper left.

In the list on the left I see "Firmware Update" near the center. I select this and it shows me "latest version v1.1.0" and has an orange button that says "Connect". I click this and it brings up a one entry menu with my keyboard. I select it and click connect. The orange button now says "Next To Update".

Now it gives me a bunch of instructions for windows about downloading and installing the QMK toolbox driver. I am not running Windows, so I just select "Next".

Now it tells me to unplug the keyboard and either hold down ESC or "o" and while holding, replug the kdyboard.

Now of course, the keyboard doesn't work. I release the ESC key I was holding. This causes no particular change, but the keyboard is no longer giving me the constant red backlight I had it set up for. The tiny red LED02 is still lit though.

Launcher now has a button "Match Device" and when I click it I get a list of every USB device on my machine (or so it seems) including my mouse and so on. I don't see "STM32,WB,DFU ..." --- but I do see "STM32 bootloader" so I select that.

Next I pick "Flash Firmware" and away we go. Nothing seems to be happening. A warning on the screen say to not remove the device or reload the page to prevent damage. After 23 minutes, nothing has changed.

I unplug and replug the keyboard. It now gives me the lightshow I usually see with a new keyboard, so two things:

I just exit the page with the Launcher and start it up all over from scratch. It finds the keyboard and tells me it is "Q8 knob". I click on the knob and it tells me the firmware doesn't support the knob, so it looks like I am still running the old firmware and all this accomplished was something resembling a factory reset.

Now try dfu-util

On my Fedora 44 system, I do:
su ; dnf install dfu-util
One of these commands is suggested:
dfu-util -a 0 --dfuse-address 0x08000000:leave -D your_firmware_file.bin
qmk flash your_firmware_file.bin
Based on information in this reddit post: What is recommended is to use "dfu-util -l" to get a list of possible devices. One person in the thread above says that he installed dfu-util and after that was able to use the launcher to update firmware!

You can specify your device to dfu-util via "-d vid:pid"

You use -D to download firmware and -U to upload it

What about QMK?

To install QMK, use this:
curl -fsSL https://install.qmk.fm | sh
I do the install. It asks for my password. It tells me it will install a variety of things using dnf (many of which are already installed). It doesn't take all that long and tells me that the QMK cli is now in /home/tom/.local/bin. I type "qmk" and get a big usage message. Then to flash firmware, consider one of these:
qmk flash your_firmware_file.bin
qmk flash -kb keychron/q8/ansi/knob -km default

I try "qmk console" but it just hangs.

I type "qmk setup" and it wants to put a clone of qmk/qmk_firmware in /home/tom/qmk_firmware. There is no other choice, so I say yes. There is a long wait, then things happen. Patience is important. Eventually it says "QMK is ready to go".

The QMK toolbox I read about is only available on Mac or Windows.

Two keyboards

To continue with this, we will need 2 keyboards. One will be the "knob" that I am trying to flash, and the other could be any keyboard that I can use while the "knob" is in bootloader mode.

I set this up (using my original keychron as the "working" keyboard). I put the knob into bootloader mode and I see this:

dfu-util -U zzz.bin
dfu-util: More than one DFU capable USB device found! Try `--list' and specify the serial number or disconnect all but one device

dfu-util --list
Found DFU: [0483:df11] ver=2200, devnum=47, cfg=1, intf=0, path="1-1.5", alt=3, name="@Device Feature/0xFFFF0000/01*004 e", serial="208038855332"
Found DFU: [0483:df11] ver=2200, devnum=47, cfg=1, intf=0, path="1-1.5", alt=2, name="@OTP Memory /0x1FFF7000/01*0001Ke", serial="208038855332"
Found DFU: [0483:df11] ver=2200, devnum=47, cfg=1, intf=0, path="1-1.5", alt=1, name="@Option Bytes  /0x1FFF7800/01*040 e", serial="208038855332"
Found DFU: [0483:df11] ver=2200, devnum=47, cfg=1, intf=0, path="1-1.5", alt=0, name="@Internal Flash  /0x08000000/0128*0002Kg", serial="208038855332"
Four device show up, but they are all the "knob" showing itself multiple times.
dfu-util -a 0 -U zzz.bin
Opening DFU capable USB device...
Device ID 0483:df11
Device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Interface #0 ...
Determining device status...
DFU state(2) = dfuIDLE, status(0) = No error condition is present
DFU mode device DFU version 011a
Device returned transfer size 2048
dfu-util: Unbound upload not supported on DfuSe devices
Limiting default upload to 16384 bytes
Upload	[=========================] 100%        16384 bytes
Upload done.
I wonder why the upload gets limited? The file I want to download is 47856 bytes.

Now I try this, and get a response:

qmk console
Looking for devices...
Bootloader Connected: stm32-dfu: STM32 BOOTLOADER
Now I think I understand why this just hung previously. That is what it is supposed to do. It is connected to the device sort of like a terminal emulator.

Supposedly if I now type Left-shift Right-shift V it will show the version. No such luck.

Now I am back to using dfu-util. This command now makes more sense. Note that this is from Reddit for a Keychron v6. I use the second command of the following:

dfu-util -a 0 --dfuse-address 0x08000000:leave -D keychron_v6_iso_encoder_default.bin
dfu-util -a 0 --dfuse-address 0x08000000:leave -D q8_us_knob_v1.7.bin
This yields the following on the screen:
Match vendor ID from file: 0483
Match product ID from file: df11
Opening DFU capable USB device...
Device ID 0483:df11
Device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Interface #0 ...
Determining device status...
DFU state(2) = dfuIDLE, status(0) = No error condition is present
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
Downloading element to address = 0x08000000, size = 47840
Erase   	[=========================] 100%        47840 bytes
Erase    done.
Download	[=========================] 100%        47840 bytes
Download done.
File downloaded successfully
Submitting leave request...
Transitioning to dfuMANIFEST state
When it finishes, the "knob" keyboard is running the lightshow, so this looks hopeful. The keyboard works also, which is yet more encouraging.

Launcher now sees two keyboards and labels them identically. I unplug the blue one to eliminate confusion. I connect "launcher" and visit the knob. No more warning about the wrong firmware. It shows the knob as a volume control now.

While I am in there, I remap the caps lock to do nothing.

Linux sound and the knob

Youtube is really the only place I care about Linux sound. So far the results are mixed. I have some videos up and for those, weird stuff happens. But when I start clean it works just right, namely: And now even those old videos are working right.
Don't ask me. It just took some time for this to "settle out".
Have any comments? Questions? Drop me a line!

Adventures in Computing / tom@mmto.org