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
之後我們就可以每次重啟都能正常訪問到滑鼠了。