LIRC - 如何用作键盘命令?

时间:2013-10-23 08:36:58

标签: lirc

我对Debian中的LIRC有疑问。我现在搜索了几天,找不到解决问题的方法。

是否可以使用IR-Remote发送键盘手机?

我会解释: 我在shell脚本中使用“read”函数。所以即我按下“T”键就会发生一些事情。现在我想通过LIRC发送相同的“T”,以便shell脚本也可以使用遥控器。

另一种方式是,不是在shell脚本中,而是在我的C程序源中。 在这里我使用这样的代码:

case 't': {

所以如果按下键盘上的按钮“t”就会发生一些事情。

我希望有人可以帮助我使用LIRC,因为我无法理解LIRC网页上的描述。每个例子都基于他们已经支持lirc命令的程序。

非常感谢你 关心托马斯

2 个答案:

答案 0 :(得分:1)

假设你知道如何使用lircd,irexec并通过/etc/lircd.conf和/ etc / lircrc配置它,你可以在/ etc / lircrc中使用这样的东西:

begin
        remote = name-of-your-remote
        prog   = irexec
        button = BTN_1
        config = echo T >/dev/xxx
end

应在/etc/lircd.conf中配置BTN_1以匹配远程红外键盘上的“T”键。

xxx是您的活动shell使用的TTY设备,例如我用/ dev / pts / 0

尝试过

如果您需要从自定义程序的stdin访问它,可以使用以下配置:

begin
        remote = name-of-your-remote
        prog   = irexec
        button = BTN_1
        config = echo T | your-prog
end

答案 1 :(得分:0)

我发现lircd-uinput.service用于将键盘事件发送到/ dev / uinput,基本上是发送到控制台。如果要使用遥控器将键盘键发送到控制台上运行的自定义菜单或程序,这是一项便捷的服务。服务的问题在于,它会不断重复密钥,直到收到发布代码为止。

我认为“重复”行为是设计使然,因为大多数编写良好的应用程序可能在按下某个键时发送诸如KEY_DOWN之类的消息,然后在释放键时发送诸如KEY_UP之类的消息。但是我的简单应用程序不够智能,无法发送释放代码,因此我找到了解决按键重复问题的简便方法,并且可以使用该服务通过IR遥控器伪造键盘。

要使lircd-uinput.service自动注册密钥释放事件,并停止重复密钥,请编辑服务并添加--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命令,那可能比此解决方案更好。

要找出与键盘按键相对应的键盘命令,您可以通过运行以下命令列出内核支持的所有可能的键盘事件:

irrecord -l <​​/ p>

例如,如果您希望遥控器按控制台上的向下箭头键,则相应的遥控器键为“ 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用于其他与键盘无关的命令。