장치 이름에서 장치의 /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

비슷한 문제가 발생하여 내 솔루션을 다른 사람들과 공유하고 싶습니다.

우분투 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)

관련 정보