무선 마우스, 매우 이상한 동작

무선 마우스, 매우 이상한 동작

나는 최근 apt full-upgrade에 포함된 커널 업데이트 이후 다소 이상한 문제에 두 번이나 부딪혔고, 더 중요한 것은 내가 찾은 유일한 솔루션이 실제로 문제를 해결하는 방법과 이유를 평생 알 수 없다는 것입니다.

지금까지 두 번이나 내 마우스(완벽하게 작동하고 있는 Logitech M510, 아래에서 설명하겠지만 이것이 문제가 아니라고 거의 확신함)가 20~30분 동안 유휴 상태일 때 포인터를 비활성화했습니다. 버튼 기능을 유지하면서 비디오를 시청합니다.

1.배터리를 교체하고 마우스를 여러 번 껐다가 다시 켰지만 차이가 없습니다.

2.마찬가지로 USB 통합 수신기를 제거해도 문제가 해결되지 않습니다.

삼. dmesg오류나 경고는 기록되지 않습니다. 수신기를 다시 연결하면 출력은 이전과 같이 정상입니다.

    usb 4-1.1: USB disconnect, device number 3
    usb 4-1.1: new full-speed USB device number 5 using ehci-pci
    usb 4-1.1: New USB device found, idVendor=046d, idProduct=c52b, bcdDevice=24.07
    usb 4-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    usb 4-1.1: Product: USB Receiver
    usb 4-1.1: Manufacturer: Logitech
    logitech-djreceiver 0003:046D:C52B.0008: hiddev0,hidraw0: USB HID v1.11 Device [Logitech USB Receiver] on usb-0000:00:1d.0-1.1/input2
    input: Logitech M510 as /devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.1/4-1.1:1.2/0003:046D:C52B.0008/0003:046D:4051.0009/input/input38
    logitech-hidpp-device 0003:046D:4051.0009: input,hidraw1: USB HID v1.11 Mouse [Logitech M510] on usb-0000:00:1d.0-1.1/input2:1
    input: Logitech K350 as /devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.1/4-1.1:1.2/0003:046D:C52B.0008/0003:046D:200A.000A/input/input39
    logitech-hidpp-device 0003:046D:200A.000A: input,hidraw2: USB HID v1.11 Keyboard [Logitech K350] on usb-0000:00:1d.0-1.1/input2:2

4. xinput test [mouse]버튼 누름에 반응 하지만 xev포인터 이동은 기록하지 않습니다. 즉, 터미널에는 아무 것도 기록되지 않습니다.

