Package: xserver-xorg-core Version: 2:1.4.2-3 I'm suffering a problem with xmodmap. Since at least July 1997 I have swapped control and capslock on my displays, and made certain other changes to the keymap, by using xmodmap in the xdm Xsetup script. This no longer works properly. (I do it like this because this affects all X displays connected to the server, because I want more than the swapcaps option can provide, and of course because originally there was no server config file option to change keymaps at all.)
The symptoms are that on the display running lenny it is not possible to log in because it is not possible to type shifted letters into the xdm greeter (eg for one's passphrase). (I'm using the xdm greeter rather than gdm etc.) I have investigated and discovered that: * When xmodmap -pm is run in Xsetup, it prints an empty modifier map. That is, there are no modifiers set. * The runes I use for xmodmap to swap control and capslock explicitly set up mappings for control and capslock, rather than transplanting them. After xmodmap runs, there are modifier settings for control and capslock but not for shift. I conjecture that xmodmap works by reading the whole modifier map and then writing a modified version. * My xmodmap invocation to change the modifier map exits with status 1 without any apparent cause and without printing an explanation. This would seem to be a bug in xmodmap. * If I comment out the xmodmap call in Xsetup, everything works fine. After logging in I see the expected modifier map. I can then do exactly the same xmodmap invocation and it works perfectly - the functionality of shift is not affected. * The effect happens nearly every time but doesn't seem to be quite 100% reproducible. I haven't had it fail to go wrong under 100% controlled conditions so I'm not sure, but I suspect a race. A complicating factor is that the xdm host is running sarge. Thus xdm and the chooser are those from sarge. xmodmap is running on the sarge host. It would be rather too disruptive to untangle this so that I could run xdm on what is current the lenny client and I don't have a spare box right now to use for a specific test. However I have verified that running lenny's xmodmap (via chroot and NFS) doesn't help: lenny's xmodmap appears to be identical in behaviour. Here are some relevant files: My instrumented Xsetup_2 script: #!/bin/sh # $XConsortium: Xsetup_0,v 1.3 93/09/28 14:30:31 gildea Exp $ set -e echo "1 $0 $*" echo "2 $0 $*" >&2 set -x type -p xmodmap xmodmap -pm || echo "x $?" printenv || sort rsync -vP $XAUTHORITY /net/anarres/root/.Xauthority XAUTHORITY=/root/.Xauthority chroot /net/anarres xdpyinfo || echo "q $?" XAUTHORITY=/root/.Xauthority chroot /net/anarres xmodmap -pm || echo "y $?" XAUTHORITY=/root/.Xauthority chroot /net/anarres xmodmap -verbose /root/Xmodmap_local || echo $? XAUTHORITY=/root/.Xauthority chroot /net/anarres xmodmap -pm || echo "z $?" xsetroot -fg blue -bg black -bitmap /etc/X11/xdm/defaultroot.bitmap Output of xmodmap -pm after Shift has been broken in this way, in a session obtained by logging in as a user with no shifted characters in the password: xmodmap: up to 1 keys per modifier, (keycodes in parentheses): shift lock Caps_Lock (0x25) control Control_L (0x42) mod1 mod2 mod3 mod4 mod5 The xmodmap file Xmodmap_local: ! UK keymap, swap capslock and control clear control clear lock keycode 11 = 2 quotedbl keycode 22 = BackSpace keycode 48 = apostrophe at keycode 51 = numbersign asciitilde keycode 94 = backslash bar keycode 37 = Caps_Lock keycode 66 = Control_L add control = Control_L Control_R add lock = Caps_Lock keycode 113 = Meta_R keycode 99 = End keycode 103 = Prior The contents of xdm.log including the debugging output from the Xsetup_2 script above: Mon Aug 25 16:44:42 2008 xdm info (pid 22554): starting X server on anarres.relativity.greenend.org.uk:2 Mon Aug 25 16:44:42 2008 xdm info (pid 24883): sourcing /etc/X11/xdm/Xsetup 1 /etc/X11/xdm/Xsetup_2 2 /etc/X11/xdm/Xsetup_2 + type -p xmodmap /usr/bin/X11/xmodmap + xmodmap -pm xmodmap: up to 0 keys per modifier, (keycodes in parentheses): shift lock control mod1 mod2 mod3 mod4 mod5 + printenv SHELL=/bin/sh -e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11 PWD=/ SHLVL=2 DISPLAY=anarres.relativity.greenend.org.uk:2 XAUTHORITY=/var/lib/xdm/authdir/authfiles/Aanarres.relativity.greenend.org.uk:2-vtuuyQ _=/usr/bin/printenv + rsync -vP /var/lib/xdm/authdir/authfiles/Aanarres.relativity.greenend.org.uk:2-vtuuyQ /net/anarres/root/.Xauthority Aanarres.relativity.greenend.org.uk:2-vtuuyQ 44 100% 0.00kB/s 0:00:00 44 100% 0.00kB/s 0:00:00 (1, 100.0% of 1) sent 169 bytes received 42 bytes 140.67 bytes/sec total size is 44 speedup is 0.21 + XAUTHORITY=/root/.Xauthority + chroot /net/anarres xdpyinfo name of display: anarres.relativity.greenend.org.uk:2.0 [ lots of stuff deleted -iwj ] red, green, blue masks: 0xff0000, 0xff00, 0xff significant bits in color specification: 8 bits + XAUTHORITY=/root/.Xauthority + chroot /net/anarres xmodmap -pm xmodmap: up to 0 keys per modifier, (keycodes in parentheses): shift lock control mod1 mod2 mod3 mod4 mod5 + XAUTHORITY=/root/.Xauthority + chroot /net/anarres xmodmap -verbose /root/Xmodmap_local ! /root/Xmodmap_local: ! 2: clear control clear control ! 3: clear lock clear lock ! 4: keycode 11 = 2 quotedbl keycode 0xb = 2 quotedbl ! 5: keycode 22 = BackSpace keycode 0x16 = BackSpace ! 6: keycode 48 = apostrophe at keycode 0x30 = apostrophe at ! 7: keycode 51 = numbersign asciitilde keycode 0x33 = numbersign asciitilde ! 8: keycode 94 = backslash bar keycode 0x5e = backslash bar ! 9: keycode 37 = Caps_Lock keycode 0x25 = Caps_Lock ! 10: keycode 66 = Control_L keycode 0x42 = Control_L ! 11: add control = Control_L Control_R add control = Control_L Control_R ! 12: add lock = Caps_Lock add lock = Caps_Lock ! 14: keycode 113 = Meta_R keycode 0x71 = Meta_R ! 16: keycode 99 = End keycode 0x63 = End ! 17: keycode 103 = Prior keycode 0x67 = Prior ! ! executing work queue ! clear control clear lock keycode 0xb = 2 quotedbl keycode 0x16 = BackSpace keycode 0x30 = apostrophe at keycode 0x33 = numbersign asciitilde keycode 0x5e = backslash bar keycode 0x25 = Caps_Lock keycode 0x42 = Control_L add control = Control_L Control_R add lock = Caps_Lock keycode 0x71 = Meta_R keycode 0x63 = End keycode 0x67 = Prior + echo 1 1 + XAUTHORITY=/root/.Xauthority + chroot /net/anarres xmodmap -pm xmodmap: up to 1 keys per modifier, (keycodes in parentheses): shift lock Caps_Lock (0x25) control Control_L (0x42) mod1 mod2 mod3 mod4 mod5 + xsetroot -fg blue -bg black -bitmap /etc/X11/xdm/defaultroot.bitmap My xorg.conf: # xorg.conf (xorg X Window System server configuration file) # # This file was generated by dexconf, the Debian X Configuration tool, using # values from the debconf database. # # Edit this file with caution, and see the xorg.conf manual page. # (Type "man xorg.conf" at the shell prompt.) # # This file is automatically updated on xserver-xorg package upgrades *only* # if it has not been modified since the last upgrade of the xserver-xorg # package. # # If you have edited this file but would like it to be automatically updated # again, run the following command: # sudo dpkg-reconfigure -phigh xserver-xorg Section "InputDevice" Identifier "Generic Keyboard" Driver "keyboard" Option "CoreKeyboard" EndSection Section "InputDevice" Identifier "Configured Mouse" Driver "mouse" Option "CorePointer" Option "Device" "/dev/input/mice" Option "Protocol" "ImPS/2" EndSection Section "Device" Identifier "anarres 965" Driver "intel" Option "AccelMethod" "XAA" # Option "EXANoComposite" # workarounds for ? #496272 #451791 # (related with nvidia is #404770 but probably irrelevant) EndSection Section "Monitor" Identifier "nokia 446xpro" Option "DPMS" # Option "SyncOnGreen" Option "PreferredMode" "1600x1200_4" # HorizSync 30-107 # VertRefresh 50-150 # HorizSync 30-77 # VertRefresh 50-120 Modeline "1600x1200_4" 220.000 1600 1696 1888 2148 1200 1204 1215 1245 +hsync +vsync Modeline "1600x1200_5" 220.000 1600 1616 1808 2080 1200 1204 1207 1244 +hsync +vsync EndSection Section "Screen" Identifier "Default Screen" Device "anarres 965" Monitor "nokia 446xpro" DefaultDepth 24 SubSection "Display" # syntax error Modes "1600x1200_5" # Modes "1024x768" # Modes "1920x1440" "1600x1200" "1280x1024" EndSubSection EndSection Section "ServerLayout" Identifier "Default Layout" Screen "Default Screen" InputDevice "Generic Keyboard" InputDevice "Configured Mouse" EndSection --