<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Udev on foosel.net</title><link>https://foosel.net/tags/udev/</link><description>Recent content in Udev on foosel.net</description><generator>Hugo</generator><language>en-us</language><copyright>Gina Häußge (foosel)</copyright><lastBuildDate>Tue, 28 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://foosel.net/tags/udev/index.xml" rel="self" type="application/rss+xml"/><item><title>How to fix the Chromium WebHID connection for a Keychron G5 under Linux</title><link>https://foosel.net/til/how-to-fix-the-webhid-connection-for-a-keychron-g5-under-linux/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate><guid>https://foosel.net/til/how-to-fix-the-webhid-connection-for-a-keychron-g5-under-linux/</guid><description>&lt;p&gt;Today my new mouse arrived, a &lt;a href="https://www.keychron.com/products/keychron-g5-ultra-light-wireless-mouse"&gt;Keychron G5&lt;/a&gt;. I had read that it was supposedly configurable through (Chromium based) browsers via &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/WebHID_API"&gt;WebHID&lt;/a&gt;, OS agnostic, so no need to install any weird (bloated) drivers or keep a Windows VM ready. However, when I went to &lt;code&gt;https://launcher.keychron.com&lt;/code&gt; in my ungoogled Chromium running under Fedora Linux, I had to realize that while it could see the mouse, it would not actually connect to it.&lt;/p&gt;
&lt;p&gt;A quick web search later I fell over &lt;a href="https://github.com/StefanMarAntonsson/keychron-launcher-arch-guide"&gt;this repository&lt;/a&gt; with a guide on how to get Chromium&amp;rsquo;s WebHID connection to work to a Keychron Q5 HE under ArchLinux, and I figured that was close enough (and the steps outlined therein logical enough) to adapt. And just so I can easily find this again, I&amp;rsquo;m replicating the crucial bits here&amp;hellip;&lt;/p&gt;</description><content:encoded><![CDATA[<p>Today my new mouse arrived, a <a href="https://www.keychron.com/products/keychron-g5-ultra-light-wireless-mouse">Keychron G5</a>. I had read that it was supposedly configurable through (Chromium based) browsers via <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebHID_API">WebHID</a>, OS agnostic, so no need to install any weird (bloated) drivers or keep a Windows VM ready. However, when I went to <code>https://launcher.keychron.com</code> in my ungoogled Chromium running under Fedora Linux, I had to realize that while it could see the mouse, it would not actually connect to it.</p>
<p>A quick web search later I fell over <a href="https://github.com/StefanMarAntonsson/keychron-launcher-arch-guide">this repository</a> with a guide on how to get Chromium&rsquo;s WebHID connection to work to a Keychron Q5 HE under ArchLinux, and I figured that was close enough (and the steps outlined therein logical enough) to adapt. And just so I can easily find this again, I&rsquo;m replicating the crucial bits here&hellip;</p>
<p>Apparently all I needed were some additional <code>udev</code> rules for both the mouse itself (when connected via the USB-C cable) as well as the 2.4GHz dongle (when connected wirelessly). So, first I figured out the relevant vendor and product IDs:</p>
<pre tabindex="0"><code>$ lsusb | grep -i keychron
Bus 005 Device 042: ID 3434:d028 Keychron Keychron Ultra-Link 8K
Bus 005 Device 062: ID 3434:d06f Keychron Keychron G5
</code></pre><p>Those turned out to be vendor <code>0x3434</code> and products <code>0xd06f</code> (wired mouse) and <code>0xd028</code> (dongle). So based on the repo linked above I created <code>/etc/udev/rules.d/50-keychron-g5.rules</code> as follows:</p>
<pre tabindex="0"><code># Keychron G5 (WebHID)
KERNEL==&#34;hidraw*&#34;, SUBSYSTEM==&#34;hidraw&#34;, ATTR{idVendor}=&#34;3434&#34;, ATTRS{idProduct}==&#34;d06f&#34;, MODE=&#34;0666&#34;, TAG+=&#34;uaccess&#34;, TAG+=&#34;udev-acl&#34;
KERNEL==&#34;hidraw*&#34;, SUBSYSTEM==&#34;hidraw&#34;, ATTR{idVendor}=&#34;3434&#34;, ATTRS{idProduct}==&#34;d028&#34;, MODE=&#34;0666&#34;, TAG+=&#34;uaccess&#34;, TAG+=&#34;udev-acl&#34;
</code></pre><p>then refreshed <code>udev</code>:</p>
<pre tabindex="0"><code>sudo udevadm control --reload-rules
sudo udevadm trigger
</code></pre><p>and replugged the mouse and restarted Chromium.</p>
<p>After that, the launcher page could finally connect! 🥳</p>
]]></content:encoded></item></channel></rss>