Razer 키보드: X에서 키보드를 마우스로 사용

Razer 키보드: X에서 키보드를 마우스로 사용

OP가 완전히 재편집되었습니다.

내 거Razer Cynosa Tarantula Chroma 에디션3개의 인터페이스(1)를 제공하는 물리적 장치(기본적으로 PC_105 키보드 이하)입니다. 하나는 일부 스캔 코드를 동시에 전송하기 위한 것이고 다른 하나는 키를 눌렀을 때 내부적으로 트랜스코딩된 일부 마우스 보고서를 전송하기 위한 것입니다.

X에서 후자를 마우스로 사용하는 방법을 찾고 있습니다.


3개의 인터페이스는 모두 부팅 시 올바르게 열거되고 적절한 HID 일반 커널 내장 드라이버에 바인딩됩니다(2)

그런 다음 바운스레젝버드패턴 감지 중 드라이버(3)

이들 각각은 나중에 입력 이벤트와 연결되고 X11 서버(xorg-server-21.1.4)에 의해 등록됩니다.

  • 이러한 장치의 경우 일반적인 방법은 키보드 유형의 첫 번째 인터페이스(장치 ID 9)와 마우스 유형의 세 번째 인터페이스(장치 ID 11)에 관한 것입니다(4).
  • 두 번째 키보드 유형(장치 ID 10)의 경우 이상하고 적어도 불분명한 방식이었습니다. (5) (마우스로 구성/키보드 순서로 구성 참조)

이 모든 것이 보고를 혼란스럽게 만듭니다.

$ xinput --list --short
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ MOSART Semi. 2.4G Wireless Mouse          id=8    [slave  pointer  (2)]
⎜   ↳ Razer Razer Cynosa Chroma                 id=10   [slave  pointer  (2)]
⎜   ↳ Razer Razer Cynosa Chroma                 id=11   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ Razer Razer Cynosa Chroma                 id=9    [slave  keyboard (3)]

(디바이스 ID 10번은 슬레이브 포인터로만 보고되며 원래는 키보드 종류로 등록되어 있었습니다.)

cat /dev/input/event5아무 키나 누르면 마우스와 같은 트래픽이 인쇄되고 event5는 장치 ID 10에 연결되므로 키보드 xinput --test-xi2 10이벤트 유형 13만 기록됩니다(원래 키) 및 14(원래 키 릴리스)

evdev가 혼란스러울까요?


1: lsusb -vs 008:002보고:

$ lsusb -vs 008:002 
Bus 008 Device 002: ID 1532:022a Razer USA, Ltd Cynosa Chroma
Device Descriptor:
  Configuration Descriptor:
    bNumInterfaces          3
    Interface Descriptor:
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
    Interface Descriptor:
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      1 Keyboard
    Interface Descriptor:
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      2 Mouse

2: Bootlog는 USB 장치를 열거합니다.

[kernel] input: Razer Razer Cynosa Chroma as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/0003:1532:022A.0002/input/input4
[kernel] hid-generic 0003:1532:022A.0002: input: USB HID v1.11 Keyboard [Razer Razer Cynosa Chroma] on usb-0000:00:1d.2-2/input0
[kernel] input: Razer Razer Cynosa Chroma Keyboard as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.1/0003:1532:022A.0003/input/input5
[kernel] input: Razer Razer Cynosa Chroma Consumer Control as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.1/0003:1532:022A.0003/input/input6
[kernel] hid-generic 0003:1532:022A.0003: input: USB HID v1.11 Keyboard [Razer Razer Cynosa Chroma] on usb-0000:00:1d.2-2/input1
[kernel] input: Razer Razer Cynosa Chroma as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.2/0003:1532:022A.0004/input/input9
[kernel] hid-generic 0003:1532:022A.0004: input: USB HID v1.11 Mouse [Razer Razer Cynosa Chroma] on usb-0000:00:1d.2-2/input2

3: modprobe 시 Razer 인터페이스 리바인딩

[kernel] input: Razer Razer Cynosa Chroma as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/0003:1532:022A.0002/input/input10
[kernel] razerkbd 0003:1532:022A.0002: input: USB HID v1.11 Keyboard [Razer Razer Cynosa Chroma] on usb-0000:00:1d.2-2/input0
[kernel] input: Razer Razer Cynosa Chroma as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.1/0003:1532:022A.0003/input/input11
[kernel] razerkbd 0003:1532:022A.0003: input: USB HID v1.11 Keyboard [Razer Razer Cynosa Chroma] on usb-0000:00:1d.2-2/input1
[kernel] input: Razer Razer Cynosa Chroma as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.2/0003:1532:022A.0004/input/input12
[kernel] razerkbd 0003:1532:022A.0004: input: USB HID v1.11 Mouse [Razer Razer Cynosa Chroma] on usb-0000:00:1d.2-2/input2

