我最近使用 Mythbuntu 12.04 重建了我的 MythTV 盒子,以利用较新的硬件(Ivy Bridge)。
在我之前的版本中,我曾经lirc
管理过遥控器,即按键代码->应用程序键的映射;学习这一切是一段漫长的旅程,最终我对它的工作方式感到相当满意。
我拥有的:
- 我有一个便宜的Chinavasion 遥控器和 USB 加密狗,我找到了几篇文章,主要围绕与 XBMC 合作(很有趣,但我不认为直接适用)以及让 Harmony 遥控器工作(这是 Chinavasion CVSB-983 - 非常有用,因为我需要它来使我的 Harmony 900 工作)。
- Mythbuntu 12.04 64 位
- MythTV 0.25(可能不相关)
现在的情况
当我插入它时,它就开始工作了。 这很好,但 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
和。XF86AudioRaiseVolume
XF86AudioMute
您可能还想重新映射一些窗口管理器键(例如,在我的情况下,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=104541和 http://ubuntuforums.org/showthread.php?t=1754719,有很多关于如何配置和调试设置的信息。