Bug 7277

Summary: Logitech internet keyboard has duplicate definition of XF86AudioRaiseVolume, breaks.
Product: xorg Reporter: Ryan Reich <ryan.reich>
Component: Input/KeyboardAssignee: Xorg Project Team <xorg-team>
Status: RESOLVED DUPLICATE QA Contact:
Severity: normal    
Priority: high    
Version: git   
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:

Description Ryan Reich 2006-06-19 22:01:13 UTC
I have a Logitech Cordless Desktop LX-300 which, among many other buttons, has a
Raise/Lower Volume pair on it.  My installed X server is 7.0, personally
compiled modular build, but in order to make the "multimedia" keys work I got
the latest CVS copy of xkbdesc and replaced share/X11/xkb in the X tree with its
files.  Thus, the keyboard descriptions (which is all that concerns us here) are
all latest CVS.

I configured the keyboard according to docs/README.config in the xkbdesc source
tree, and it worked...except for the raise-volume key.  The lower-volume key
worked, but the raise-volume key did nothing.  Testing with xev produced the
following data for both of them:

raise-volume key:
 KeyPress event, serial 30, synthetic NO, window 0x2c00001,
    root 0x4d, subw 0x0, time 4022743747, (26,-90), root:(868,457),
    state 0x10, keycode 176 (keysym 0x1008ff13, XF86AudioRaiseVolume), 
                same_screen YES,
    XKeysymToKeycode returns keycode: 175
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

 KeyRelease event, serial 30, synthetic NO, window 0x2c00001,
    root 0x4d, subw 0x0, time 4022743906, (26,-90), root:(868,457),
    state 0x10, keycode 176 (keysym 0x1008ff13, XF86AudioRaiseVolume), 
                same_screen YES,
    XKeysymToKeycode returns keycode: 175
    XLookupString gives 0 bytes:

lower-volume key:
 FocusOut event, serial 30, synthetic NO, window 0x2c00001,
    mode NotifyGrab, detail NotifyAncestor

 FocusIn event, serial 30, synthetic NO, window 0x2c00001,
    mode NotifyUngrab, detail NotifyAncestor

 KeymapNotify event, serial 30, synthetic NO, window 0x0,
    keys:  2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
           0   0   0   0   0   64  0   0   0   0   0   0   0   0   0   0

 KeyRelease event, serial 30, synthetic NO, window 0x2c00001,
    root 0x4d, subw 0x0, time 4022747806, (26,-90), root:(868,457),
    state 0x10, keycode 174 (keysym 0x1008ff11, XF86AudioLowerVolume), 
                same_screen YES,
    XLookupString gives 0 bytes:

The correctly-operating lower-volume key, XF86AudioLowerVolume, also displays a
volume bar in a transient window, hence the Focus events.  Notice that the
raise-volume key is recognized but does not generate a KeymapNotify event, but
merely a KeyPress event.  More interestingly, note the two-line excerpt:

    state 0x10, keycode 176 (keysym 0x1008ff13, XF86AudioRaiseVolume), 
                same_screen YES,
    XKeysymToKeycode returns keycode: 175

It appears that the keypress does not dereference to the same code that
generated it.  I did some research and found the following gem within
share/X11/xkb/symbols/inet (in the X tree):

// Logitech common definitions
partial hidden alphanumeric_keys
xkb_symbols "logitech_base" {

    key <I01> {	[ XF86AudioMedia ] };
    key <I02> { [ XF86WWW ] };
    key <I10> { [ XF86AudioPrev ] };
    key <I15> { [ XF86Community ] };
    key <I16> { [ XF86ScrollClick ] };
    key <I19> { [ XF86AudioNext ] };
    key <I20> { [ XF86AudioMute ] };
    key <I21> {	[ XF86VendorHome ] };
    key <I22> { [ XF86AudioPlay, XF86AudioPause ] };
    key <I24> { [ XF86AudioStop ] };
    key <I2E> { [ XF86AudioLowerVolume ] };
    key <I2F> {	[ XF86AudioRaiseVolume ] };
    key <I30> { [ XF86AudioRaiseVolume ] };
    key <I32> { [ XF86HomePage ] };
    key <I3B> { [ XF86New ] };
...
// Logitech Cordless Desktop LX-300
partial alphanumeric_keys
xkb_symbols "logiclx300" {
    include "inet(logitech_base)"

    key <I21>	{	[ XF86Calculator	]	};
};

XF86AudioRaiseVolume is defined twice.  Unfortunately, my keyboard sends keycode
176 when this button is pressed, and somehow the duplicate definition at 175
confuses X.  I have a fix as well:

xmodmap -e "keycode 175 = "

Then everything works.
Comment 1 Ryan Reich 2006-06-20 05:30:36 UTC

*** This bug has been marked as a duplicate of 7075 ***
Comment 2 Ryan Reich 2006-06-20 05:31:25 UTC
Whoops, duplicate of #7095 not #7075
Comment 3 Ryan Reich 2006-06-20 05:31:37 UTC

*** This bug has been marked as a duplicate of 7095 ***

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.