SteelSeries Sensei side buttons freezes the mouse

6,086

Solution 1

The issue appears to have been resolved as of the 3.7.x kernel (https://bbs.archlinux.org/viewtopic.php?id=139994), so you should have a working mouse when 13.04 ships.

Solution 2

Fortunately, the config is configurable via the firmware in the mouse. Connect the mouse to any Windows 7 PC. Download SteelSeries Engine for Windows, disable the page up and page down buttons. Reconnect the mouse to your Ubuntu.

Solution 3

Ditto. Except that disabling it in Windows only seems to temporarily fix the problem--it resurfaces if the mouse is reconnected. Which, interestingly, seems to then persist until I next visit Windows. I should probably stop plugging it into my monitor.

I also tried the 3.4 kernel from the kernel PPA to no effect.

After some searching about for this error and fixes for input devices that flake out in Linux, I've found a few things to try out. Alas they tend to require a kernel rebuild which I've not done lately outside of easy monolithic bzImage situations. And so I'll share them here until I investigate Ubuntu's convenient module rebuilding facilities:

There is a file in USB core called quirks.c which implements workarounds for some misbehaving devices:

Our mouse isn't one of them. But perhaps one of those tweaks would help? They're documented in the header.

Alternatively, there is a HID_MAX_USAGES constant in hid.h that was exceeded by some devices.

In one case where that was the fix, it was also observed the mouse offered multiple interfaces. Our mouse does too, check lsusb -v and search for Ideazon (which is SteelSeries parent company/manufacturer/what they're called in USB land). Maybe we can just blacklist that part somehow?

Solution 4

I don't have a fix, but I might have a hint as to what's happening.

I have the same mouse, and the same problem, and I suspect a kernel bug somewhere in the USB subsystem. Using kernel 3.2.0 (Debian-unstable), and following the usbmon documentation:

# mount -t debugfs none_debugfs /sys/kernel/debug
# modprobe usbmon
# grep -B5 SteelSeries /sys/kernel/debug/usb/devices
T:  Bus=03 ...
...
# cat /sys/kernel/debug/usb/usbmon/3u

Now I should be seeing a trace of everything happening on USB bus 3. And indeed, when I move the mouse, I see lines like:

ee561cc0 3981940473 C Ii:3:016:1 0:1 8 = 01000000 ffff0000
ee561cc0 3981940545 S Ii:3:016:1 -115:1 8 <

But when I click one of those right-side mouse buttons, I get nothing. And then I don't get any data when I move the mouse anymore. Which I can only assume means the USB driver went Wat.

I'd wonder about the mouse (and still do, a little), but both OSX and (I assume) Windows handle it just fine.

Share:
6,086
KindDragon
Author by

KindDragon

Updated on September 18, 2022

Comments

  • KindDragon
    KindDragon over 1 year

    When I press one of the righthand side buttons (not the usual back/forward buttons) the mouse freezes, and the -22 error(see below) comes up in dmesg. When I remove the mouse and put it in again it works, but the buttons still freezes the mouse.

    I couldn't find any useful information on either error -22 or concerning the Sensei mouse.

    This is from dmesg after boot:

    [    2.473271] input: La-VIEW Technology SteelSeries   as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0/input/input3
    [    2.473445] generic-usb 0003:1038:1361.0001: input,hidraw0: USB HID v1.00 Mouse [La-VIEW Technology SteelSeries  ] on usb-0000:00:1d.0-1.6/input0
    [    2.474360] generic-usb: probe of 0003:1038:1361.0002 failed with error -22
    [    2.474427] usbcore: registered new interface driver usbhid
    [    2.474493] usbhid: USB HID core driver
    

    xinput list-props 8 yields:

    Device 'La-VIEW Technology SteelSeries  ':
    Device Enabled (142):   1
    Coordinate Transformation Matrix (144): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (271): 0
    Device Accel Constant Deceleration (272):   3.000000
    Device Accel Adaptive Deceleration (273):   1.000000
    Device Accel Velocity Scaling (274):    10.000000
    Device Product ID (260):    4152, 4961
    Device Node (261):  "/dev/input/event3"
    Evdev Axis Inversion (275): 0, 0
    Evdev Axes Swap (277):  0
    Axis Labels (278):  "Rel X" (152), "Rel Y" (153), "Rel Horiz Wheel" (269), "Rel Vert Wheel" (270)
    Button Labels (279):    "Button Left" (145), "Button Middle" (146), "Button Right" (147), "Button Wheel Up" (148), "Button Wheel Down" (149), "Button Horiz Wheel Left" (150), "Button Horiz Wheel Right" (151), "Button Side" (264), "Button Extra" (265), "Button Forward" (266), "Button Back" (267), "Button Task" (268), "Button Unknown" (263), "Button Unknown" (263), "Button Unknown" (263), "Button Unknown" (263)
    Evdev Middle Button Emulation (280):    0
    Evdev Middle Button Timeout (281):  50
    Evdev Third Button Emulation (282): 0
    Evdev Third Button Emulation Timeout (283): 1000
    Evdev Third Button Emulation Button (284):  3
    Evdev Third Button Emulation Threshold (285):   20
    Evdev Wheel Emulation (286):    0
    Evdev Wheel Emulation Axes (287):   0, 0, 4, 5
    Evdev Wheel Emulation Inertia (288):    10
    Evdev Wheel Emulation Timeout (289):    200
    Evdev Wheel Emulation Button (290): 4
    Evdev Drag Lock Buttons (291):  0
    

    Update 1:

    I have now tried to sniff the usb packets to see what's going on when i press the buttons that freeze the mouse. I've put them below:

    No.     Time        Source                Destination           Protocol Length Info
     199479 390.237182  6.1                   host                  USB      64     URB_INTERRUPT in
    
    Frame 199479: 64 bytes on wire (512 bits), 64 bytes captured (512 bits)
    USB URB
        URB id: 0xffff8801ca55ba80
        URB type: URB_COMPLETE ('C')
        URB transfer type: URB_INTERRUPT (0x01)
        Endpoint: 0x81, Direction: IN
            1... .... = Direction: IN (1)
            .000 0001 = Endpoint value: 1
        Device: 6
        URB bus id: 2
        Device setup request: not relevant ('-')
        Data: present (0)
        URB sec: 1343162038
        URB usec: 333931
        URB status: Protocol error (-EPROTO) (-71)
        URB length [bytes]: 0
        Data length [bytes]: 0
        [Request in: 194548]
        [Time from request: 23.890818000 seconds]
    
    No.     Time        Source                Destination           Protocol Length Info
     199480 390.251625  host                  6.1                   USB      64     URB_INTERRUPT in
    
    Frame 199480: 64 bytes on wire (512 bits), 64 bytes captured (512 bits)
    USB URB
        URB id: 0xffff8801ca55ba80
        URB type: URB_SUBMIT ('S')
        URB transfer type: URB_INTERRUPT (0x01)
        Endpoint: 0x81, Direction: IN
            1... .... = Direction: IN (1)
            .000 0001 = Endpoint value: 1
        Device: 6
        URB bus id: 2
        Device setup request: not relevant ('-')
        Data: not present ('<')
        URB sec: 1343162038
        URB usec: 348374
        URB status: Operation now in progress (-EINPROGRESS) (-115)
        URB length [bytes]: 8
        Data length [bytes]: 0
        [Response in: 199481]
    
    No.     Time        Source                Destination           Protocol Length Info
     199481 390.255254  6.1                   host                  USB      64     URB_INTERRUPT in
    
    Frame 199481: 64 bytes on wire (512 bits), 64 bytes captured (512 bits)
    USB URB
        URB id: 0xffff8801ca55ba80
        URB type: URB_COMPLETE ('C')
        URB transfer type: URB_INTERRUPT (0x01)
        Endpoint: 0x81, Direction: IN
            1... .... = Direction: IN (1)
            .000 0001 = Endpoint value: 1
        Device: 6
        URB bus id: 2
        Device setup request: not relevant ('-')
        Data: present (0)
        URB sec: 1343162038
        URB usec: 352003
        URB status: Protocol error (-EPROTO) (-71)
        URB length [bytes]: 0
        Data length [bytes]: 0
        [Request in: 199480]
        [Time from request: 0.003629000 seconds]
    
    No.     Time        Source                Destination           Protocol Length Info
     199488 390.279626  host                  6.1                   USB      64     URB_INTERRUPT in
    
    Frame 199488: 64 bytes on wire (512 bits), 64 bytes captured (512 bits)
    USB URB
        URB id: 0xffff8801ca55ba80
        URB type: URB_SUBMIT ('S')
        URB transfer type: URB_INTERRUPT (0x01)
        Endpoint: 0x81, Direction: IN
            1... .... = Direction: IN (1)
            .000 0001 = Endpoint value: 1
        Device: 6
        URB bus id: 2
        Device setup request: not relevant ('-')
        Data: not present ('<')
        URB sec: 1343162038
        URB usec: 376375
        URB status: Operation now in progress (-EINPROGRESS) (-115)
        URB length [bytes]: 8
        Data length [bytes]: 0
        [Response in: 199489]
    
    No.     Time        Source                Destination           Protocol Length Info
     199489 390.283255  6.1                   host                  USB      64     URB_INTERRUPT in
    
    Frame 199489: 64 bytes on wire (512 bits), 64 bytes captured (512 bits)
    USB URB
        URB id: 0xffff8801ca55ba80
        URB type: URB_COMPLETE ('C')
        URB transfer type: URB_INTERRUPT (0x01)
        Endpoint: 0x81, Direction: IN
            1... .... = Direction: IN (1)
            .000 0001 = Endpoint value: 1
        Device: 6
        URB bus id: 2
        Device setup request: not relevant ('-')
        Data: present (0)
        URB sec: 1343162038
        URB usec: 380004
        URB status: Protocol error (-EPROTO) (-71)
        URB length [bytes]: 0
        Data length [bytes]: 0
        [Request in: 199488]
        [Time from request: 0.003629000 seconds]
    
    No.     Time        Source                Destination           Protocol Length Info
     199504 390.331599  host                  6.1                   USB      64     URB_INTERRUPT in
    
    Frame 199504: 64 bytes on wire (512 bits), 64 bytes captured (512 bits)
    USB URB
        URB id: 0xffff8801ca55ba80
        URB type: URB_SUBMIT ('S')
        URB transfer type: URB_INTERRUPT (0x01)
        Endpoint: 0x81, Direction: IN
            1... .... = Direction: IN (1)
            .000 0001 = Endpoint value: 1
        Device: 6
        URB bus id: 2
        Device setup request: not relevant ('-')
        Data: not present ('<')
        URB sec: 1343162038
        URB usec: 428348
        URB status: Operation now in progress (-EINPROGRESS) (-115)
        URB length [bytes]: 8
        Data length [bytes]: 0
        [Response in: 199505]
    
    No.     Time        Source                Destination           Protocol Length Info
     199505 390.335256  6.1                   host                  USB      64     URB_INTERRUPT in
    
    Frame 199505: 64 bytes on wire (512 bits), 64 bytes captured (512 bits)
    USB URB
        URB id: 0xffff8801ca55ba80
        URB type: URB_COMPLETE ('C')
        URB transfer type: URB_INTERRUPT (0x01)
        Endpoint: 0x81, Direction: IN
            1... .... = Direction: IN (1)
            .000 0001 = Endpoint value: 1
        Device: 6
        URB bus id: 2
        Device setup request: not relevant ('-')
        Data: present (0)
        URB sec: 1343162038
        URB usec: 432005
        URB status: Protocol error (-EPROTO) (-71)
        URB length [bytes]: 0
        Data length [bytes]: 0
        [Request in: 199504]
        [Time from request: 0.003657000 seconds]
    

    Update 2:

    I've just tried rebooting from windows (not shutting down and booting again mind you) - and now the mouse registers fine with the extra buttons (they're btn 10 and 11).

    I've had a similar thing happen to my touchpad on my laptop (where it behaved differently after rebooting from windows - though not for the better in that situation). I think the rationale were that there must've been some kind of ram/rom in the hardware which stored some driver specific stuff and which didn't get cleared properly on a reboot.

    I have no idea if this would help anyone, but now it's documented.

    • sdaau
      sdaau over 11 years
      I was wondering how that nice USB sniff log was obtained, so I hope it's OK to jot it down here: managed to find relevant info here and here. I found sudo tshark -i usbmon2 -V in Ubuntu produces that kind of log directly in terminal's stdout. Cheers!
    • skomorokh
      skomorokh almost 11 years
      Something or another happened between Ubuntu 12.10 and 13.04 that eliminated this issue, at least for me...
  • KindDragon
    KindDragon almost 12 years
    You are absolutely right, but I were looking to fix the issue and make use of the buttons (I use them for switching tabs).
  • KindDragon
    KindDragon almost 12 years
    I've been thinking about this myself, but i use it to dualboot to windows, where i would rather like to use it with the buttons.