Когда пользователь нажимает клавишу на клавиатуре, клавиатура посылает операционной системе скан-код клавиши (действия)
Существует три уровня идентификации клавиши:
Скан код (scancode) - это низший уровень идентификации клавиши. Представляет из себя число, которое клавиатура посылает компьютеру.
Код клавиши (keycode) - это следующий уровень идентификации клавиши. Кейкод соответствует какой-то функции.
Символ клавиши (keysym) - это третий уровень идентификации клавиши. Он отвечает за символ. Он может зависеть от того, нажата ли клавиша Shift или была ли одновременно нажата какая-то другая клавиша-модификатор.
Посмотрим текущую таблицу сопоставления (маппинга) нажатия на клавишу (keycode) и действие, которое будет отправляться операционной системе.
xmodmap -pke > ~/.Xmodmap
cp ~/.Xmodmap ~/.Xmodmap.original
cat ~/.Xmodmap
Видим таблицу маппинга - где слева keycode, справа keysym
keycode (код клавиши) - это числовое значение, получаемое ядром при нажатии клавиши клавиатуры или мыши.
keysym (символ клавиши) - название символа который должен напечататься (а в некоторых случаях название действия. Возможные значения изложены на странице ключей.
keycode <x> = <1> <2> <3> <4> <5> <6> <7> <8>
\ \ \ \ \ \ \ \-> -
\ \ \ \ \ \ \---> Num_Lock + Mode_switch + key (возможно AltGr + Shift + key)
\ \ \ \ \ \------> AltGr + key
\ \ \ \ \---------> Num_Lock + key
\ \ \ \------------> Shift + Mode_switch + key
\ \ \---------------> Mode_switch + key
\ \------------------> Shift + key
\---------------------> key
Как это читать:
keycode <x> - номер клавиши на клавиатуре
<1> - символ который должен быть напечатан при нажатии на клавишу клавиатуры
<2> - символ который должен быть напечатан при нажатии на клавишу (если при этом нажата клавиша Shift)
<3> - символ который должен быть напечатан при нажатии на клавишу (если при этом нажата клавиша Mode_switch*)
<4> - символ который должен быть напечатан при нажатии на клавишу (если при этом нажата клавиша Mode_switch и клавиша Shift)
<5> - символ который должен быть напечатан при нажатии на клавишу (если при этом включен Num_Lock)
<6> - символ который должен быть напечатан при нажатии на клавишу (если при этом нажата клавиша AltGr*)
<7> - символ который должен быть напечатан при нажатии на клавишу (если при этом нажата клавиша AltGr и клавиша Shift)
<8> - неизвестное мне сочетание клавиш
*Mode_switch - это старое (до XKB) имя клавиши, которая вызывается AltGr во многих раскладках клавиатуры.
*AltGr - клавиша Alt справа от пробела (возможно сейчас уже данной клавиши нет на клавиатурах, вот пример:

В файле ~/.Xmodmap находим Super (видим такую строку):
keycode 133 = Super_L NoSymbol Super_L NoSymbol Super_L
Ага, это как раз то, что надо Super_L это Super (левый)
В файле ~/.Xmodmap находим Alt (видим такую строку):
keycode 64 = Alt_L Meta_L Alt_L Meta_L Alt_L Meta_L
Ага, это как раз то, что надо Alt_L это Alt (левый)
Меняем описания местами, т.е. теперь у нас получается так:
keycode 64 = Super_L NoSymbol Super_L NoSymbol Super_L
keycode 133 = Alt_L Meta_L Alt_L Meta_L Alt_L Meta_L
Применяем изменения:
xmodmap ~/.Xmodmap
Применяется где-то в течении одной минуты (зависает ось), но оказалось все работает не так ожидаемо, например сочетания клавиш не работало, возвращаю все назад:
xmodmap ~/.Xmodmap.original
Для ознакомления, рассмотрим более простой и быстрый способ, например при нажатии F2 чтобы происходило действие F1
xmodmap -e "keycode 68 = F1"
Кроме физических клавиш, есть еще и виртуальные клавиши - это даже не клавиши, а просто сопоставления, например нажимая Shift + keycode 38, должна напечататься буква A, нажатие клавиши A генерирует keycode 73, которому назначен keysym 0×61, которому в свою очередь назначен символ A в таблице ASCII. С этим я пока не разобрался, но меня keycode 73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7 F7 F7 XF86Switch_VT_7 F7 F7 F7 F7 XF86Switch_VT_7.
Комментарии
Выдрал сам не зная откуда, автор - сам проверял?
Где гугловский и мой любимый intitle:index of?