마우스 멀티미디어 버튼이 "/dev/input/eventX"에서 이벤트를 생성하지 않습니다.

마우스 멀티미디어 버튼이 "/dev/input/eventX"에서 이벤트를 생성하지 않습니다.

프로그래밍 가능한 버튼이 여러 개 있고 그 중 절반이 멀티미디어 버튼으로 설정되어 있는 마우스(Canyon CND-SGM14RGB)가 있습니다. 구성 소프트웨어는 Windows 전용이며, 특수 드라이버가 없어도 버튼이 Windows에서 제대로 작동합니다.

그러나 Linux에서는 표준 마우스 동작(lmb, rmb, 중앙, 앞으로/뒤로)에 매핑된 버튼만 작동합니다. 멀티미디어 버튼이 작동하지 않습니다.


다음 진단 단계를 시도했습니다.

  1. 시작 wev( xevwayland의 대안)하고 모든 버튼을 누릅니다.

    일반 버튼은 작동하지만 멀티미디어 버튼은 작동하지 않습니다.

  2. cat /dev/input/eventX새 데이터를 실행 하고 찾습니다.

    마우스와 관련된 두 파일 에 따르면 /proc/bus/input/devices그 중 하나는 일반적인 마우스 활동을 할 때 쓰레기를 만드는 반면, 두 파일 모두 멀티미디어 버튼을 누를 때 소리가 나지 않습니다.

  3. Wireshark를 시작하고 마우스 패킷을 찾은 결과 다음이 발견되었습니다.

    • 핸드셰이크(???) 장치 2.27.0(버스 2, 장치 27, 엔드포인트 0)에서 전송됨
    • 일반 마우스 이벤트(에서 발생하는 이벤트 /dev/input/eventX)는 장치 2.27.1에서 전송됩니다.
    • 멀티미디어 버튼 누름은 장치 2.27.2에서 전송됩니다.

이 버튼이 제대로 작동하도록 할 수 있는 방법이 있나요? 필요한 경우 Wireshark 덤프 파일을 제공할 수 있습니다.

편집 1: lsusb출력

Bus 002 Device 027: ID 258a:0027 SINOWEALTH Wired Gaming Mouse
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x258a 
  idProduct          0x0027 
  bcdDevice            1.02
  iManufacturer           1 SINOWEALTH
  iProduct                2 Wired Gaming Mouse
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x003b
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              480mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      71
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     213
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1
Device Status:     0x0000
  (Bus Powered)

편집 2: 관련 libinput list-devices출력

Device:           SINOWEALTH Wired Gaming Mouse
Kernel:           /dev/input/event9
Group:            9
Seat:             seat0, default
Capabilities:     pointer 
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: disabled
Calibration:      n/a
Scroll methods:   button
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   flat *adaptive
Rotation:         n/a

Device:           SINOWEALTH Wired Gaming Mouse Keyboard
Kernel:           /dev/input/event10
Group:            9
Seat:             seat0, default
Capabilities:     keyboard 
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         n/a

답변1

bInterfaceClass         3 Human Interface Device
bInterfaceSubClass      1 Boot Interface Subclass
bInterfaceProtocol      1 Keyboard

마우스가 일반 USB HID 프로토콜을 사용하지 않고 별도의 프로토콜을 사용하는 것으로 보입니다.USB HID 부팅 프로토콜usbkbd, 별도의 커널 모듈에 의해 처리됩니다 usbmouse. 대부분의 USB 마우스는 hid이 프로토콜을 선호하며 일부 배포판에서는 마우스의 부팅 프로토콜 드라이버를 자동으로 로드하지 못할 수도 있습니다.

usbhid모듈은 일반적으로 일반 USB 마우스 및 키보드 장치로 인식되는 모든 장치를 선언하므로 마우스의 실행 프로토콜 드라이버에 명시적으로 우선순위를 지정해야 할 수도 있습니다.

/etc/modprobe.d/canyonmouse.conf다음 내용이 포함된 파일을 생성하면 됩니다 .

# Prioritize boot protocol for the multimedia keys of this mouse
install usbhid /sbin/modprobe usbkbd; /sbin/modprobe -i usbhid
alias usb:v258ap0027* usbkbd

이 파일을 생성한 후 initrd/initramfs 파일을 업데이트해야 합니다.

이렇게 하면 키보드 시작 프로토콜 모듈이 모듈보다 먼저 로드되도록 강제하여 usbhid드라이버가 인계받기 전에 마우스(특히 "키보드" 인터페이스)를 제어할 수 있는 기회를 제공합니다.usbhid

웹 기반 원격 관리 연결의 키 입력에 응답하는 AST2400 기반 원격 관리 인터페이스를 서버에 갖기 위해 동일한 작업을 수행해야 했습니다. 원격 관리 연결은 서버에 가상 마우스 및 키보드 장치를 제공하는 것으로 나타났습니다. , 둘 다 실행 프로토콜만 지원합니다. 마우스 기능의 경우 이는 문제가 되지 않지만 실행 프로토콜만 지원하는 키보드는 매우 드물며 아직 자동으로 지원되지 않습니다.

HID 부팅 프로토콜을 사용해야 하는 요구 사항이 매우 드물기 때문에 일부 배포판(예: Debian 11)은 표준 커널에서 부팅 프로토콜 드라이버 제공을 중단했습니다. 따라서 루트 권한으로 인해 해당 모듈을 사용할 수 없다는 오류가 발생하는 경우 커널 빌드 시간 구성 옵션을 사용하여 대체/사용자 정의 커널을 활성화 modprobe usbkbd해야 할 수도 있습니다 .CONFIG_USB_KBD

답변2

https://askubuntu.com/a/1460840/906557

지금은 왜 그런지 모르겠지만 작동 중입니다.

이 특정 마우스(그리고 다른 마우스 도 많을 것이라고 확신합니다)를 사용하면 Windows 소프트웨어를 사용하여 ++ 와 같은 키 조합에 추가 버튼을 바인딩한 다음 Ubuntu에서 미디어에 대한 사용자 정의 바로 가기로 사용할 수 Ctrl있습니다 .AltArrow button

관련 정보