Linux
是否可以阻止 USB 設備中的功能?
我有一個與無線手持遙控器(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 已經被警告到原始標籤,並且不支持刪除標籤。