我有一个与无线手持遥控器 (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 服务器(不是桌面)的。正在捕获关键事件以用于家庭自动化目的。
答案1
解决方案的线索(对于基于 systemd 的 linux 主机)来自人登录.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 已经收到原始标签的警报,并且不支持删除该标签。
答案2
我试图解决的问题是防止遥控器上的电源按钮关闭系统
首先要做的是找出如何这在 Linux 中有效,以及 Linux 系统的哪一部分监听“电源按钮”事件(实际上我很惊讶其中一部分会监听)。描述符可能涉及也可能不涉及其中。
我尝试的第一件事是识别输入设备(查看 中的符号链接/dev/input/by-*
,它们映射到具体的/dev/input/eventX
。您可以使用evtest
它来查看其中哪一个产生其他按键。然后evtest --grab
对其执行 a 操作,如果电源按钮停止工作,它会被稍后的某个阶段处理(例如您的桌面环境,所以看看您使用的是哪一个,如果您可以配置它)如果它仍然有效,则它处于较早的阶段(内核模块,因此您需要启动)。查看内核)。
答案3
如果遥控器上的电源按钮仅在您登录时关闭系统,那么它可能是由您的桌面环境处理的。
Debian 的默认桌面环境是 GNOME,它通过gsd-media-keys
GNOME 设置守护进程的插件来处理这些事情。我自己更喜欢 KDE,所以我手头没有可以用来测试这个的 GNOME 系统。但通过谷歌搜索,我发现配置此类内容的旧方法在现代版本的 GNOME 中不再有效:-(
如果遥控器的电源按钮在无人登录时也导致关机,则可能是由 处理的logind
。在这种情况下,解决方案可能很简单。
在 中/etc/systemd/logind.conf
,有许多注释掉的行用于确定如何处理某些特殊键和开关。
默认情况下,所有这些行都被注释掉,并使logind
按键和开关执行它们通常应该执行的操作,例如键盘上的“电源”键将触发受控关闭。由于遥控器的电源按钮可能冒充 USB 键盘上的“电源”键,因此这正是您想要禁用的功能!
你会发现像这样的注释掉的行/etc/systemd/logind.conf
:
#HandlePowerKey=poweroff
您需要编辑该文件以取消注释该行,并将其更改为:
HandlePowerKey=ignore
老实说,我不确定对logind
配置的更改是否会立即生效,还是只有在重新启动后才能生效。手册页似乎没有提到这个事实,并且似乎没有记录的方式来表明logind
它应该重新加载其配置。