5.solaar show마우스포인터가 작동하지 않을때(로지텍 receive cli)를 사용하여 수정했는데 Device activity counters: 1=18, 2=12선 외에는 아무런 차이가 나타나지 않았습니다. 수신기와 마우스가 실패할 때 결합된 출력은 다음과 같습니다.

    Unifying Receiver
    Device path  : /dev/hidraw0
    USB id       : 046d:c52b
    Serial       : AD33D9EE
    Firmware   : 24.07.B0030
    Bootloader : 02.09
    Other      : AA.AC
    Has 2 paired device(s) out of a maximum of 6.
    Notifications: wireless, software present (0x000900)
    Device activity counters: 1=18, 2=12

    Wireless Mouse M510
     Codename     : M510v2
     Kind         : mouse
     Wireless PID : 4051
     Protocol     : HID++ 4.5
     Polling rate : 8 ms (125Hz)
     Serial number: AD33D9EE
          Firmware: RQM 62.00.B0013
     The power switch is located on the base.
     Supports 22 HID++ 2.0 features:
         0: ROOT                   {0000}   
         1: FEATURE SET            {0001}   
         2: DEVICE FW VERSION      {0003}   
         3: DEVICE NAME            {0005}   
         4: RESET                  {0020}   
         5: BATTERY STATUS         {1000}   
         6: unknown:1802           {1802}   internal, hidden
         7: unknown:1810           {1810}   internal, hidden
         8: unknown:1830           {1830}   internal, hidden
         9: unknown:1862           {1862}   internal, hidden
        10: unknown:1890           {1890}   internal, hidden
        11: unknown:18A0           {18A0}   internal, hidden
        12: unknown:18B1           {18B1}   internal, hidden
        13: REPROG CONTROLS V4     {1B04}   
        14: WIRELESS DEVICE STATUS {1D4B}   
        15: unknown:1DF0           {1DF0}   hidden
        16: unknown:1DF3           {1DF3}   internal, hidden
        17: unknown:1E00           {1E00}   hidden
        18: unknown:1EB0           {1EB0}   internal, hidden
        19: unknown:1F03           {1F03}   internal, hidden
        20: LOWRES WHEEL           {2130}   
            Wheel Reports: HID
        21: POINTER SPEED          {2205}   
            Pointer Speed: 1.0
     Has 7 reprogrammable keys:
         0: LEFT CLICK , default: LeftClick => LEFT CLICK                
             divertable, mse, pos:0, group:1, gmask:1
         1: RIGHT CLICK , default: RightClick   => RIGHT CLICK               
             divertable, mse, pos:0, group:1, gmask:1
         2: MIDDLE BUTTON , default: MiddleMouseButton  => MIDDLE BUTTON             
             divertable, mse, reprogrammable, pos:0, group:2, gmask:3
         3: LEFT SCROLL AS AC PAN , default: HorzScrollLeftSet  => LEFT SCROLL AS AC PAN     
             divertable, mse, reprogrammable, pos:0, group:2, gmask:3
         4: RIGHT SCROLL AS AC PAN , default: HorzScrollRightSet    => RIGHT SCROLL AS AC PAN    
             divertable, mse, reprogrammable, pos:0, group:2, gmask:3
         5: BACK AS BUTTON 4 , default: BackEx  => BACK AS BUTTON 4          
             divertable, mse, reprogrammable, pos:0, group:2, gmask:3
         6: FORWARD AS BUTTON 5 , default: BrowserForwardEx => FORWARD AS BUTTON 5       
             divertable, mse, reprogrammable, pos:0, group:2, gmask:3
    Battery: 90%, discharging.

diff출력 전후 에 사용할 solaar show때 얻는 유일한 차이점은 다음 과 같습니다.

<   Device activity counters: 1=18, 2=12
---
>   Device activity counters: 1=77, 2=212

7.문제가 발생했을 때 단순히 시스템을 재부팅하려고 시도한 것은 아닙니다. 두 번 모두 작업 중이었고 데이터 보존이 최우선 사항이었기 때문입니다. 즉, 재부팅해도 포인터 기능이 복원되지 않으면 매우 놀랄 것입니다.

8. 마지막으로 재부팅하지 않고 이 세션 중간에 문제를 해결할 수 있는 유일한 방법이 다음을 실행하는 것인 이유를 이해할 수 없습니다.

    sudo modprobe -r psmouse

원래 목표는 실행 sudo modprobe -r psmouse한 다음 sudo modprobe psmouse다시 로드하는 것이었지만 단순히 psmouse모듈을 제거하면 기능이 복원되었습니다. 실행 lsmod | grep -i mouse목록에는 아무것도 없거나 psmouse다른 *mouse*모듈이 없습니다( psmouse다시 로드하려고 시도한 최초이자 지금까지 유일한 마우스 관련 모듈임).

