[RESPONDED] QMK keyboard setup not working under Linux?

Hmm. Cant use https://keyboard.frame.work/ to remap using Ubuntu 22.04.4 LTS x86_64
Have done this

place this file into /etc/udev/rules.d/.

Once added, run the following:

sudo udevadm control --reload-rules
sudo udevadm trigger
%20t
I get Error: Failed to open the device.
Device: Framework Laptop 16 Keyboard Module - ANSI
Vid: 0x32AC
Pid: 0x0012

Using both chrome and Chromium, I want to remap the dollar sign on my RGB keyboard to a GBP sign.

Edit. Restarted Chrome, all good.

1 Like

Im on Fedora 40 and also needed to run those instructions to get keyboard.frame.work to connect to my keyboard.

1 Like

Hi - I needed the udev rule. Framework 16, Latest Bios as of 2024-07-01, Ubuntu 22.04 with Oem kernel. Using numpad module and standard us keyboard.

I’m using Debian 13 trixie (in testing right now), and I needed the 50-qmk.rules file in udev’s config too. Worked a charm after that.

I needed Chromium temporarily to use keyboard.frame.work. The site works OK with throwaway default profiles, or with --incognito if you prefer.

chromium --temp-profile https://keyboard.frame.work/

Usage notes

  1. Click on Authorize device +
  2. Click on the device in the <website-name> wants to connect to a HID device dropdown, and click Connect. Mine appears as Framework laptop 16 Keyboard Module - ISO.
  3. On the next screen, click keys at the top of the page to select them, then choose what they map to underneath. Changes take effect immediately!
  4. Layers and momentary layer enabling eventually make sense, but there’s no help within the webapp,and you have to use trial and error.

Slightly confusing things

I wanted to map Fn+Right Ctrl to Menu because the Framework keyboards don’t have the menu key. I’ve used the combination on other laptops, and I’m still half used to it.

It’s really difficult to read the rollover text for each key in the page footer. It’s just too transparent and looks like a glitch.

The Fn key has MO(1) on the keyboard diagram in Layer 0, and MO(3) in Layer 2. Pretty confusing at first.

  • Turns out “MO(n)” means "momentarily enable layer n while the key is held.
  • And “∇” is for pass-though - to Layer 0, I think, but I didn’t investigate further.

I found I needed to map Right Ctrl to Menu in both Layer 3 and Layer 1. Just playing with Layer 1 at first didn’t seem to be having any effect!

  • Layer 0 is what keypresses do in Fn lock mode, and also the base layer for the firmware. Media keys live here. Normal mode for some but not for me.
    • its Fn mapping is MO(1)
  • Layer 1 is Fn lock mode but while Fn is held down. It’s mostly except for some documented special Fn-key mappings.
  • Layer 2 is regular mode: the mode I’m in normally, without any modifiers held down. It’s mostly , so keystrokes pass through to layer 0.
    • its Fn key mapping is MO(3)
  • Layer 3 is used when Fn is held down outside Fn lock mode. Special Fn combinations need to go here and in Layer 1

Annoying error-proneness: when a mapping is added to a key, the highlight moves on to the next key on the keyboard display, so you can really easily remap the wrong key by accident if you try to correct what you just did. It’s really difficult to see the selected key too, leading to more errors.

Final oddity is that the Menu mapping shows as RApp on the keyboard display, and KC_APP in the footer rollover :zany_face:

But it works! Thanks to everyone in the thread for leading me in the right direction, and particularly to @MJ1 for being so awesome and helpful :+1:

3 Likes

I’ve just got a Framework Desktop running with Ubuntu 24.04 and I’m not able to get my Keychron K10 (UK keyboard layout) working with usevia.app, launcher.keychron.com or keyboard.frame.work. I have tried steps to add the udev rule described above (and running the commands), as well as sudo chmod a+rw /dev/hidraw<num>.

Any idea what I am missing here? Everything I find online suggests that everyone is having no problem once the udev rules are in place. For me, it makes no difference. In Chrome I can see the device is recognised but I still get the error:

