Linux

是否可以阻止 USB 設備中的功能?

  • December 19, 2021

我有一個與無線手持遙控器(Dupad G20S Pro Plus)通信的 USB 設備。它在我的 debian 盒子上執行良好。我要解決的問題是防止遙控器上的電源按鈕關閉系統(我猜遙控器更適合智能電視)。

我至少通過 lsusb 弄清楚了有問題的設備功能是:

% lsusb -vd 4842:0001
...
   Interface Descriptor:
     bLength                 9
     bDescriptorType         4
     bInterfaceNumber        2
     bAlternateSetting       0
     bNumEndpoints           2
     bInterfaceClass         3 Human Interface Device
     bInterfaceSubClass      0
     bInterfaceProtocol      1 Keyboard
     iInterface              0
       HID Device Descriptor:
         bLength                 9
         bDescriptorType        33
         bcdHID               2.01
         bCountryCode            0 Not supported
         bNumDescriptors         1
         bDescriptorType        34 Report
         wDescriptorLength     121
         Report Descriptor: (length is 121)
...
           Item(Local ): Usage, data= [ 0x81 ] 129
                           System Power Down
...

有沒有辦法在某些核心級別阻止此功能?我確實發現我通常可以使用 systemd-inhibit 阻止關機,但我喜歡使用較低級別的東西(比如 udev)。

更新

這適用於 debian 伺服器(不是桌面)。正在為家庭自動化目的擷取關鍵事件。

解決方案的線索(對於基於 systemd 的 linux 主機)來自man logind.conf(8)

只有帶有“power-switch” udev 標籤的輸入設備才會被監視按鍵/蓋子開關事件。

事實上,這個標籤是由預設的 udev 規則添加的:

SUBSYSTEM=="input", KERNEL=="event*", ENV{ID_INPUT_KEY}=="1", TAG+="power-switch"

我能夠通過在該文件 (/etc/udev/rules.d/70-power-switch.rules) 中註釋掉規則來阻止該操作。

附加資訊:

我最初的修復嘗試是在新文件中刪除帶有這個新規則的標籤/etc/udev/rules.d/80-power-switch.rules(在 之後處理70-power-switch.rules):

SUBSYSTEM=="input", KERNEL=="event*", TAG-="power-switch"

即使我的 systemd 版本支持標籤刪除 (249),我也無法讓它工作。我最好的猜測是 systemd 已經被警告到原始標籤,並且不支持刪除標籤。

引用自:https://unix.stackexchange.com/questions/683029