Configuring udev permissions for Vial on Linux
Posted on Mon, 11 May 2026 in Linux
When you plug in a Vial-firmware keyboard (like a Keychron Q10) on Linux, the Vial GUI won't detect it because your user lacks permissions on /dev/hidraw* devices.
Vial's official docs recommend a universal udev rule that identifies the keyboard by its magic serial vial:f64c2b3c. This beats vendor/product ID rules because it works with any Vial keyboard you connect.
First, find your keyboard with lsusb. Mine shows up as:
Bus 003 Device 015: ID 3434:01a1 Keychron Keychron Q10

The one-liner to create the rule, reload and trigger:
export USER_GID=`id -g`; sudo --preserve-env=USER_GID sh -c 'echo "KERNEL==\"hidraw*\", SUBSYSTEM==\"hidraw\", ATTRS{serial}==\"*vial:f64c2b3c*\", MODE=\"0660\", GROUP=\"$USER_GID\", TAG+=\"uaccess\", TAG+=\"udev-acl\"" > /etc/udev/rules.d/59-vial.rules && udevadm control --reload && udevadm trigger'
This creates /etc/udev/rules.d/59-vial.rules, reloads the rules and applies them. Then unplug and replug your keyboard. Vial should recognize it right away.
If you prefer a model-specific rule, add the IDs:
export USER_GID=`id -g`; sudo --preserve-env=USER_GID sh -c 'echo "KERNEL==\"hidraw*\", SUBSYSTEM==\"hidraw\", ATTRS{serial}==\"*vial:f64c2b3c*\", ATTRS{idVendor}==\"3434\", ATTRS{idProduct}==\"01a1\", MODE=\"0660\", GROUP=\"$USER_GID\", TAG+=\"uaccess\", TAG+=\"udev-acl\"" > /etc/udev/rules.d/59-vial.rules && udevadm control --reload && udevadm trigger'
The universal rule is simpler and covers any future Vial keyboards.
Source: Vial - Configuring udev on Linux