HIDEvent[11:18:46] Failed to open '/dev/hidraw4': FILE_ERROR_ACCESS_DENIED

HIDEvent[11:18:46] Access denied opening device read-write, trying read-only.

HIDEvent[11:18:15] Failed to open '/dev/hidraw4': FILE_ERROR_ACCESS_DENIED

HIDEvent[11:18:15] Access denied opening device read-write, trying read-only.

HIDUser[11:18:13] HID device detected: vendorId=1659, productId=9056, name='Prolific Technology Inc. USB-I2C Controller ', serial='AMBNx196117', deviceIds=['/sys/devices/pci0000:00/0000:00:08.3/0000:c4:00.4/usb7/7-1/7-1.6/7-1.6:1.0/0003:067B:2360.0009/hidraw/hidraw0'], reportDescriptor='BgD/CQGhAQkBdQgm/wAVAIWAlQIJAbEChYGVAQkBsQKFgpUCCQGxAoWDlQEJAbEChYSVAgkBsQKFhZUBCQGxAoWGlQIJAbEChaKVPwkBkQKFo5U/CQGBAgkBkQLA'

HIDUser[11:18:13] HID device detected: vendorId=13364, productId=2724, name='Keychron Keychron K10 Max', serial='', deviceIds=['/sys/devices/pci0000:00/0000:00:08.1/0000:c2:00.4/usb1/1-1/1-1.2/1-1.2:1.2/0003:3434:0AA4.000C/hidraw/hidraw5'], reportDescriptor='BQEJAqEBhQIJAaEABQkZASkIFQAlAZUIdQGBAgUBCTAJMRWBJX+VAnUIgQYJOBWBJX+VAXUIgQYFDAo4AhWBJX+VAXUIgQbAwAUBCYChAYUDGQEqtwAVASa3AJUBdRCBAMAFDAkBoQGFBBkBKqACFQEmoAKVAXUQgQDABQEJBqEBhQYFBxngKecVACUBlQh1AYECBQcZACnvFQAlAZXwdQGBAgUIGQEpBZUFdQGRApUBdQORAcA='

HIDUser[11:18:13] HID device detected: vendorId=13364, productId=2724, name='Keychron Keychron K10 Max', serial='', deviceIds=['/sys/devices/pci0000:00/0000:00:08.1/0000:c2:00.4/usb1/1-1/1-1.2/1-1.2:1.1/0003:3434:0AA4.000B/hidraw/hidraw4'], reportDescriptor='BmD/CWGhAQliFQAm/wCVIHUIgQIJYxUAJv8AlSB1CJECwA=='

HIDUser[11:18:13] HID device detected: vendorId=13364, productId=2724, name='Keychron Keychron K10 Max', serial='', deviceIds=['/sys/devices/pci0000:00/0000:00:08.1/0000:c2:00.4/usb1/1-1/1-1.2/1-1.2:1.0/0003:3434:0AA4.000A/hidraw/hidraw3'], reportDescriptor='BQEJBqEBBQcZ4CnnFQAlAZUIdQGBApUBdQiBAQUHGQAp/xUAJv8AlQZ1CIEABQgZASkFFQAlAZUFdQGRApUBdQORAcA='

HIDUser[11:18:13] HID device detected: vendorId=7847, productId=102, name='2.4G Mouse', serial='', deviceIds=['/sys/devices/pci0000:00/0000:00:08.1/0000:c2:00.4/usb1/1-1/1-1.1/1-1.1:1.1/0003:1EA7:0066.0008/hidraw/hidraw2'], reportDescriptor='BrX/CQGhAYW1CQIVACb/AHUIlQeBAgkCFQAm/wB1CJUHkQLABQEJAqEBhQIJAaEABQkZASkIFQAlAZUIdQGBAgUBCTAJMRYB+Cb/B3UMlQKBBgk4FYElf3UIlQGBBgUMCjgClQGBBsDABQwJAaEBhQEZASr/AxUBJv8DlQF1EIEAwAUBCYChAYUDGoEAKoMAFQAlAZUDdQGBApUFgQHABrz/CYihAYUEGQAq/wAVACb/AJUBdQiBAMA='

