В /etc/X11/Xsession все вызовы пользовательских скриптов выполняются до fixkeyboard. При необходимости выполнить вызов xmodmap (и при использовании XKB) нет места, куда его можно было бы прописать рядовому пользователю. Связано это с тем, что последующий запуск fixkeyboard сбросит изменения xmodmap, касающиеся настроек клавиатуры. Подобный вызов xmodmap может потребоваться, например, при переназначении мультимедийных клавиш для соответствия кодам XF86*. Я использую xmodmap, чтобы включить ввод знаков препинания в русской раскладке без необходимости нажимать Shift.
Хорошо бы в branch 4.1 исправить...
Решение-то я и забыл предложить :) Собственно, нужно переместить вызов fixkeyboard выше, до .xsession.d/* (и, может быть, .xprofile). Либо можно убрать проверку на включенный XKB в fixkeyboard и разрешить вызов пользовательского .Xmodmap (если это потенциально не потянет за собой другие проблемы).
Исправлено в 2.4.30 (но не в 4.1, где 2.4.29) -- http://git.altlinux.org/gears/x/xinitrc.git?p=xinitrc.git;a=commitdiff;h=2fa7ccc9522d8d2775418a0392329f3f044dc6bc : author Dmitry V. Levin <ldv@altlinux.org> Thu, 6 Nov 2008 23:35:07 +0000 (23:35 +0000) committer Dmitry V. Levin <ldv@altlinux.org> Thu, 6 Nov 2008 23:35:07 +0000 (23:35 +0000) commit 2fa7ccc9522d8d2775418a0392329f3f044dc6bc fixkeyboard: Run xmodmap also in case when XKEYBOARD extension is enabled Теперь так: if xdpyinfo |fgrep -qs XKEYBOARD; then [ -s "$sysxkbmap" ] && setxkbmap -option '' `cat "$sysxkbmap"` [ -s "$userxkbmap" ] && setxkbmap -option '' `cat "$userxkbmap"` fi [ -s $sysmodmap ] && xmodmap "$sysmodmap" [ -s $usermodmap ] && xmodmap "$usermodmap"