psmouse이로 인해 무선 키보드와 마우스 를 제어하는 ​​커널 모듈 사이에 절전 및 전원 관리와 관련된 일종의 간섭이 있지 않을까 하는 생각이 듭니다. 수정되었습니다). 하지만 패시브 주변 장치를 선택적으로 깨우는 경우도 들어본 적이 없습니다.hid_logitech_hidpp/sys/device/[mouse]/power/*

마지막으로, 블랙리스트를 사용하면 psmouse이러한 일이 다시 발생하는 것을 방지할 수 있지만, 모듈을 먼저 로드하지 않으면 유선 마우스가 인식되지 않게 될 수 있다는 점을 이해하기 때문에 해결책으로 이 작업을 수행하는 것은 조심스럽습니다 psmouse.

이 동작의 원인을 좁히기 위한 아이디어와 찾을 수 있는 곳이 있습니까?

$ lsmod | grep hid
 hid_logitech_hidpp     45056  0
 hid_logitech_dj        28672  0
 hid_generic            16384  0
 usbhid                 65536  1 hid_logitech_dj
 hid                   139264  4 usbhid,hid_generic,hid_logitech_dj,hid_logitech_hidpp
 usbcore               299008  8 xhci_hcd,ehci_pci,usbhid,ehci_hcd,xhci_pci

그리고 목록dpkg --list | grep -i libhid

ii  libhidapi-dev:amd64                                         0.9.0+dfsg-1                         amd64        Multi-Platform library for communication with HID devices (development files)
ii  libhidapi-hidraw0:amd64                                     0.9.0+dfsg-1                         amd64        Multi-Platform library for communication with HID devices (hidraw backend)
ii  libhidapi-libusb0:amd64                                     0.9.0+dfsg-1                         amd64        Multi-Platform library for communication with HID devices (libusb backend)
ii  libhidrd0:amd64                                             0.2.0-11                             amd64        runtime library for parsing and generating USB HID reports
ii  libhidrd0-dev:amd64                                         0.2.0-11                             amd64        development files for parsing and generating USB HID reports

고쳐 쓰다

solaar -dd다음은 이 오류를 일관되게 재현하는 방법을 찾은 후 수집한 몇 가지 추가 로그 입니다 .

첫 번째는 현재 배터리 상태 및 해당 알림과 관련이 있습니다. 가능성은 희박하지만, 솔직히 말해서 이전에 사용 가능했던 마우스 배터리 상태를 기억하지 못해서 지금 폴링할 수 있기 때문에 이것이 여전히 이유와 관련이 있을 수 있습니다. 하지만 이 오류 알림은 마우스가 정상적으로 작동할 때 다시 나타나기 때문에 의심스럽습니다.

 WARNING [ReceiverListener:hidraw1] logitech_receiver.status: <PairedDevice(1,4051,M510v2)>: battery 70%, ALERT invalid battery
   ERROR [ReceiverListener:hidraw1] logitech_receiver.listener: processing Notification(1,05,00,46050000000000000000000000000000)
 Traceback (most recent call last):
  File "/usr/share/solaar/lib/logitech_receiver/listener.py", line 185, in run
    self._notifications_callback(n)
  File "/usr/share/solaar/lib/solaar/listener.py", line 220, in _notifications_handler
    _notifications.process(dev, n)
  File "/usr/share/solaar/lib/logitech_receiver/notifications.py", line 54, in process
    return _process_device_notification(device, status, notification)
  File "/usr/share/solaar/lib/logitech_receiver/notifications.py", line 115, in _process_device_notification
    return _process_feature_notification(device, status, n, feature)
  File "/usr/share/solaar/lib/logitech_receiver/notifications.py", line 209, in _process_feature_notification
    status.set_battery_info(discharge, _hidpp20.BATTERY_STATUS[battery_status])
  File "/usr/share/solaar/lib/logitech_receiver/status.py", line 205, in set_battery_info
    reason = _("Battery: %(percent)d%% (%(status)s)") % { 'percent': level, 'status': _(status) }
  File "/usr/share/solaar/lib/logitech_receiver/i18n.py", line 29, in <lambda>
    _ = lambda x: _gettext.gettext(x).decode('UTF-8')
AttributeError: 'NamedInt' object has no attribute 'decode'
  1. 두 번째 로그는 현재 읽기 어렵지만 일단 육각형 hidpp 트래픽을 디코딩하면 수신기가 실제로 마우스로 무엇을 하려고 하는지 알 수 있을 것 같습니다. 현재 수신자가 전송 중이거나 수신 중인 것으로 보입니다(아직 방향을 파악하지 못했고 w[] and the r[])응답도 동일함).r[10 01 8F00 0F0900]

    18:55:44,573  WARNING [ReceiverListener:hidraw1] logitech_receiver.base: timeout (4.00/4.00) on device 1 request {000F} params [2120]
    18:55:44,573        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) <= w[10 01 000F 212100]
    18:55:44,577        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) => r[10 01 8F00 0F0900]
    18:55:44,577        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) device 0x01 error on request {000F}: 9 = resource error
    18:55:44,577        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) <= w[10 01 000A 212100]
    18:55:44,579        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) => r[20 02 4101 0A201A4000000400000000]
    18:55:44,581        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) => r[20 00 4102 0000000000000000000000]
    18:55:44,583        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) => r[10 01 8F00 0A0900]
    18:55:44,583        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) device 0x01 error on request {000A}: 9 = resource error
    18:55:44,583        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) <= w[10 01 000C 40A000]
    18:55:44,585        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) => r[10 01 8F00 0C0900]
    18:55:44,585        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) device 0x01 error on request {000C}: 9 = resource error
    18:55:44,585        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) <= w[10 01 0009 40A200]
    18:55:44,587        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) => r[10 01 8F00 090900]
    18:55:44,587        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) device 0x01 error on request {0009}: 9 = resource error
    18:55:44,587        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) <= w[10 01 0008 40A300]
    18:55:44,589        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) => r[10 01 8F00 080900]
    18:55:44,589        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) device 0x01 error on request {0008}: 9 = resource error
    18:55:44,589        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) <= w[10 01 000C 220100]
    18:55:44,591        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) => r[10 01 8F00 0C0900]
    18:55:44,591        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) device 0x01 error on request {000C}: 9 = resource error
    18:55:44,591        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) <= w[10 01 000C 211000]
    18:55:44,593        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) => r[10 01 8F00 0C0900]
    18:55:44,593        DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) device 0x01 error on request {000C}: 9 = resource error 
    
  2. 마지막으로, nouse를 페어링 해제한 다음 다시 페어링하려고 해도 여전히 작동하지 않고 디버그 로그에 다음 줄이 표시됩니다.

    INFO [ReceiverListener:hidraw1] solaar.listener: Notification(2,41,04,B10A20) triggered new device <PairedDevice(2,200A,K350)> (keyboard) 
    INFO [ReceiverListener:hidraw1] solaar.listener: status_changed <UnifyingReceiver(/dev/hidraw1,15)>: present, 1 paired device. (0) 
    DEBUG [ReceiverListener:hidraw1] logitech_receiver.notifications: <PairedDevice(2,200A,K350)>: unifying (eQuad DJ) connection notification: software=True, encrypted=True, link=True, payload=True 
    INFO [ReceiverListener:hidraw1] solaar.listener: status_changed <PairedDevice(2,200A,K350)>: paired online, {'BATTERY LEVEL': NamedInt(90, 'full'), 'BATTERY CHARGING': False, 'BATTERY STATUS': NamedInt(0, 'discharging'), 'LINK ENCRYPTED': True, 'NOTIFICATION FLAGS': 1048576, 'ERROR': None} (0)
    WARNING [ReceiverListener:hidraw1] logitech_receiver.notifications: <PairedDevice(2,200A,K350)>: unrecognized Notification(2,42,00,0000000000000000000000) 
    DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) <= w[10 FF 83B5 200000] 
    DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) => r[10 FF 8F83 B50300] 
    DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) device 0xFF error on request {83B5}: 3 = invalid value 
    DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) <= w[10 FF 83B5 040000] 
    DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) => r[10 FF 8F83 B50300] 
    DEBUG [ReceiverListener:hidraw1] logitech_receiver.base: (15) device 0xFF error on request {83B5}: 3 = invalid value 
    ERROR [ReceiverListener:hidraw1] logitech_receiver.receiver: failed to read Nano wpid for device 1 of <UnifyingReceiver(/dev/hidraw1,15)> 
    ERROR [ReceiverListener:hidraw1] logitech_receiver.receiver: register_new_device 
    Traceback (most recent call last):
      File "/usr/share/solaar/lib/logitech_receiver/receiver.py", line 415, in register_new_device
            dev = PairedDevice(self, number, notification)
      File "/usr/share/solaar/lib/logitech_receiver/receiver.py", line 103, in __init__
            raise _base.NoSuchDevice(number=number, receiver=receiver, error="read Nano wpid")
    NoSuchDevice: {'error': u'read Nano wpid', 'number': 1, 'receiver': <UnifyingReceiver(/dev/hidraw1,15)>}
    WARNING [ReceiverListener:hidraw1] logitech_receiver.receiver: <UnifyingReceiver(/dev/hidraw1,15)>: looked for device 1, not found
    WARNING [ReceiverListener:hidraw1] solaar.listener: <UnifyingReceiver(/dev/hidraw1,15)>: received Notification(1,40,00,0000000000000000000000) for invalid device 1: None`
    

관련 정보