Дополнительная цифровая клавиатура (numpad) пришла к нам из 1981 года с клавиатуры IBM Model F. Отдельных клавиш со стрелками тогда не было, потому вместе с ней пришла и клавиша Num Lock, переключавшая клавиатуру из режима ввода цифр в режим управления курсором курсором. Отдельные клавиши для управления появились в 1986 году в IBM Model M,s но два режима работы (курсор/цифры) за последовавших 30 лет так и не убрали.

Я использую дополнительную клавиатуру исключительно для ввода цифр и потому я решил отключить переключение режимов вовсе, чтобы не следить за состоянием Num Lock-а. X11 позволяет это сделать, а заодно и переназначить клавишу (./Del) на то, чтобы она всегда вводила точку (а не десятичный разделитель из локали).

Один из возможных способов (не самый оптимальный, зато с наименьшим количеством телодвижений) таков:

  1. Делаем свою раскладку на основе стандартной в файле .Xkeymap. Переопределим только поведение дополнительных клавиш:

    xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete" };
        xkb_compat    { include "complete+ledscroll(group_lock)" };
        xkb_symbols   {
            include "pc+us+typo+ru:2+typo:2+inet(evdev)+group(ctrl_shift_toggle)+level3(ralt_switch)+ctrl(nocaps)+terminate(ctrl_alt_bksp)"
            key  <KP1> { [ KP_1 ] };
            key  <KP2> { [ KP_2 ] };
            key  <KP3> { [ KP_3 ] };
            key  <KP4> { [ KP_4 ] };
            key  <KP5> { [ KP_5 ] };
            key  <KP6> { [ KP_6 ] };
            key  <KP7> { [ KP_7 ] };
            key  <KP8> { [ KP_8 ] };
            key  <KP9> { [ KP_9 ] };
            key  <KP0> { [ KP_0 ] };
            key <KPDL> { [ KP_Decimal, KP_Decimal, KP_Decimal, KP_Decimal ], [ KP_Decimal, KP_Decimal, KP_Decimal, KP_Decimal ] };
        };
        xkb_geometry  { include "pc(pc105)" };
    };
    

    Как можно видеть, я добавляю типографскую раскладку (+typo+level3(ralt_switch)), делаю переключение групп по Ctrl-Shift(+group(ctrl_shift_toggle)) и заменяю Caps Lock на Ctrl (+ctrl(nocaps)). Для всех клавиш дополнительной клавиатуры перечисляю, что у них есть только цифровой код клавиши, а для KPDL (та самая с точкой) — указываю, что при любом состоянии модификаторов и выбранной группе она должна выдавать точку.

  2. Загрузим эту раскладку при старте сессии (я добавляю строку в файл .xsession):

    xkbcomp .Xkeymap $DISPLAY