调整远程控制(内核 LIRC)

调整远程控制(内核 LIRC)

我最近使用 Mythbuntu 12.04 重建了我的 MythTV 盒子,以利用较新的硬件(Ivy Bridge)。

在我之前的版本中,我曾经lirc管理过遥控器,即按键代码->应用程序键的映射;学习这一切是一段漫长的旅程,最终我对它的工作方式感到相当满意。

我拥有的:

现在的情况
当我插入它时,它就开始工作了。 这很好,但 Ubuntu 本身就使用它,并且阻止一些按钮按下次数无法到达 Myth。例如,我可以从遥控器发送一个按钮,相当于Ctrl-Alt-A(我认为 Ubuntu 对此不感兴趣),然后将其捕获在 Mythfrontend 中,但遥控器的Play按钮被 Ubuntu 捕获(它会显示一个带有一条线的大圆圈,因为没有加载媒体播放器)。
我明白这是因为 lirc 现在已经合并到内核中,我喜欢这一点。

我目前所做的:

使用以下方式找到设备lsusb

$ lsusb  
Bus 001 Device 004: ID 073a:2230 Chaplet Systems, Inc. infrared dongle for remote

找到事件设备编号:

$ cat /proc/bus/input/devices  
I: Bus=0003 Vendor=073a Product=2230 Version=0110
N: Name="HID 073a:2230"
P: Phys=usb-0000:00:1a.0-1.2/input0
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input5
U: Uniq=
H: Handlers=sysrq kbd mouse1 event5 js0 
B: PROP=0
B: EV=10001f
B: KEY=4c37fff072ff32d bf54445600000000 ffffffffff 30c100b17c007 ffa67bfad951dfff febeffdfffefffff fffffffffffffffe
B: REL=343
B: ABS=100030000
B: MSC=10

测试输入evtest(我按下了Play):

$ sudo evtest /dev/input/event5  
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x73a product 0x2230 version 0x110
Input device name: "HID 073a:2230"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 1 (KEY_ESC)
    Event code 2 (KEY_1)
    Event code 3 (KEY_2)
    Event code 4 (KEY_3)
    Event code 5 (KEY_4)
    Event code 6 (KEY_5)
    Event code 7 (KEY_6)
<------------snipped lots of 'Event code' lines------------>
Testing ... (interrupt to exit)
Event: time 1336435683.230656, -------------- SYN_REPORT ------------
Event: time 1336435683.246648, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00cd
Event: time 1336435683.246652, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1336435683.246655, -------------- SYN_REPORT ------------

showkey再次测试Play密钥:

$ sudo showkey -s
kb mode was RAW
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
0xe0 0x22 0xe0 0xa2 

我想要的是:

  • 如果上述方法不正确,我想要一种方法来扫描传入的按钮按下操作。
  • 我希望将每个按钮按下重新映射到 Ubuntu/Unity 将忽略的内容,或者更好地将按键直接传递给 Myth(我怀疑这以后只能通过 lirc 实现,但我可能是错的)。
  • 我会真的喜欢使用内核驱动程序来做到这一点,即无需明确加载 lirc;如果世界就是这样发展的,我宁愿找到一种方法来将当前行为映射到我想要的行为,而不是强制使用在内核之外加载 lirc 的“旧”安排。学习新东西也是值得的!

我猜:
我认为这需要使用setkeycodes,但是在查找足够的信息来进行配置时遇到了困难。

非常感谢您的帮助!

答案1

遥控器按钮由 gnome-settings-daemon 插件使用media-keys。要禁用它并允许 MythTV 接收事件,请执行以下操作:

$ gsettings set org.gnome.settings-daemon.plugins.media-keys active false

您还需要禁用/卸载 xfce4-volumed 以防止其捕获XF86AudioLowerVolume和。XF86AudioRaiseVolumeXF86AudioMute

您可能还想重新映射一些窗口管理器键(例如,在我的情况下,Ctrl+Alt+D 用于启动直播电视,而 xfwm4 使用它来执行 show_desktop 操作)。这可以在“设置 > 窗口管理器”、“键盘”选项卡中完成。

此外,您还可以启用“鼠标”控件来使用以下方式发送键盘事件mythtv-mouse2kbd.py我描述的脚本我的博客文章

答案2

我刚刚经历了类似的发现新内核 lirc 的过程,对我来说,那一刻我恍然大悟,意识到红外遥控器现在只是另一个键盘而已。

作为 showkey/evtest 的替代方案,你可以运行sudo ir-keytable-t检测远程按钮按下。不过我认为它没有提供太多新信息。

要调整远程扫描码到按键的映射,您需要基于 /lib/udev/rc_keymaps/ 中的配置文件创建您自己的配置文件。

使用 evtest 输出,您可以使用KEY_X价值字段可帮助识别正在使用哪个 rc_keymaps 文件。复制匹配的文件并编辑以根据需要重新映射按键。您可以使用以下方式加载修改后的配置sudo ir-keytable-c-w 新文件. 现在您可以使用 evtest 测试您的新配置。

如果无法通过修改键盘映射获得足够的灵活性,您仍然可以使用用户空间 lirc 守护进程。您可以配置 lircd 以从内核驱动程序中提取,然后正常配置 lircd。

这两个链接,http://forum.xbmc.org/showthread.php?tid=104541http://ubuntuforums.org/showthread.php?t=1754719,有很多关于如何配置和调试设置的信息。

相关内容