{
  "$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"
}