我有一个非常简单的带背光的通用游戏键盘。通常,接合背光的通用方法是使用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;\""
如果这没有帮助,您可能需要进一步调查,或许还需要指定规则的属性bInterfaceClass
。bInterfaceSubClass
编辑:
我关于硬件的另一个理论是,udev
当键盘尚未准备好接受 LED 命令时,规则执行得太早。尝试"/bin/bash -c \"sleep 5;DISPLAY=:1 xset led 3;\""
并报告发生的情况。另外,还有一些备注
我希望你确定你的
DISPLAY
确实是:1
,不是:0
。请注意我如何将
DISPLAY
变量附加到xset
命令中。DISPLAY=:1
本身设置DISPLAY
变量为bash
,而不是为xset
。您可能还想添加
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