Comment 27 for bug 1132063

Revision history for this message
Florian W. (florian-will) wrote :

This is really annoying because it makes Ubuntu unusable when using some of the DPI selections of my new mouse. The mouse speed setting won't come up with my old mouse, too.

I've added some debug printf() to gnome-control-center "gsd-input-helper.c" in device_type_is_present:
                printf("Result %d: name %s type %d\n", i, device_info[i].name, device_info[i].type);
                printf("Result %d: type %s\n", i, XGetAtomName(GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), device_info[i].type));

(second line is a memory leak)

And in device_info_is_mouse, where "atom" is the result of the XInternAtom call in that function:
        printf("Mouse atom: %s -> %d\n", XGetAtomName(GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), atom), atom);

This is the output when opening the mouse panel:
Result 0: name Virtual core pointer type 0
Result 0: type (null)
Mouse atom: MOUSE -> 89
Result 1: name Virtual core keyboard type 0
Result 1: type (null)
Mouse atom: MOUSE -> 89
Result 2: name Virtual core XTEST pointer type 0
Result 2: type (null)
Mouse atom: MOUSE -> 89
Result 3: name Virtual core XTEST keyboard type 0
Result 3: type (null)
Mouse atom: MOUSE -> 89
Result 4: name Power Button type 88
Result 4: type KEYBOARD
Mouse atom: MOUSE -> 89
Result 5: name Power Button type 88
Result 5: type KEYBOARD
Mouse atom: MOUSE -> 89
Result 6: name AT Translated Set 2 keyboard type 88
Result 6: type KEYBOARD
Mouse atom: MOUSE -> 89
Result 7: name Holtek USB Gaming Mouse type 88
Result 7: type KEYBOARD
Mouse atom: MOUSE -> 89
Result 8: name Holtek USB Gaming Mouse type 88
Result 8: type KEYBOARD
Mouse atom: MOUSE -> 89
Result 9: name USB Multi-Smart Mouse type 88
Result 9: type KEYBOARD
Mouse atom: MOUSE -> 89

Clearly, all of the mouse entries (old mouse is the Multi-Smart one, new mouse is the Holtek one) use the KEYBOARD type aka atom 88, while no device uses the MOUSE atom number 89. So gnome-control-center assumes there are no mice because mouse_is_present() returns false.

At the same time, xinput --list shows this (so one of the KEYBOARD entries for my Holtek mouse was correct, while the second entry should be MOUSE and the Multi-Smart mouse should have a MOUSE entry only):
$ xinput --list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Holtek USB Gaming Mouse id=9 [slave pointer (2)]
⎜ ↳ USB Multi-Smart Mouse 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)]
    ↳ AT Translated Set 2 keyboard id=10 [slave keyboard (3)]
    ↳ Holtek USB Gaming Mouse id=8 [slave keyboard (3)]

So XListInputDevices appears to return the wrong device type? I'm afraid of X server internals, so I guess this is a dead end for me.