Ключевое слово xmodmap не работает

Я пытаюсь использовать Xmodmap, чтобы добавить некоторые немецкие diarees / umlauts на клавиатуру, но Xmodmap не работает с ними (но с другими перенаправлениями).

Я следую этому руководству: немецкий Umlauts на американской клавиатуре в X (Ubuntu 10.04) .

Xmodmap

Я добавил это к своему ~/.Xmodmap :

 keysym a = a A adiaeresis Adiaeresis keysym o = o O odiaeresis Odiaeresis keysym u = u U udiaeresis Udiaeresis keysym s = s S ssharp ssharp 

Ксев

Однако это не сработает. Вот результат от xev когда я xev o , удерживая AltGr , нажмите o , нажмите x :

 KeyPress event, serial 34, synthetic NO, window 0x4e00001, root 0x8e, subw 0x0, time 642618, (108,138), root:(173,190), state 0x10, keycode 32 (keysym 0x6f, o), same_screen YES, XLookupString gives 1 bytes: (6f) "o" XmbLookupString gives 1 bytes: (6f) "o" XFilterEvent returns: False KeyRelease event, serial 37, synthetic NO, window 0x4e00001, root 0x8e, subw 0x0, time 642644, (108,138), root:(173,190), state 0x10, keycode 32 (keysym 0x6f, o), same_screen YES, XLookupString gives 1 bytes: (6f) "o" XFilterEvent returns: False KeyPress event, serial 37, synthetic NO, window 0x4e00001, root 0x8e, subw 0x0, time 643792, (108,138), root:(173,190), state 0x10, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES, XKeysymToKeycode returns keycode: 92 XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False KeyPress event, serial 37, synthetic NO, window 0x4e00001, root 0x8e, subw 0x0, time 645365, (108,138), root:(173,190), state 0x90, keycode 32 (keysym 0x0, NoSymbol), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False KeyRelease event, serial 37, synthetic NO, window 0x4e00001, root 0x8e, subw 0x0, time 645409, (108,138), root:(173,190), state 0x90, keycode 32 (keysym 0x0, NoSymbol), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False KeyPress event, serial 37, synthetic NO, window 0x4e00001, root 0x8e, subw 0x0, time 647660, (108,138), root:(173,190), state 0x90, keycode 53 (keysym 0xd7, multiply), same_screen YES, XLookupString gives 2 bytes: (c3 97) "×" XmbLookupString gives 2 bytes: (c3 97) "×" XFilterEvent returns: False KeyRelease event, serial 37, synthetic NO, window 0x4e00001, root 0x8e, subw 0x0, time 647722, (108,138), root:(173,190), state 0x90, keycode 53 (keysym 0xd7, multiply), same_screen YES, XLookupString gives 2 bytes: (c3 97) "×" XFilterEvent returns: False KeyRelease event, serial 37, synthetic NO, window 0x4e00001, root 0x8e, subw 0x0, time 650223, (108,138), root:(173,190), state 0x90, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES, XKeysymToKeycode returns keycode: 92 XLookupString gives 0 bytes: XFilterEvent returns: False 

Вы заметите, что нажатие AltGr интерпретируется как ISO_Level3_Shift , и когда это и x нажаты, я получаю keysym 0xd7, multiply , т.е. × , который устанавливается как мой третий уровень для x . Так AltGr работает.

 $ xmodmap -pke | grep 53 keycode 53 = x X x X multiply approximate 

Однако, когда я keysym 0x0, NoSymbol o, я получаю keysym 0x0, NoSymbol , несмотря на настройку третьего уровня:

 $ xmodmap -pke | grep 32 keycode 32 = o O odiaeresis Odiaeresis 

То же самое происходит, когда я пытаюсь использовать AltGr + ( a | u | s ).

Xmodmap работает для других переназначений

Поскольку мой ключ PgUp на моем ноутбуке невелик, я переназначил num pad + на страницу Up в моей ~/.Xmodmap , и это работает нормально. Таким образом, мой файл XModmap читается (частично).

Почему мои повторные попытки для o / a / u не работают?

Я использую Ubuntu 14.0.1 с Ubuntu Unity.

2 Solutions collect form web for “Ключевое слово xmodmap не работает”

Предварительная заметка: похоже, что xmodmap недавно изменился; старые настройки не будут работать.

В вашем случае просмотрите количество значений для кода 53 (6 значений: x X x X multiply approximate ), который работает, и для o O odiaeresis Odiaeresis 32 (4 значения: o O odiaeresis Odiaeresis ), который не работает.

ISO_Level3_Shift выберет 5-е или 6-е значение, но в вашем случае они не будут установлены для кодового ключа 32. Следовательно, результат keysym 0x0, NoSymbol .

Что вам нужно:

 keysym a = a A a A adiaeresis Adiaeresis keysym o = o O o O odiaeresis Odiaeresis keysym u = u U u U udiaeresis Udiaeresis keysym s = s S s S ssharp ssharp 

Но лучше использовать XKB напрямую ( пример ).

Чтобы сделать правильный Alt ключ работой Alt Gr , его нужно сопоставить с Mode_switch вместо ISO_Level3_Shift , добавив строку

 keycode 108 = Mode_switch 

до ~/.Xmodmap :

 keycode 108 = Mode_switch keycode 38 = a A adiaeresis Adiaeresis keycode 30 = u U udiaeresis Udiaeresis keycode 32 = o O odiaeresis Odiaeresis keycode 39 = s S ssharp 

Если вы хотите, чтобы умлауты были на ключах, которые они имеют на немецкой клавиатуре, используйте:

 keycode 108 = Mode_switch keycode 48 = apostrophe quotedbl adiaeresis Adiaeresis keycode 47 = semicolon colon odiaeresis Odiaeresis keycode 34 = bracketleft braceleft udiaeresis Udiaeresis keycode 20 = minus underscore ssharp 

(Конечно, вы могли бы их объединить).

  • Пересылка X11 через SSH
  • Контрольная подсветка как пользователь (без xbacklight)
  • xrandr --listproviders не обнаруживает nvidia
  • В Xorg нет клавиатуры
  • X.org работает без сокета в chroot?
  • Разница между Xorg и Gnome / KDE / Xfce
  • Как настроить Xorg для установки динамического двойного монитора
  • Как удалить «мертвые части окна» после ошибок GUI?
  • Ctrl + Alt + Backspace, чтобы убить X-сервер нельзя отключить
  • Требуется новый «X» рабочий стол для VNC?
  • Отключение расширения сервера Xorg во время выполнения (для новых клиентов)?
  • Linux и Unix - лучшая ОС в мире.