从设备名称查找设备的 /dev/input/event* 路径

从设备名称查找设备的 /dev/input/event* 路径

我需要在我的 /dev/input/event* 设备列表中找到一个游戏手柄,我唯一知道的是,当我这样做时,evtest它会显示名称G13。问题是每次我重新启动时它都会得到不同的数字。我想自动查找路径,以便可以将其传递给变量中的此命令$G13:我尝试过evtest | grep G13,但问题是 evtest 命令不会自行终止,它是交互式的,因此我的脚本卡在提示符上。

xboxdrv --evdev $G13 --config ~/.config/xboxdrv/G13.conf &

答案1

您想要设置一个乌德夫规则为您的设备提供持久的符号链接。首先为udevadm info -a /dev/input/eventXX当前代表您的游戏手柄的任何设备运行。

你会看到类似的输出:

    ATTR{power/runtime_suspended_time}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/input/input29':
    KERNELS=="input29"
    SUBSYSTEMS=="input"
    DRIVERS==""
    ...
    ATTRS{id/product}=="c21d"
    ATTRS{id/vendor}=="046d"
    ...

创建一个包含以下内容的文件/etc/udev/rules.d/90-gamepad.rules

SUBSYSTEMS=="input", ATTRS{id/product}=="c21d", ATTRS{id/vendor}=="046d", SYMLINK += "gamepad"

...将产品和供应商的值替换为您在输出中看到的值。

保存文件并运行:

udevadm control -R

拔下游戏手柄并将其重新插入,您应该看到现在有一​​个/dev/gamepad指向相应 /dev/input/...设备的符号链接。

现在您可以使用设备路径/dev/gamepad而不是变化的 /dev/input路径。

答案2

我遇到了类似的问题,将我的解决方案分享给其他人:

在 Ubuntu 22.04 上,安装xboxdrv

检查我的情况下的 udev 属性事件5(迭代所有事件以找到正确的事件):

$ udevadm info -a /dev/input/event5

looking at device '/devices/virtual/input/input5/event5':
KERNEL=="event5"
SUBSYSTEM=="input"
DRIVER==""
ATTR{power/control}=="auto"
ATTR{power/runtime_active_time}=="0"
ATTR{power/runtime_status}=="unsupported"
ATTR{power/runtime_suspended_time}=="0"

looking at parent device '/devices/virtual/input/input5':
KERNELS=="input5"
SUBSYSTEMS=="input"
DRIVERS==""
ATTRS{capabilities/abs}=="3061b"
ATTRS{capabilities/ev}=="b"
ATTRS{capabilities/ff}=="0"
ATTRS{capabilities/key}=="7cdb000000000000 0 0 0 0"
ATTRS{capabilities/led}=="0"
ATTRS{capabilities/msc}=="0"
ATTRS{capabilities/rel}=="0"
ATTRS{capabilities/snd}=="0"
ATTRS{capabilities/sw}=="0"
ATTRS{id/bustype}=="0000"
ATTRS{id/product}=="0000"
ATTRS{id/vendor}=="0000"
ATTRS{id/version}=="0000"
ATTRS{inhibited}=="0"
ATTRS{name}=="Xbox Gamepad (userspace driver)"
ATTRS{phys}==""
ATTRS{power/control}=="auto"
ATTRS{power/runtime_active_time}=="0"
ATTRS{power/runtime_status}=="unsupported"
ATTRS{power/runtime_suspended_time}=="0"
ATTRS{properties}=="0"
ATTRS{uniq}==""

将以下内容放入 /etc/udev/rules.d 中,使用名称进行过滤:

SUBSYSTEMS=="input" ATTRS{name}=="Xbox Gamepad (userspace driver)" MODE="0666" SYMLINK+="/input/xbox-controller"

重新加载 udev 规则

sudo udevadm control --reload-rules && sudo udevadm trigger

检查符号链接是否确实指向 event5 而不是 js0:

$ ll /dev/input/xbox-controller 
lrwxrwxrwx 1 root root 6 dec 29 15:11 /dev/input/xbox-controller -> event5

就我而言,我需要在 Docker 中使用该设备,并且使用直接符号链接不起作用。所以我解决了符号链接使用“阅读链接”在我使用它之前:

docker run --device=$(readlink -f /dev/input/xbox-controller)

因此,在您的情况下,您可能可以将 $G13 变量替换为

$(readlink -f /dev/input/xbox-controller)

相关内容