Фактически вы можете настроить сопоставление этих ключей (или любых других ключей) с помощью такой утилиты, как xmodmap
. В системе X Window есть восемь модификаторов. 8 модификаторов
shift
lock
control
mod1
mod2
mod3
mod4
mod5
Чтобы увидеть, какие клавиши в настоящее время сопоставлены с этими модификаторами, вы можете запустить xmodmap -pm
, который напечатает карту модификаторов. Например. для меня выход
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
Например, Alt
генерирует mod1
.
Теперь, чтобы изменить mod1
через mod5
на xmodmap
, откройте ~/.Xmodmap
и напишите что-то вроде:
clear mod1
clear mod2
clear mod3
clear mod4
clear mod5
add mod1 = Alt_L Alt_R Meta_L
add mod2 = Num_Lock
add mod3 = ISO_Level3_Shift
add mod4 = Super_L Super_R Super_L Hyper_L
add mod5 = ISO_Level5_Shift
Затем запустите xmodmap ~/.Xmodmap
.
И на данный момент, например, ISO_Level3_Shift
дает вам mod3
. Как вы можете на самом деле получить клавишу с клавиатуры для генерации кода клавиши, соответствующего ISO_Level3_Shift
, — еще одна проблема.
Например. чтобы получить ключевой код 100
для генерации ISO_Level3_Shift
(теперь mod3
), добавьте следующее в файл ~/.Xmodmap
и запустите xmodmap ~/.Xmodmap
.
keycode 100 = ISO_Level3_Shift
Вы можете слышать, что xmodmap
устарел, и что вам следует возиться с конфигурационными файлами XKB и прочим, но использование XKB намного, намного, намного хуже.
В протоколе X 8 модификаторов (shift
,..., mod1
,..., mod5
) имеют связанную с ними битовую маску. Это битовая маска, которую XCB реализует с помощью перечисления C, и ее точные значения таковы:
enum xcb_mod_mask_t{
XCB_MOD_MASK_SHIFT = 1<<0,
XCB_MOD_MASK_LOCK = 1<<1,
XCB_MOD_MASK_CONTROL = 1<<2,
XCB_MOD_MASK_1 = 1<<3,
XCB_MOD_MASK_2 = 1<<4,
XCB_MOD_MASK_3 = 1<<5,
XCB_MOD_MASK_4 = 1<<6,
XCB_MOD_MASK_5 = 1<<7,
XCB_MOD_MASK_ANY = 1<<15,
};
Эти значения не являются выбором XCB, но они предписаны спецификацией протокола X, и вы можете использовать их при общении с сервером X через протокол X. Например. когда X-сервер отправляет вам событие XCB_KEY_PRESS
, это событие представляет собой 32-байтовую структуру, а одно из его полей представляет собой битовую маску, где биты устанавливаются в соответствии с модификаторами, которые были нажаты во время этого события нажатия клавиши. Например. если установлен 3-й бит, это означает, что установлено значение XCB_MOD_MASK_CONTROL
, что означает, что модификатор Control
был отключен.
person
étale-cohomology
schedule
23.05.2018