我发现 lircd-uinput.service 用于将键盘事件发送到 /dev/uinput,基本上是控制台。如果您想使用遥控器将键盘按键发送到自定义菜单或控制台上运行的程序,这是一项方便的服务。该服务的问题在于它会不断重复密钥,直到收到发布代码。
“重复”行为是设计使然,我猜是因为大多数编写良好的应用程序可能会在按下某个键时发送 KEY_DOWN 之类的东西,然后在释放它时发送 KEY_UP 之类的东西。但是我的简单应用程序不够智能,无法发送发布代码,所以我找到了一个简单的解决按键重复问题的方法,并且可以使用该服务使用 IR 遥控器来伪造键盘。
要使 lircd-uinput.service 自动注册 key-release 事件,并停止重复 key,编辑服务并添加 --add-release-events 选项。
sudo nano /lib/systemd/system/lircd-uinput.service
####find this line####
ExecStart=/usr/sbin/lircd-uinput
####change to#########
ExecStart=/usr/sbin/lircd-uinput --add-release-events
重新启动服务并确保它们处于活动状态。
sudo systemctl force-reload lircd
sudo systemctl force-reload lircd-uinput
sudo systemctl status lircd
sudo systemctl status lircd-uinput
#I had to start lircd-uinput, since force-reload didn't:
sudo systemctl start lircd-uinput
现在服务只输入一个按键,每次按下远程按钮,并自动发送 KEY_UP 命令。如果您知道如何在应用程序中发送 KEY_UP 命令,那可能比这个解决方案效果更好。
要找出与键盘键对应的键命令,您可以通过运行列出内核支持的所有可能的键盘事件:
不记录 -l
例如,如果您希望遥控器按控制台上的向下箭头键,则对应的遥控器键为“KEY_DOWN”。然后您的远程文件 (/etc/lirc/lircd.conf.d/myremote.conf) 将包含该密钥名称。
begin remote
name myremote
#<sniped...remote stuff here...>
begin codes
# <sniped other codes>
KEY_DOWN 0x00FF
# <sniped other codes>
end codes
end remote
现在我们已经停止重复键,这是一项非常有用的服务。它比使用 irexec 向控制台伪造键盘键响应更快,并且您不需要 irexec.lircrc 中的任何配置即可将击键发送到控制台。您仍然可以将 irexec 用于其他与键盘无关的命令。