![Ubuntu 14.04 - 多个 Griffin 技术 Powermate 旋钮](https://linux22.com/image/68339/Ubuntu%2014.04%20-%20%E5%A4%9A%E4%B8%AA%20Griffin%20%E6%8A%80%E6%9C%AF%20Powermate%20%E6%97%8B%E9%92%AE.png)
我正在运行 Ubuntu 14.04,并且我想运行多个 Griffin powermate 旋钮:https://store.griffintechnology.com/powermate。我想将它们映射到音频控制以外的不同键。我想用其中四个(也许更多)来控制机器人关节位置。我们将使用 ROS 捕获命令并将其转发给机器人。
我使用这些命令的修改版本启动并运行了第一个:https://askubuntu.com/questions/138148/need-help-with-griffin-powermate-usb-volume-controller-new-64-bit-desktop-ub
但我不能使用多个控制器。我尝试修改 udev 规则以考虑 KERNEL=xx 值,因为这是旋钮之间唯一变化的值,然后将 .evrouterrc 文件更改为 /dev/input/event* 而不是“Griffin Technology Powermate”,但这确实不允许同时使用它们。
我还尝试添加两个用户(powermate、powermate2)并复制两个控制器(evrouterrc、evrouterrc2)的步骤,但 evrouter 不允许运行实例。
我很困惑现在要采取什么步骤。是否可以使用 udev 规则和 evrouter 来考虑相同设备的多个实例并为其分配不同的功能?或者我需要寻找不同的方法?或者你知道我们可以使用任何兼容 Linux 的全旋转旋钮吗?
答案1
您可以通过扫描报告的事件来编写每个 USB 设备的控制脚本。
只需为每个设备构建一个脚本并在后台运行即可。您还可以使用您选择的编程语言轮询事件流。如何处理输入流的想法在链接的文章中。
如果您需要通过插入的端口来指定设备,请尝试使用 /dev/by-path 或 /dev/by-id,如果您想使其可配置,您可以迭代所有输入和 cat出名字: cat /proc/bus/input/devices
我正在为后代复制和粘贴:
#!/bin/bash
device='/dev/input/by-id/usb-Targus_Laser_Presentation_Remote-if02-event-kbd'
event_blank='*code 48 (KEY_B), value 1*'
event_esc='*code 1 (KEY_ESC), value 1*'
event_f5='*code 63 (KEY_F5), value 1*'
event_prev='*code 104 (KEY_PAGEUP), value 1*'
event_next='*code 109 (KEY_PAGEDOWN), value 1*'
evtest "$device" | while read line; do
case $line in
($event_blank) echo "BLANK SCREEN" ;;
($event_f5) echo "F5" ;;
($event_esc) echo "ESCAPE" ;;
($event_prev) echo "PREVIOUS" ;;
($event_next) echo "NEXT" ;;
esac
done
使用evtest
我能够找到/dev/input/event18
设备的事件编号,但该编号可能会有所不同,具体取决于系统上的设备以及它们的连接顺序
因此我曾经udevadm info /dev/input/event18
找出设备的唯一 ID
S: input/by-id/usb-Targus_Laser_Presentation_Remote-if02-event-kbd
最后,evtest
再次使用,我能够捕获来自设备的所有事件并在case
语句中使用它们。