{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreiealyixqifj4wyynxs7i6ztmry3ajaxryxbi3qvrutzuzq6mmeamu",
"uri": "at://did:plc:aoqs4f5ru6ztomatyvept7bf/app.bsky.feed.post/3mnlsxowgez2q"
},
"canonicalUrl": "https://til.iainsimmons.com/posts/enable-browser-access-to-keyboard-firmware-on-linux",
"description": "today iain learned: How to enable browser access to a keyboard's QMK firmware on Linux, via the USB HID interface and udev rules",
"path": "/posts/enable-browser-access-to-keyboard-firmware-on-linux",
"publishedAt": "2026-05-10T00:00:00.000Z",
"site": "at://did:plc:aoqs4f5ru6ztomatyvept7bf/site.standard.publication/3mnlsntqzp72a",
"tags": [
"terminal",
"linux",
"keyboard",
"browser",
"hardware"
],
"textContent": "Recently my Keychron V5 keyboard suddenly reset all the key mappings for no particular reason, which was strange, but thankfully my mappings are not too elaborate and I could still function enough to get to the web app I usually use for configuring it.\n\nI use the VIA app, and normally it's as simple as visiting the site and connecting to my keyboard via the USB HID interface:\n\n![[attachments/via-app-connection-attempt.png|VIA app keyboard connection attempt]]\n\nViewing the errors in the VIA app I was greeted with the following:\n\n![[attachments/via-app-errors.png|VIA app errors]]\n\nA bit of searching around and I was highlighted to the Chromium device log, which you can access with a URL like this in your browser (may be slightly different depending on which browser you use):\n\nchrome://device-log OR helium://device-log OR brave://device-log\n\nThere I could see some errors related to permissions to this device:\n\n![[attachments/helium-device-log.png|Helium device log]]\n\nHere's one entry in more detail:\n\nA quick, once off solution would be to change the permissions to that device, but they will reset if the keyboard is unplugged or computer is restarted:\n\nA more permanent solution is to add a udev rule. This page on the QMK firmware docs explains the required rule, but the first step is to find the device ID with lsusb:\n\nHere the vendor ID and product ID are the parts before and after the colon, respectively: e.g. 1234:5678.\n\nThen I launch Neovim with sudo and add the new udev rule file:\n\nWith the following content, based on the IDs obtained above:\n\nAnd lastly, reload the udev rules and trigger a change:\n\nAnd then I can connect my keyboard and the VIA app will run happily!\n\n![[attachments/via-app-mascot.png|VIA app smiling mascot]]",
"title": "Enable browser access to keyboard firmware on Linux"
}