# \[RESPONDED\] Help configuring FW16 keyboard with VIA

**URL:** <https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176>\
**Category:** Linux\
**Tags:** fedora\
**Created:** [March 16, 2024, 11:06pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176 "2024-03-16T23:06:32Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![dcdruck](https://avatars.discourse-cdn.com/v4/letter/d/779978/32.png) [@dcdruck](https://community.frame.work/u/dcdruck)\
**Post date:** [March 16, 2024, 11:06pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/1 "2024-03-16T23:06:32Z")

</div>

To those of you lucky enough to have received your Framework 16 as I have, I’m wondering if anyone has figured out how to perform QMK configuration using VIA’s web platform.

I’m running Fedora 39. I’ve tried several Chromium browsers including Brave, Ungoogled Chromium, Chromium, and Google Chrome. I see the dialog where I choose my keyboard and click Connect. The dialog closes and nothing happens. The web page still shows the weird graphic that rolls back and forth. If I click Authorize Device again, the dialog now shows that the keyboard is paired, but still nothing happens.

Does the Framework 16 not ship with the necessary firmware? Is there an incompatibility with Fedora or Linux? Am I being thick?

Edit: I just discovered the Framework domain keyboard.frame.work which seems like a wrapper for usevia.app. Anyway, I tried it there and it still fails, but at least I get an error message there. I see the following two errors:

19:08:28.158  
Failed to open the device.  
Device: Framework Laptop 16 Keyboard Module - ANSI  
Vid: 0x32AC  
Pid: 0x0012

19:08:28.169  
Received invalid protocol version from device  
Device: Framework Laptop 16 Keyboard Module - ANSI  
Vid: 0x32AC  
Pid: 0x0012

---

<div class="post-metadata">

**Author:** ![undermark5](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/undermark5/32/16928_2.png) [@undermark5](https://community.frame.work/u/undermark5)\
**Post date:** [March 17, 2024, 12:58am UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/2 "2024-03-17T00:58:32Z")

</div>

You need to make sure that you’ve correctly configured your udev rules. the QMK repo has a copy that you should be able to copy directly into your conf.d folder and then reload the udev rules and then it should work.

---

<div class="post-metadata">

**Author:** ![MJ1](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mj1/32/15519_2.png) [@MJ1](https://community.frame.work/u/MJ1)\
**Post date:** [March 17, 2024, 2:30am UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/3 "2024-03-17T02:30:39Z")

</div>

> [@dcdruck](#):
>
> I see the following two errors:
> 
> 19:08:28.158  
> Failed to open the device.  
> Device: Framework Laptop 16 Keyboard Module - ANSI  
> Vid: 0x32AC  
> Pid: 0x0012
> 
> 19:08:28.169  
> Received invalid protocol version from device  
> Device: Framework Laptop 16 Keyboard Module - ANSI  
> Vid: 0x32AC  
> Pid: 0x0012

This is what’s seen when you need to add the udev rules which [undermark5](http://community.frame.work/u/undermark5) mentioned.

What version of Fedora 39 do you have?  
This has been reported on KDE and Silverblue, but not yet on regular Fedora 39.

Instructions:  
[github.com/FrameworkComputer/qmk\_hid#running-on-linux](https://github.com/FrameworkComputer/qmk_hid#running-on-linux)

place [this file](https://github.com/qmk/qmk_firmware/tree/master/util/udev/50-qmk.rules) into `/etc/udev/rules.d/`.

Once added, run the following:

```auto
sudo udevadm control --reload-rules
sudo udevadm trigger

```

If anyone else needs to apply this just to get [keyboard.frame.work](https://keyboard.frame.work) to connect, please post your distro.

---

<div class="post-metadata">

**Author:** ![MJ1](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mj1/32/15519_2.png) [@MJ1](https://community.frame.work/u/MJ1)\
**Post date:** [March 17, 2024, 2:38am UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/4 "2024-03-17T02:38:29Z")

</div>

> [@dcdruck](#):
>
> Edit: I just discovered the Framework domain keyboard.frame.work which seems like a wrapper for usevia.app.

The Framework keyboards do not work by default on the general Via site. The board definition files haven’t been added for them to be automatically recognized. [keyboard.frame.work](https://keyboard.frame.work) is a Framework hosted copy.

---

<div class="post-metadata">

**Author:** ![dcdruck](https://avatars.discourse-cdn.com/v4/letter/d/779978/32.png) [@dcdruck](https://community.frame.work/u/dcdruck)\
**Post date:** [March 21, 2024, 1:14am UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/5 "2024-03-21T01:14:42Z")

</div>

Thanks for the feedback, everyone.

@MJ1 I had tried that rules file after @undermark5 suggested it, but that didn’t do the trick. Thanks for the tip about keyboard.frame.work though, that did eventually work once I found the right udev rule. See below.

Since the udev rule at the QMK Github didn’t work, I ended up finding a Vial tutorial that ended up doing the trick for me. I followed the instructions here to make a device-specific rule here: [Configuring udev on Linux - Vial](https://get.vial.today/manual/linux-udev.html)

The rule that I ended up creating that works looks like this:

```auto
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0012", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl"

```

---

<div class="post-metadata">

**Author:** ![MJ1](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mj1/32/15519_2.png) [@MJ1](https://community.frame.work/u/MJ1)\
**Post date:** [March 21, 2024, 1:50am UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/6 "2024-03-21T01:50:53Z")

</div>

What version of Fedora 39 do you have?

---

<div class="post-metadata">

**Author:** ![dcdruck](https://avatars.discourse-cdn.com/v4/letter/d/779978/32.png) [@dcdruck](https://community.frame.work/u/dcdruck)\
**Post date:** [March 21, 2024, 2:05am UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/7 "2024-03-21T02:05:23Z")

</div>

The standard Workstation Edition running Gnome.

---

<div class="post-metadata">

**Author:** ![Axel\_Voitier](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/axel_voitier/32/16821_2.png) [@Axel\_Voitier](https://community.frame.work/u/Axel_Voitier)\
**Post date:** [March 22, 2024, 10:45pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/8 "2024-03-22T22:45:13Z")

</div>

I am having the same problem but without a solution yet 🙁.

I use Ubuntu 22.04. I have the udev rules from qmk installed and reloaded. I also tried that additional udev rule above (tweaked to my user group just to see if it works). But to no avail.

The framework VIA page shows the same errors:

```auto
23:33:21.132
Failed to open the device.
Device: Framework Laptop 16 Keyboard Module - ANSI
Vid: 0x32AC
Pid: 0x0012
23:33:21.146
Received invalid protocol version from device
Device: Framework Laptop 16 Keyboard Module - ANSI
Vid: 0x32AC
Pid: 0x0012

```

In addition, chrome page `chrome://device-log/` shows:

```auto
[23:26:14] Failed to open '/dev/hidraw3': FILE_ERROR_ACCESS_DENIED
[23:26:14] Access denied opening device read-write, trying read-only.

```

But the access rights on this file seems right:

```auto
$ ll /dev/hidraw*
crw-rw----+ 1 root plugdev 241, 0 mars 22 23:00 /dev/hidraw0
crw-rw----+ 1 root plugdev 241, 1 mars 22 23:00 /dev/hidraw1
crw-rw----+ 1 root lexa 241, 2 mars 22 23:00 /dev/hidraw2
crw-rw----+ 1 root lexa 241, 3 mars 22 23:00 /dev/hidraw3
crw-rw----+ 1 root lexa 241, 4 mars 22 23:00 /dev/hidraw4
crw-rw----+ 1 root lexa 241, 5 mars 22 23:00 /dev/hidraw5

$ getfacl /dev/hidraw3
getfacl: Removing leading '/' from absolute path names
# file: dev/hidraw3
# owner: root
# group: lexa
user::rw-
user:lexa:rw-
group::rw-
mask::rw-
other::---

```

For now, apart from rebooting (which I will try soon), I am out of idea 🤔. Would you have any?

EDIT: Nop, reboot didn’t magically fixed it.

---

<div class="post-metadata">

**Author:** ![Axel\_Voitier](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/axel_voitier/32/16821_2.png) [@Axel\_Voitier](https://community.frame.work/u/Axel_Voitier)\
**Post date:** [March 22, 2024, 11:10pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/9 "2024-03-22T23:10:23Z")

</div>

Also adding that I use chromium from snap.  
Reading [this](http://community.frame.work/t/responded-qmk-keyboard-setup-not-working-under-linux/45617/14) comment, I tried the following command:

```auto
sudo snap connect chromium:raw-usb

```

But that does not work neither.

---

<div class="post-metadata">

**Author:** ![MJ1](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mj1/32/15519_2.png) [@MJ1](https://community.frame.work/u/MJ1)\
**Post date:** [March 22, 2024, 11:19pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/10 "2024-03-22T23:19:28Z")

</div>

> [@Axel\_Voitier](#):
>
> Also adding that I use chromium from snap.

I was going to ask if your browser was installed as a normal package.

Snaps can have permission issues. And some snap browser builds just leave out WebHID support. It’s been reported that the snap Brave browser build does. What does this page say for you? [https://webapicheck.com/apis/webhid-api](https://webapicheck.com/apis/webhid-api)

For your udev rule, you have `GROUP="lexa"`?

If neither of those are the problem, you could try just changing permissions on /dev/hidraw3. Mine is `crw-rw-rw-+` on LinuxMint.

---

<div class="post-metadata">

**Author:** ![Axel\_Voitier](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/axel_voitier/32/16821_2.png) [@Axel\_Voitier](https://community.frame.work/u/Axel_Voitier)\
**Post date:** [March 22, 2024, 11:26pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/11 "2024-03-22T23:26:57Z")

</div>

> What does this page say for you? [https://webapicheck.com/apis/webhid-api](https://webapicheck.com/apis/webhid-api)

```auto
API test:
Available on this device (experimental)

```

> For your udev rule, you have `GROUP="lexa"` ?

Yes

```auto
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0012", MODE="0660", GROUP="lexa", TAG+="uaccess", TAG+="udev-acl"

```

---

<div class="post-metadata">

**Author:** ![Axel\_Voitier](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/axel_voitier/32/16821_2.png) [@Axel\_Voitier](https://community.frame.work/u/Axel_Voitier)\
**Post date:** [March 22, 2024, 11:30pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/12 "2024-03-22T23:30:40Z")

</div>

> If neither of those are the problem, you could try just changing permissions on /dev/hidraw3. Mine is `crw-rw-rw-+` on LinuxMint.

Did not work unfortunately ☹

```auto
$ ll /dev/hidraw*
crw------- 1 root root 241, 0 mars 23 00:21 /dev/hidraw0
crw------- 1 root root 241, 1 mars 23 00:21 /dev/hidraw1
crw-rw----+ 1 root lexa 241, 2 mars 23 00:21 /dev/hidraw2
crw-rw-rw-+ 1 root lexa 241, 3 mars 23 00:21 /dev/hidraw3
crw-rw----+ 1 root lexa 241, 4 mars 23 00:21 /dev/hidraw4
crw-rw----+ 1 root lexa 241, 5 mars 23 00:21 /dev/hidraw5

```

Stilll the same access denied error message in `chrome://device-log/`.

---

<div class="post-metadata">

**Author:** ![MJ1](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mj1/32/15519_2.png) [@MJ1](https://community.frame.work/u/MJ1)\
**Post date:** [March 22, 2024, 11:31pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/13 "2024-03-22T23:31:58Z")

</div>

At that point, I would try a non-snap browser build. Rule out an unseen snap permission issue.

---

<div class="post-metadata">

**Author:** ![MJ1](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mj1/32/15519_2.png) [@MJ1](https://community.frame.work/u/MJ1)\
**Post date:** [March 22, 2024, 11:38pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/14 "2024-03-22T23:38:11Z")

</div>

Also, you should be able to simplify your udev rule to just

```auto
KERNEL=="hidraw*", MODE="0660", GROUP="lexa", TAG+="uaccess", TAG+="udev-acl"

```

---

<div class="post-metadata">

**Author:** ![Axel\_Voitier](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/axel_voitier/32/16821_2.png) [@Axel\_Voitier](https://community.frame.work/u/Axel_Voitier)\
**Post date:** [March 22, 2024, 11:38pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/15 "2024-03-22T23:38:16Z")

</div>

Ah! I was doing just that 😃 .

It works! Using deb package from google chrome itself…  
So. that does indeed point to a snap permission issue (once again, snap is the culprit of something mysteriously not working…).

---

<div class="post-metadata">

**Author:** ![MJ1](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mj1/32/15519_2.png) [@MJ1](https://community.frame.work/u/MJ1)\
**Post date:** [March 22, 2024, 11:41pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/16 "2024-03-22T23:41:08Z")

</div>

Quite the pain that it claims it has WebHID support when the permissions to actually use it are missing.

---

<div class="post-metadata">

**Author:** ![Axel\_Voitier](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/axel_voitier/32/16821_2.png) [@Axel\_Voitier](https://community.frame.work/u/Axel_Voitier)\
**Post date:** [March 22, 2024, 11:43pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/17 "2024-03-22T23:43:46Z")

</div>

Yes. But I guess it only checks if it can instantiate the API without trying to make an actual real access to a device.

I will see later if I can investigate the snap issue. For now, I have a layout to change 😄.

Thanks for your help!

---

<div class="post-metadata">

**Author:** ![Chris\_Herborth](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/chris_herborth/32/30107_2.png) [@Chris\_Herborth](https://community.frame.work/u/Chris_Herborth)\
**Post date:** [March 25, 2024, 5:14pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/18 "2024-03-25T17:14:01Z")

</div>

I had to add `50-qmk.rules` file to OpenSUSE Tumbleweed, then was able to tweak my keyboard via keyboard.frame.work using Chromium (but not Firefox).

Cheers!

---

<div class="post-metadata">

**Author:** ![MJ1](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mj1/32/15519_2.png) [@MJ1](https://community.frame.work/u/MJ1)\
**Post date:** [March 25, 2024, 6:37pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/19 "2024-03-25T18:37:55Z")

</div>

> [@Chris\_Herborth](#):
>
> I had to add `50-qmk.rules` file to OpenSUSE Tumbleweed, then was able to tweak my keyboard via keyboard.frame.work using Chromium (but not Firefox).

Via requires a browser with WebHID enabled. It works in Chrome, Edge, and other Google Chromium-based browsers.

Firefox has chosen not to enable WebHID.  
Mozilla, which makes Firefox, believes that websites should not have low level access to hardware, so they have chosen not to enable WebHID, for the same reasons that they don’t support WebUSB.

[mozilla.github.io/standards-positions/#webusb](https://mozilla.github.io/standards-positions/#webusb)  
[mozilla.github.io/standards-positions/#webhid](https://mozilla.github.io/standards-positions/#webhid)

> **Mozilla’s / Firefox’s Position**
>
> > Because many USB devices are not designed to handle potentially-malicious interactions over the USB protocols and because those devices can have significant effects on the computer they’re connected to, we believe that the security risks of exposing USB devices to the Web are too broad to risk exposing users to them or to explain properly to end users to obtain meaningful informed consent. It also poses risks that sites could use USB device identity or data stored on USB devices as tracking identifiers.

Via has an electron wrapper that could also be used [github.com/the-via/releases/releases](https://github.com/the-via/releases/releases) (you need to load the Framework draft definition). But I found it hard to get it to detect a keyboard reliably.

One of the reason I much prefer Vial. It has desktop apps for Windows, Linux, Mac. Doesn’t rely on a website and giving it low level access to hardware. Though Vial does still offer a website configurer if you so desire.

---

<div class="post-metadata">

**Author:** ![Matt\_Hartley](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/matt_hartley/32/13623_2.png) [@Matt\_Hartley](https://community.frame.work/u/Matt_Hartley)\
**Post date:** [April 4, 2024, 10:02pm UTC](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176/20 "2024-04-04T22:02:40Z")

</div>

For keyboard:

- Start off first by [updating the firmware](https://github.com/FrameworkComputer/qmk_firmware/releases/tag/v0.2.2) is you have not done so yet. You’ll want [firmware 0.2.9](https://github.com/FrameworkComputer/qmk_firmware/releases/tag/v0.2.9).
- Get Rust installed:  
`curl --proto '=https' --tlsv1.2 -sSf [https://sh.rustup.rs](https://sh.rustup.rs/) | sh`
- Get udev rules ready:

```auto
cd Downloads && wget https://raw.githubusercontent.com/qmk/qmk_firmware/master/util/udev/50-qmk.rules && sudo cp 50-qmk.rules /etc/udev/rules.d/ && sudo udevadm control --reload-rules && sudo udevadm trigger && git clone https://github.com/FrameworkComputer/qmk_hid.git && cd qmk_hid

```

- Inside the qmk\_hid directory:  
`cargo run`  
then  
`cargo build`  
then  
`./target/debug/qmk_hid`

- Playing with RBG effects like:  
`./target/debug/qmk_hid via --rgb-effect 21`

- [Web UI](https://keyboard.frame.work/) is best with Chrome.

- I recommend bouncing between the Via web UI and the Rust application as each has its benefits.

[Next page](https://community.frame.work/t/responded-help-configuring-fw16-keyboard-with-via/47176.md?page=2)