4: 첫 번째 키보드 인터페이스와 마우스 인터페이스의 XCONFIG-ing

config/udev: Adding input device Razer Razer Cynosa Chroma (/dev/input/event4)
Razer Razer Cynosa Chroma: Applying InputClass "evdev keyboard catchall"
Razer Razer Cynosa Chroma: Applying InputClass "system-keyboard"
Using input driver 'evdev' for 'Razer Razer Cynosa Chroma'
systemd-logind: got fd for /dev/input/event4 13:68 fd 39 paused 0
Razer Razer Cynosa Chroma: always reports core events
evdev: Razer Razer Cynosa Chroma: Device: "/dev/input/event4"
evdev: Razer Razer Cynosa Chroma: Vendor 0x1532 Product 0x22a
evdev: Razer Razer Cynosa Chroma: Found keys
evdev: Razer Razer Cynosa Chroma: Configuring as keyboard
Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/0003:1532:022A.0002/input/input10/event4"
Adding extended input device "Razer Razer Cynosa Chroma" (type: KEYBOARD, id 9)
Option "xkb_rules" "evdev"

config/udev: Adding input device Razer Razer Cynosa Chroma (/dev/input/event6)
Razer Razer Cynosa Chroma: Applying InputClass "evdev pointer catchall"
Using input driver 'evdev' for 'Razer Razer Cynosa Chroma'
systemd-logind: got fd for /dev/input/event6 13:70 fd 41 paused 0
Razer Razer Cynosa Chroma: always reports core events
evdev: Razer Razer Cynosa Chroma: Device: "/dev/input/event6"
evdev: Razer Razer Cynosa Chroma: Vendor 0x1532 Product 0x22a
evdev: Razer Razer Cynosa Chroma: Found 9 mouse buttons
evdev: Razer Razer Cynosa Chroma: Found scroll wheel(s)
evdev: Razer Razer Cynosa Chroma: Found relative axes
evdev: Razer Razer Cynosa Chroma: Found x and y relative axes
evdev: Razer Razer Cynosa Chroma: Configuring as mouse
evdev: Razer Razer Cynosa Chroma: Adding scrollwheel support
evdev: Razer Razer Cynosa Chroma: YAxisMapping: buttons 4 and 5
evdev: Razer Razer Cynosa Chroma: EmulateWheelButton: 4, EmulateWheelInertia: 10, EmulateWheelTimeout: 200
Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.2/0003:1532:022A.0004/input/input12/event6"
XINPUT: Adding extended input device "Razer Razer Cynosa Chroma" (type: MOUSE, id 11)
evdev: Razer Razer Cynosa Chroma: initialized for relative axes.
Razer Razer Cynosa Chroma: (accel) keeping acceleration scheme 1
Razer Razer Cynosa Chroma: (accel) acceleration profile 0
Razer Razer Cynosa Chroma: (accel) acceleration factor: 2.000
Razer Razer Cynosa Chroma: (accel) acceleration threshold: 4

5: 두 번째 키보드 인터페이스의 XCONFIG-ing이 명확하지 않습니다.

config/udev: Adding input device Razer Razer Cynosa Chroma (/dev/input/event5)
Razer Razer Cynosa Chroma: Applying InputClass "evdev keyboard catchall"
Razer Razer Cynosa Chroma: Applying InputClass "system-keyboard"
Using input driver 'evdev' for 'Razer Razer Cynosa Chroma'
systemd-logind: got fd for /dev/input/event5 13:69 fd 40 paused 0
Razer Razer Cynosa Chroma: always reports core events
evdev: Razer Razer Cynosa Chroma: Device: "/dev/input/event5"
evdev: Razer Razer Cynosa Chroma: Vendor 0x1532 Product 0x22a
evdev: Razer Razer Cynosa Chroma: Found 1 mouse buttons
evdev: Razer Razer Cynosa Chroma: Found scroll wheel(s)
evdev: Razer Razer Cynosa Chroma: Found relative axes
evdev: Razer Razer Cynosa Chroma: Forcing relative x/y axes to exist.
evdev: Razer Razer Cynosa Chroma: Found absolute axes
evdev: Razer Razer Cynosa Chroma: Forcing absolute x/y axes to exist.
evdev: Razer Razer Cynosa Chroma: Found keys
evdev: Razer Razer Cynosa Chroma: Configuring as mouse
evdev: Razer Razer Cynosa Chroma: Configuring as keyboard
evdev: Razer Razer Cynosa Chroma: Adding scrollwheel support
evdev: Razer Razer Cynosa Chroma: YAxisMapping: buttons 4 and 5
evdev: Razer Razer Cynosa Chroma: EmulateWheelButton: 4, EmulateWheelInertia: 10, EmulateWheelTimeout: 200
Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.1/0003:1532:022A.0003/input/input11/event5"
XINPUT: Adding extended input device "Razer Razer Cynosa Chroma" (type: KEYBOARD, id 10)
Option "xkb_rules" "evdev"
evdev: Razer Razer Cynosa Chroma: initialized for relative axes.
evdev: Razer Razer Cynosa Chroma: ignoring absolute axes.
Razer Razer Cynosa Chroma: (accel) keeping acceleration scheme 1
Razer Razer Cynosa Chroma: (accel) acceleration profile 0
Razer Razer Cynosa Chroma: (accel) acceleration factor: 2.000
Razer Razer Cynosa Chroma: (accel) acceleration threshold: 4