HIDUser[11:18:13] HID device detected: vendorId=7847, productId=102, name='2.4G Mouse', serial='', deviceIds=['/sys/devices/pci0000:00/0000:00:08.1/0000:c2:00.4/usb1/1-1/1-1.1/1-1.1:1.0/0003:1EA7:0066.0007/hidraw/hidraw1'], reportDescriptor='BQEJBqEBBQgZASkFFQAlAZUFdQGRApUBdQORAQUHGuAAKucAFQAlAZUIdQGBApUBdQiBARkAKv8AFQAm/wCVBoEAwA=='

USBUser[11:17:47] USB device added: path=/dev/bus/usb/003/003 vendor=3725 "MediaTek Inc.", product=1815 "Wireless_Device", serial="000000000", guid=15d8368b-2343-429d-98fa-fedaf95a8c29

USBEvent[11:17:47] Failed to open /dev/bus/usb/003/003: Permission denied (13)

USBUser[11:17:47] USB device added: path=/dev/bus/usb/007/006 vendor=1659 "Prolific Technology Inc. ", product=9056 "USB-I2C Controller ", serial="AMBNx196117", guid=bc2e7588-9f3e-42cb-809d-924a9313e355

USBUser[11:17:47] USB device added: path=/dev/bus/usb/001/006 vendor=13364 "Keychron", product=2724 "Keychron K10 Max", serial="", guid=261305db-2dc9-4195-b340-e8578436bd2b

USBUser[11:17:47] USB device added: path=/dev/bus/usb/001/005 vendor=7847 "", product=102 "2.4G Mouse", serial="", guid=f9c3de5d-adef-4272-bd38-9be7965ccaaa

BluetoothEvent[11:17:44] BluetoothAPI: 0x1f1c008afe00

DisplayEvent[11:17:44] Display[31] bounds=[0,0 3840x2160], workarea=[0,0 3840x2160], scale=1, rotation=0, panel_rotation=0 external detected

DisplayEvent[11:17:44] Displays updated, count: 1
1 Like

1.Install inputmodule-udev and inputmodule-control from the AUR — these packages add support for Framework 16.
2.Update libinput to version 1.26.0 or newer, as it contains a fix for recognising the Framework 16 keyboard as internal.
3.Ensure that WebHID is supported in your browser (for example, Chrome works better than Chromium).

sudo nano /etc/udev/rules.d/50-qmk.rules

KERNEL==“hidraw*”, SUBSYSTEM==“hidraw”, ATTRS{manufacturer}==“Framework”, MODE=“0666”, TAG+=“uaccess”

Once added, run the following:
sudo udevadm control --reload-rules && sudo udevadm trigger

2 Likes

3.Ensure that WebHID is supported in your browser (for example, Chrome works better than Chromium).

Thanks @Vitaliy_L, this was it. It never occurred to me that Chrome vs Chrominum would make a difference in this case. After installing Chrome I was able to access the key mapper.

2 Likes

I tried these instructions, but no go.

06:53:15.909
NotAllowedError: Failed to open the device.
Device: Framework Laptop 16 Keyboard Module - ANSI
Vid: 0x32AC
Pid: 0x0012

06:53:15.923
Received invalid protocol version from device
Device: Framework Laptop 16 Keyboard Module - ANSI
Vid: 0x32AC
Pid: 0x0012

Which browser, and how was it installed? Normal system package, snap, flatpak, etc. Which OS and version?

Try this:

2 Likes

If your keyboard works normally but does not appear in keyboard.frame.work, this is typically due to WebHID permissions or udev rule changes rather than a hardware fault. Also worth making sure your keyboard firmware is current (important).

In that case, please follow this KB article, which covers updated udev rules and browser requirements on Linux.

1 Like

I’ve tried Chrome, Vivaldi, and Firefox, all installed as normal system packages on Arch Linux. I’m currently on kernel 6.18.5.

This worked. The udev rules further up this thread did not work, but the ones you linked did.

Fantastic to hear! Glad to hear this!

1 Like