Установил CompizConfig Settings Manager, разбираюсь.
Да, там есть раздел
Общие > Команды, в котором можно задавать обще-системные shortcut-ы. Пытался имитировать нажатие shift + delete с помощью xvkbd, не вышло: не во всех программах работало.
Поэтому решил всё-таки отредактировать файл keypad. Мне помогло следующее:
1. Открываем файл keypad в редакторе gedit:
sudo gedit /usr/share/X11/xkb/symbols/keypadФайл начинается так:
partial hidden keypad_keys
xkb_symbols "overlay" {
include "keypad(overlay1)"
};
partial hidden keypad_keys
xkb_symbols "overlay1" {
key <KP7> { [ KP_Home ], overlay1=<KO7> };
key <KP8> { [ KP_Up ], overlay1=<KO8> };
key <KP9> { [ KP_Prior ], overlay1=<KO9> };
key <KP4> { [ KP_Left ], overlay1=<KO4> };
key <KP5> { [ KP_Begin ], overlay1=<KO5> };
key <KP6> { [ KP_Right ], overlay1=<KO6> };
key <KP1> { [ KP_End ], overlay1=<KO1> };
key <KP2> { [ KP_Down ], overlay1=<KO2> };
key <KP3> { [ KP_Next ], overlay1=<KO3> };
key <KP0> { [ KP_Insert ], overlay1=<KO0> };
key <KPDL> { [ KP_Delete ], overlay1=<KODL> };
key <KO7> { [ KP_7 ] };
key <KO8> { [ KP_8 ] };
key <KO9> { [ KP_9 ] };
key <KO4> { [ KP_4 ] };
key <KO5> { [ KP_5 ] };
key <KO6> { [ KP_6 ] };
key <KO1> { [ KP_1 ] };
key <KO2> { [ KP_2 ] };
key <KO3> { [ KP_3 ] };
key <KO0> { [ KP_0 ] };
key <KODL> { [ KP_Decimal ] };
};
partial hidden keypad_keys
xkb_symbols "overlay2" {
key <KP7> { [ KP_Home ], overlay2=<KO7> };
key <KP8> { [ KP_Up ], overlay2=<KO8> };
key <KP9> { [ KP_Prior ], overlay2=<KO9> };
key <KP4> { [ KP_Left ], overlay2=<KO4> };
key <KP5> { [ KP_Begin ], overlay2=<KO5> };
key <KP6> { [ KP_Right ], overlay2=<KO6> };
key <KP1> { [ KP_End ], overlay2=<KO1> };
key <KP2> { [ KP_Down ], overlay2=<KO2> };
key <KP3> { [ KP_Next ], overlay2=<KO3> };
key <KP0> { [ KP_Insert ], overlay2=<KO0> };
key <KPDL> { [ KP_Delete ], overlay2=<KODL> };
key <KO7> { [ KP_7 ] };
key <KO8> { [ KP_8 ] };
key <KO9> { [ KP_9 ] };
key <KO4> { [ KP_4 ] };
key <KO5> { [ KP_5 ] };
key <KO6> { [ KP_6 ] };
key <KO1> { [ KP_1 ] };
key <KO2> { [ KP_2 ] };
key <KO3> { [ KP_3 ] };
key <KO0> { [ KP_0 ] };
key <KODL> { [ KP_Decimal ] };
};
partial hidden keypad_keys
xkb_symbols "operators" {
// Puts some commands to control the X server on
// the fifth level of the keypad's operator keys.
key <KPDV> {
type="CTRL+ALT", // Ungrab cancels server/keyboard/pointer grabs
symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ]
};
key <KPMU> {
type="CTRL+ALT", // ClsGrb kills whichever client has a grab in effect
symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ]
};
key <KPSU> {
type="CTRL+ALT", // -VMode switches to the previous video mode
symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ]
};
key <KPAD> {
type="CTRL+ALT", // +VMode switches to the next video mode
symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ]
};
};
default partial hidden keypad_keys
xkb_symbols "x11" {
include "keypad(operators)"
key <KP7> { [ KP_Home, KP_7 ] };
key <KP8> { [ KP_Up, KP_8 ] };
key <KP9> { [ KP_Prior, KP_9 ] };
key <KP4> { [ KP_Left, KP_4 ] };
key <KP5> { [ KP_Begin, KP_5 ] };
key <KP6> { [ KP_Right, KP_6 ] };
key <KP1> { [ KP_End, KP_1 ] };
key <KP2> { [ KP_Down, KP_2 ] };
key <KP3> { [ KP_Next, KP_3 ] };
key <KPEN> { [ KP_Enter ] };
key <KPEQ> { [ KP_Equal ] };
key <KP0> { [ KP_Insert, KP_0 ] };
key <KPDL> { [ KP_Delete, KP_Decimal ] };
key <KPPT> { [ KP_Decimal, KP_Decimal ] };
};
В трёх местах меняем symbol-ы:
KP_Home → Home
KP_Up → Up
KP_Prior → Prior
KP_Left → Left
KP_Right → Right
KP_End→ End
KP_Down → Down
KP_Next → Next
KP_Insert → Insert
KP_Delete → Delete
Другие symbol-ы (KP_Begin, KP_Decimal, ...) не трогаем.
2. xkb-конфигурация компилируется в .xkm-файлы, поэтому стираем их:
sudo rm /var/lib/xkb/*.xkm3. Перезапускаем систему. При этом компилируются новые .xkm-файлы.
Работает так как надо, почти во всех редакторах. Только почему-то в gedit, когда русская раскладка клавиатуры, shift + keypad_delete не вырезает текст (но при этом ctrl + keypad_insert копирует текст, shift + keypad_insert вставляет текст).
Не подскажите, куда лучше написать разработчикам Ubuntu, чтобы исправили нелогичность ввода из-коробки? (num lock выключен, но:
shift + left/right выделяют текст, shift + keypad_left/keypad_right -- нет;
shift + delete вырезает текст, shift + keypad_delete -- нет;
и т. д.) По-английски более/менее умею писать.