답변1

배경 정보: X에는 원래 마우스와 키보드만 있었습니다. XINPUT 확장(현재 두 번째 주요 버전)은 이를 더욱 유연하게 만듭니다. 원래의 단일 마우스와 단일 키보드를 "코어 포인터" 및 "코어 키보드"로 유지하지만 코어 쌍과 같은 추가 "마스터 장치"를 허용하고 모든 장치를 마스터 장치에 연결할 수 있는 슬레이브 장치로 전환합니다. X 응용 프로그램은 XINPUT 이벤트를 직접 쿼리할 수도 있지만 실제로 이 작업을 수행하는 응용 프로그램은 거의 없으며 대부분 "핵심" 이벤트에만 반응합니다.

기본적으로(적어도 내 시스템에서는) 모든 evdev 장치는 "코어" 마스터 장치에 연결되어 키보드나 마우스 역할을 합니다. 분명히 이것은 귀하의 시스템에서 작동하지 않습니다. 를 사용하여 현재 매핑을 볼 수 있으며 , 매핑과 관계없이 특정 장치가 실제로 출력을 생성하는지 xinput --list확인할 수 있습니다 .xinput --test-xi2 <device id>

완전성을 위해 더 낮은 수준에서 이벤트를 디버깅해야 하는 경우(X가 이벤트를 처리하기 전) evtest커널 입력 계층에서 무슨 일이 일어나고 있는지 확인하는 것이 도움이 될 수 있습니다.

xinput --test-xi2 <razor id>따라서 어떤 이유에서든 "Razer 키보드 마우스"가 코어 포인터에 연결되어 있지 않아 작동하지 않는 경우 마우스 이벤트를 볼 수 있는 경우 xinput --float <razor id>필요한 경우 `xinput을 사용하여 연결을 해제할 수 있습니다. - 코어 포인터에 연결되어 있습니다. <코어 포인터 ID'를 다시 연결하세요.

예를 들어 "Razer 키보드 마우스"에서 키보드 이벤트가 발생하는 경우와 같이 다른 일이 발생하면(무엇인지 모르겠습니다. 지금까지 추가 정보를 제공하지 않았습니다) 상황이 더 복잡해집니다.

udev 및/또는 xorg.conf가 엉망이더라도 명령줄 도구를 사용하여 모든 것을 작동 상태로 만들 수 있습니다(마우스 이벤트가 발생하지 않는 등 더 근본적인 문제가 없는 한). 이 작업이 완료되면 구성 파일을 확인하여 영구적으로 만들 수 있습니다.


자, 새로운 정보가 있습니다. 3개의 입력 계층 장치(원래 질문에 따르면 2개가 아님)와 해당 X 장치 3개, 키보드, 마우스 및 하이브리드 장치가 있습니다.

따라서 첫 번째 단계는 이러한 장치가 커널 입력 계층에서 수행하는 작업을 파악하는 것입니다. 따라서 evtest세 가지를 모두 실행하십시오. 이를 사용할 때 심볼릭 링크를 사용하여 /dev/input/by-*세 가지 모두를 참조하고 가장 편리한 것을 선택하십시오( by-id충분할 수 있음). 질문을 편집하고 누른 키와 해당 키가 원하는 효과가 있었는지 여부와 함께 세 가지 관련 출력을 모두 제공하십시오.

세 장치 모두에 대해 이 과정을 반복 xinput --test-xi2 ...하고 이벤트가 X로 올바르게 변환되는지 확인하세요.

X 포인터 이벤트를 생성하는 두 개의 장치가 있는 경우(예: 하이브리드 장치와 마우스가 모두 이러한 이벤트를 생성하는 경우) 혼합 장치를 부동시킵니다. 그러면 제대로 작동하고 xev필요한 경우 테스트에 사용할 수 있습니다.

어떤 장치도 X 포인터 이벤트를 생성하지 않으면 무슨 일이 일어나고 있는지 파악하기 위해 더 자세한 내용을 살펴봐야 합니다.

관련 정보