Значение масок кнопок клавиатуры xcb

Я пытаюсь понять, какие ключи обрабатываются:

  • XCB_MOD_MASK_1
  • XCB_MOD_MASK_2
  • XCB_MOD_MASK_3
  • XCB_MOD_MASK_4
  • XCB_MOD_MASK_5

в xcb для XCB_MOD_MASK_1 это похоже на Alt (я прав?), но для других кнопок я нигде не могу найти сопоставление (я пытался погуглить их перед публикацией, но безуспешно).

Итак, какие обычные ключи связаны с этими масками?


person Ivan    schedule 15.10.2013    source источник
comment
Не могли бы вы создать небольшую программу для захвата любого события, а затем попытаться нажать любой возможный модификатор (даже их комбинацию), чтобы увидеть, получится ли совпадение?   -  person Daniele Ricci    schedule 16.10.2013
comment
Обычно Mask1 — это Alt или Meta, Mask2 — это Num lock, Mask3 — это AltGr, Mask4 — это Win, а Mask5 — это Scroll lock, но это зависит от реализации X и/или модели клавиатуры.   -  person n. 1.8e9-where's-my-share m.    schedule 18.10.2013
comment
Спасибо, нм, если вы опубликуете свой комментарий в качестве ответа, я буду рад принять его :)   -  person Ivan    schedule 18.10.2013
comment
Согласен с Иваном. @н.м. если вы можете перейти к решению, я бы хотел проголосовать!   -  person Noitidart    schedule 01.05.2016
comment
Извините, я немного отвлекся :)   -  person n. 1.8e9-where's-my-share m.    schedule 01.05.2016
comment
Вау немного??? :D Только 3 года спустя!!! :) :) В любом случае я приму ваш ответ!   -  person Ivan    schedule 05.05.2016


Ответы (2)


Обычно Mask1 — это Alt или Meta, Mask2 — это Num lock, Mask3 — это AltGr, Mask4 — это Win, а Mask5 — это Scroll lock, но это зависит от реализации X и/или модели клавиатуры.

Источник: мой собственный компьютер с X11 и различные фрагменты кода, лежащие в сети. Не все из них последовательны, например. некоторые говорят, что Mod1 — это Alt, а Mod4 — это Meta.

Программы X11 обычно позволяют пользователям настраивать действия, соответствующие Mask1 ... Mask5, и заставляют их выбирать, какая клавиша устанавливает какую маску.

person n. 1.8e9-where's-my-share m.    schedule 01.05.2016

Фактически вы можете настроить сопоставление этих ключей (или любых других ключей) с помощью такой утилиты, как xmodmap. В системе X Window есть восемь модификаторов. 8 модификаторов

  1. shift
  2. lock
  3. control
  4. mod1
  5. mod2
  6. mod3
  7. mod4
  8. 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