Ubuntu 14.04 - 多个 Griffin 技术 Powermate 旋钮

Ubuntu 14.04 - 多个 Griffin 技术 Powermate 旋钮

我正在运行 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 设备的控制脚本。

如何在输入设备事件上运行 shell 脚本

只需为每个设备构建一个脚本并在后台运行即可。您还可以使用您选择的编程语言轮询事件流。如何处理输入流的想法在链接的文章中。

如果您需要通过插入的端口来指定设备,请尝试使用 /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语句中使用它们。

相关内容