udev规则打开键盘背光

udev规则打开键盘背光

我有一个非常简单的带背光的通用游戏键盘。通常,接合背光的通用方法是使用xset led 3。我可以确认这确实有效。然而,因为我有两台计算机,我可以通过外围设备开关来回切换,这会产生问题,因为当我从一种环境切换到另一种环境时,我需要拔掉 USB 插头,然后再重新插入。

/etc/udev/rules.d/keyboard.rules用以下规则编写了一个文件:

ATTRS{idVendor}=="258a", ATTRS{idProduct}=="0001", RUN+="/bin/bash -c \"DISPLAY=:1;xset led 3;\""

如果我/bin/bash -c \"DISPLAY=:1;xset led 3;\"单独运行它工作得很好,但是,它似乎并不只是一个规则。它只是有时会打开,当它打开时,它会闪烁,然后立即关闭。我已经检查了多次,我知道我的 idVender 和 idProduct 是正确的:

Bus 003 Device 079: ID 258a:0001

我还能错过什么?

答案1

我认为问题在于您的规则被多次触发(您可以通过 验证是否属于这种情况udevadm monitor)。每个xset命令都会翻转 LED 的状态,导致它们短暂闪烁并再次熄灭。您应该使您的规则更加具体,例如:

ACTION=="add", ENV{DEVTYPE}=="usb_interface", ATTRS{idVendor}=="258a", ATTRS{idProduct}=="0001", RUN+="/bin/bash -c \"DISPLAY=:1 xset led 3;\""

如果这没有帮助,您可能需要进一步调查,或许还需要指定规则的属性bInterfaceClassbInterfaceSubClass

编辑:

我关于硬件的另一个理论是,udev当键盘尚未准备好接受 LED 命令时,规则执行得太早。尝试"/bin/bash -c \"sleep 5;DISPLAY=:1 xset led 3;\""并报告发生的情况。另外,还有一些备注

  1. 我希望你确定你的DISPLAY确实是:1,不是:0

  2. 请注意我如何将DISPLAY变量附加到xset命令中。DISPLAY=:1本身设置DISPLAY变量为bash,而不是为xset

  3. 您可能还想添加XAUTHORITY="/home/<user>/.Xauthority"到其中。

答案2

/etc/udev/rules.d/keyboardled.rules

ACTION==“add”,ATTRS{idVendor}==“1c4f”,ATTRS{idProduct}==“0002”,RUN+="/bin/sh -c 'DISPLAY=:0.0 XAUTHORITY=/home/nill/.Xauthority sh -c "xset led 3" &'"

它正在工作......=D

相关内容