LINUX.ORG.RU

xmodmap: не назначить mod4 на Meta

 , ,


0

1

Добрых суток, товарищи.

Делаю я так:

$ xmodmap
xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3
mod4        Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

$ xmodmap -e 'clear mod4'
$ xmodmap -e 'keycode 135 = Meta_R' # это клавиша Menu, но это не принциапиально
$ xmodmap -e 'add mod4 = Meta_R'
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

Вместе с этим то же самое, но с Super или Hyper вместо Meta дает рабочий результат:

$ xmodmap -e 'clear mod4'
$ xmodmap -e 'keycode 135 = Super_R'
$ xmodmap -e 'add mod4 = Super_R'

Поясните, пожалуйста, в чем тут собака зарыта? Я всегда думал, эти Meta_R / Super_R никакого скрытого смысла не несут, что это просто переменные. Отчего разница?

Debian GNU/Linux Wheezy. x11-xserver-utils версии 7.7~3.

★★★★★

Ответ на: комментарий от Gotf

Да, добавляется и начитает работать как Альты. Т. е. нельзя назначать левую и правую одноименные клавиши на разные модификаторы?

Забавно — пытаюсь убрать Meta_L из mod1 — вместе с ней удаляется левый Альт:

$ xmodmap
xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

$ xmodmap -e 'remove mod1 = Meta_L'
$ xmodmap
xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_R (0x6c)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Ладно, добавлю его обратно:

$ xmodmap -e 'add mod1 = Alt_L'
$ xmodmap
xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Alt_L (0xcc)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

и снова попробую:

$ xmodmap -e 'keycode 135 = Meta_R'
$ xmodmap -e 'clear mod4'
$ xmodmap -e 'add mod4 = Meta_R'
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

Увы и ах, но то же самое.

Zmicier ★★★★★
() автор топика
Ответ на: комментарий от Zmicier

Т. е. нельзя назначать левую и правую одноименные клавиши на разные модификаторы?

Вряд ли. Хочу дать очень ценную рекомендацию: никогда не используй xmodmap. Оно пересекается с XKB, что создаёт кучу сложно диагностируемых проблем. Соответственно я предлагаю использовать XKB, либо udev.

Gotf ★★★
()
Ответ на: комментарий от Gotf

я предлагаю использовать XKB, либо udev.

Надо попробовать. А ссылок на инструкции не подкинете?

Zmicier ★★★★★
() автор топика
Ответ на: комментарий от Zmicier

По xkb: man 7 xkeyboard-configuration, файлы в /usr/share/X11/xkb/. По udev: файлы в /lib/udev/keymaps/, утилита /lib/udev/keymap. Преимущество последнего варианта в том, что такой ремап работает на уровне ядра, то есть исключаются проблемы с особо умными программами, которые читают коды вместо символов.

Gotf ★★★
()
Ответ на: комментарий от Gotf

xkeyboard-configuration

Посмотрел этот ман, проглядел файлы в /usr/share/X11/xkb/, погуглил еще, но так и не нашел возможности при помощи этого инструментария назначить, например, «мету» на клавишу «меню».

Там много всяких интересных предустановок:

$ setxkbmap -option altwin:meta_win # мета на вин-клавишах
$ setxkbmap -option altwin:alt_super_win # альт на правый вин, супер на меню

Но как задавать layout по собственному усмотрению, я так и не понял.

Zmicier ★★★★★
() автор топика
Ответ на: комментарий от Zmicier

Но как задавать layout по собственному усмотрению, я так и не понял.

Написанием своих правил. Собственно, можешь взять за основу файл altwin и остальное найти в гугле, конкретно для твоего случая там никакой ракетной науки нет.

Gotf ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.