Linux 下配置udev來實現chrome對於蜻蜓R1滑鼠的訪問

写python的叮叮叮發表於2024-06-29

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

之後我們就可以每次重啟都能正常訪問到滑鼠了。
螢幕截圖_20240629_034741

相關文章