- OS: Artix Linux (OpenRC init system)
- udev: eudev (not systemd udev)
- Browser: Ungoogled Chromium, eventually tested with standard Google Chrome (latest) to rule out browser issue
- Controller: GC Ultimate (GCU-R4K), firmware Hoja2
- USB ID: 057e:2009 (presents as Nintendo Switch Pro Controller)
The Hoja2 config tool at handheldlegend.github.io/hoja2/ connects via WebHID/WebUSB. On Linux, this requires a udev rule granting the browser access to the device's hidraw node.
The standard udev rule documented for this use case uses TAG+="uaccess", which relies on systemd-logind to dynamically apply an ACL to the device node for the currently logged-in user. On systems using OpenRC with eudev (as on Artix Linux, Gentoo, and others), this tag is silently ignored, so eudev does not implement the uaccess builtin.
The connect dialog shows the controller as "GCU-R4K - Paired" but clicking Connect does nothing. No error is shown in the browser.
TAG+="uaccess" is a systemd udev feature. It does not work with eudev unless systemd-logind (or a compatible replacement with ACL support) is running. On OpenRC + eudev systems it has no effect, leaving the hidraw device inaccessible to the browser.
Found a work which involves creating a udev rule using explicit MODE="0666" instead of TAG+="uaccess":
KERNEL=="hidraw*", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="2009", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="2009", MODE="0666"
Save to /etc/udev/rules.d/99-hoja-gcu.rules, then:
sudo udevadm control --reload-rules && sudo udevadm trigger
Unplug and replug the controller. The config tool should connect now.
Note: the controller's USB ID is 057e:2009 (Nintendo Co., Ltd Switch Pro Controller) because Hoja2 presents the GCU-R4K as a Switch Pro Controller in its default mode.
The official Linux setup documentation (if any exists) should note that TAG+="uaccess" only works on systemd-based distributions. Non-systemd distros (Artix, Gentoo, Void, Alpine, etc.) need MODE="0666" or a group-based alternative. Ideally the docs or repo README would include a ready-to-use udev rule for both cases, or of course, some other sort of solution that requires no workaround at all, or at the very least checks for the presence of systemd and if no such presence is found, prints an error with further instructions.
The Hoja2 config tool at handheldlegend.github.io/hoja2/ connects via WebHID/WebUSB. On Linux, this requires a udev rule granting the browser access to the device's hidraw node.
The standard udev rule documented for this use case uses TAG+="uaccess", which relies on systemd-logind to dynamically apply an ACL to the device node for the currently logged-in user. On systems using OpenRC with eudev (as on Artix Linux, Gentoo, and others), this tag is silently ignored, so eudev does not implement the uaccess builtin.
The connect dialog shows the controller as "GCU-R4K - Paired" but clicking Connect does nothing. No error is shown in the browser.
TAG+="uaccess" is a systemd udev feature. It does not work with eudev unless systemd-logind (or a compatible replacement with ACL support) is running. On OpenRC + eudev systems it has no effect, leaving the hidraw device inaccessible to the browser.
Found a work which involves creating a udev rule using explicit MODE="0666" instead of TAG+="uaccess":
KERNEL=="hidraw*", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="2009", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="2009", MODE="0666"
Save to /etc/udev/rules.d/99-hoja-gcu.rules, then:
sudo udevadm control --reload-rules && sudo udevadm trigger
Unplug and replug the controller. The config tool should connect now.
Note: the controller's USB ID is 057e:2009 (Nintendo Co., Ltd Switch Pro Controller) because Hoja2 presents the GCU-R4K as a Switch Pro Controller in its default mode.
The official Linux setup documentation (if any exists) should note that TAG+="uaccess" only works on systemd-based distributions. Non-systemd distros (Artix, Gentoo, Void, Alpine, etc.) need MODE="0666" or a group-based alternative. Ideally the docs or repo README would include a ready-to-use udev rule for both cases, or of course, some other sort of solution that requires no workaround at all, or at the very least checks for the presence of systemd and if no such presence is found, prints an error with further instructions.