WWW.LUSHNIKOV.NET

linux

Ubuntu 14.04 и отваливающийся xmodmap.

На моем thinkpad x220 около кнопок со стрелками есть кнопки для навигации вперед-назад. Вероятно, предполагается использовать их в браузере. Но куда удобнее использовать их как PgUp и PgDown. В ubuntu 12.04 для этих целей у меня лежал в домашнем каталоге файлик .Xmodmap такого содержания:

keycode 167 = Next
keycode 166 = Prior

Файл этот автоматически подхватывался при логине и всё работало именно так, как мне было надо. Но после обновления до 14.04 оказалось, что файл этот игнорируется, а если загрузить его руками (xmodmap ~/.Xmodmap), то его эффект сохраняется до первого переключения языка. Сменил раскладку – снова запускай xmodmap. Как оказалось, такая картина уже как минимум с 13.10 и теперь надо править файл с раскладкой. Ну, надо, так надо.

Смотрим текущее стостояние дел:

$ setxkbmap -print
xkb_keymap {
xkb_keycodes  { include "evdev+aliases(qwerty)"    };
xkb_types     { include "complete"    };
xkb_compat    { include "complete"    };
xkb_symbols   { include "pc+ru+us:2+inet(evdev)"    };
xkb_geometry  { include "pc(pc105)"    };
};

Интересует строка xkb_symbols. В ней перечислены используемые в текущей раскладке файлы, в которых хранится соответствие кода нажимаемой клавиши её названию. Это файлы pc, ru, us и inet. Лежат они в каталоге /usr/share/X11/xkb/symbols/.

Посмотрим, где там собака порылась:

$ cd /usr/share/X11/xkb/symbols/
$ grep '167\|166' pc ru us inet
inet:    key <I166>   {      [ XF86Back              ]       };
inet:    key <I167>   {      [ XF86Forward           ]       };

Ну вот. Действие по кодам 166 и 167 определяется в файле /usr/share/X11/xkb/symbols/inet. И поправить его надо так:

key <I166>   {      [ Prior                 ]       };
key <I167>   {      [ Next                  ]       };

Файл можно поправить прямо там, где он лежит, не забыть очистить кеш (удалив все xkm-файлы из /var/lib/xkb/) и перезапустить иксы.

При следующем обновлении пакета xkb-data изменения затрутся и процедуру придется повторять еще раз. Казалось бы, достаточно исправленный файл положить в /etc/X11/xkb/symbols/, файл из этого каталога будет иметь приоритет над одноименным файлом из /usr/share/X11 и не будет перезаписваться при обновлении. Хрен там. Похоже, что каталог /etc/X11/xkb вообще никак не используется.