Linux 下配置udev来实现chrome对于蜻蜓R1鼠标的访问
Linux 下配置udev来实现chrome对于蜻蜓R1鼠标的访问
前言
最近买了一个蜻蜓R1的鼠标,用于我的Manjaro Linux笔记本。鼠标本身不错,但是其提供的鼠标控制台只有官方windows版本的。不过官方也考虑到Linux用户的需求,有一个ATK HUB WEB供非windows系统的用户在Chrome或者chromium浏览器中使用。
不过当我尝试使用它的时候,发现实际上并不能正常使用。于是就开始探寻如何能让它正常工作。
udev规则的设置
首先,打开chrome的控制台之后会发现一个无法打开设备的报错。于是我先搜了一下关于chrome如何访问USB的资料,得到了Google官方的帮助文档,文档里提到若想在 Linux 系统上访问已连接的设备,需要先正确配置 udev 规则
。那看来就是udev规则设置的问题了。下面我们就开始设置udev规则。
首先在终端中执行lsusb
命令打印出目前所有的usb设备
~ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 3554:f58e Compx VXE Mouse 1K Dongle
Bus 001 Device 003: ID 04f2:b6cb Chicony Electronics Co., Ltd Integrated Camera
很明显Compx VXE Mouse 1K Dongle
这个设备就是我们鼠标的usb无线接收器了,其中3554
为VID,f58e
为PID。
接下来我们在新建一条udev规则/etc/udev/rules.d/99-usb.rules
,并且写入如下内容
SUBSYSTEM=="usb", ATTRS{idVendor}=="3554", ATTRS{idProduct}=="f58e", MODE="0666", GROUP="plugdev"
保存之后,执行下面两条命令来让规则生效
sudo udevadm control --reload-rules
sudo udevadm trigger
接下来新建一个plugdev
的组并且将我们当前的用户加入组中。
sudo groupadd plugdev
sudo usermod -aG plugdev $USER
之后重启系统,再次尝试使用ATK HUB WEB
,结果还是不行,看来还有别的原因。
修改USB/HID设备权限
经过一番查找之后,我了解chrome会将访问usb设备的日志打印在chrome://device-log/
中,于是我在chrome中打开这个地址,里面写明了错误的原因。
20:08:55] Failed to open '/dev/hidraw1': FILE_ERROR_ACCESS_DENIED
HIDEvent[20:08:55] Access denied opening device read-write, trying read-only.
这里的日志清晰的告诉我们chrome访问的/dev/hidraw1
是没有写入权限的,所以导致无法操作设备。
这里我们执行命令为设备添加写入权限。
sudo chmod a+rw /dev/hidraw1
之后重启之后,确实可以成功的使用了。
等我高兴的设置完鼠标之后,因为其他任务我重启了一下,之后发现居然又失效了,必须重新运行一遍sudo chmod a+rw /dev/hidraw1
才能使用。我想每次启动执行一遍这个命令也不是不可以,但是一个是设备名可能会变成/dev/hidraw2
之类的,如果直接sudo chmod a+rw /dev/hidraw*
虽然也可以但是总不太优雅和安全。看来还有别的办法。
问题的本质
经过一番查询之后我才发现,原来是我第一步里面的配置有误,网站并不是通过USB访问鼠标,而是通过HID来访问鼠标的,所以我们之前在chrome://device-log/
中才看到日志里面是对于HID的访问报错。所以我们只需要修改一下之前的udev规则就可以每次都正常访问到鼠标。
修改/etc/udev/rules.d/99-usb.rules
为如下:
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="3554", ATTRS{idProduct}=="f58e", MODE="0666", GROUP="plugdev"
之后执行命令让规则生效即可
sudo udevadm control --reload-rules
sudo udevadm trigger
之后我们就可以每次重启都能正常访问到鼠标了。