
私の/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ではエクスボックスドラブの設置
私の場合は、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
シンボリックリンクが実際にjs0ではなくevent5を指していることを確認してください。
$ 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)