Почему мои привязки xmodmap с использованием AltGr работают только с некоторыми клавишами?

Похоже, если вы выполняете элемент управления плюс a, тогда количество окон дважды должно будет служить обходным решением.

12
11.08.2016, 00:08
3 ответа

Использование xmodmap для настройки индивидуальных связок ключей

Пришло время записать результаты моих собственных исследований.

Я думал, что, должно быть, что-то упустил в xmodmap, и что он просто не очень хорошо документирован, и люди путаются. Но оказалось, что дизайн X.Org в отношении XKB и xmodmap просто глуп.

Epic fail: xmodmap

Вы можете использовать xmodmap для переопределения существующих отображений до тех пор, пока эти отображения действительно существуют в вашей оригинальной раскладке клавиатуры. В случае, описанном в вопросе, вы не можете расширить поведение каких-либо клавиш для использования AltGr. Вы можете только изменить AltGr keysyms для кодов клавиш, которые уже используют AltGr.

См. также: http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

Решение проблемы: Mode_switch

Это обходное решение описано в ответе @Ned64. Вы можете переназначить AltGr с ISO_Level3_Shift на Mode_switch.

Я успешно использовал следующую командную строку для переназначения AltGr.

xmodmap -e 'keycode 108 = Mode_switch'

Недостатком является то, что это нарушит текущую раскладку клавиатуры, но вы можете воссоздать все отображения по одному, используя xmodmap, как уже упоминал @Ned64.

Обходной путь: Модифицированная раскладка клавиатуры

Я использую us(cz_sk_de) в качестве раскладки клавиатуры и попытался изменить ее, добавив конфигурацию для клавиш, которые я хотел расширить.

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };

(В разделе xkb_symbols "cz_sk_de" из /usr/share/X11/xkb/symbols/us)

Просто переустановите раскладку клавиатуры, чтобы использовать модифицированную версию.

setxkbmap 'us(cz_sk_de)'

Теперь вы можете (1) набирать чешские и английские кавычки и многоточия, используя комбинации , , . , Shift и AltGr и/или (2) переназначить эти клавиши с помощью xmodmap теперь, когда они определены.

Основным недостатком является то, что setxkbmap, похоже, не поддерживает произвольное расположение раскладок клавиатуры, и поэтому вам нужно писать в конфигурацию системы, а не в домашний каталог.

Заключение

Похоже, это пример чрезмерной продуманности и плохого дизайна X.Org, когда даже такая тривиальная вещь, как отображение кода клавиши и комбинации модификаторов в символ, оказывается проблемой. Похоже, инструменты не предоставляют разумного способа просто изменить индивидуальное сопоставление ключей в пользовательской конфигурации без каких-либо побочных эффектов.

7
20.08.2021, 12:17

Шаг первый: Сделайте AltGr пригодным для использования

Я обнаружил, что ключи, измененные AltGr, работают в моей системе, только если я также переназначаю AltGr- Клавиша Mode_switch , например:

xmodmap -e "keycode 108 = Mode_switch Mode_switch Mode_switch Mode_switch"

Если у вас другая клавиатура, вам может потребоваться заменить 108 своим кодом, проверьте, набрав

xmodmap -pke | grep Alt_R

, затем используйте этот номер. (В известных мне системах ключ обычно называется Alt_R .)

В качестве альтернативы, это также может работать, если Alt_R еще не назначен на что-то еще:

xmodmap -e "keysym Alt_R = Mode_switch Mode_switch Mode_switch Mode_switch"

Ваш модификатор AltGr теперь будет обслуживать позицию 3 ( с Shift: 4) в вашем списке модификаторов.

Шаг второй: Назначьте нужные клавиши

Вы можете назначить AltGr-варианты для любой клавиши вашей клавиатуры по вашему желанию. Если у вас есть другие ключи, которые сейчас не соответствуют желаемому коду, вам необходимо переназначить их, как и другие ваши ключи (те, которые вы тестировали).

Шаг третий: Преобразуйте это в сценарий.

Теперь просто возьмите свои команды xmodmap и запишите все (но только) изменения клавиатуры по умолчанию в файл - это быстрее, чем загрузка полной раскладки клавиатуры. . Запускайте этот сценарий один раз после каждого входа в систему и всякий раз, когда раскладка клавиатуры сбрасывается каким-либо процессом.

Я много экспериментировал с этим на протяжении многих лет под Solaris, IRIX и Linux, и, насколько мне известно, это единственное решение, позволяющее заставить AltGr работать - и оно хорошо работало для меня более 20 лет.

5
20.08.2021, 12:17

Судя по всему, xmodmap не читает AltGR по умолчанию, как следует, он может быть ограничен определенными раскладками клавиатуры, возможно, это все не -американские раскладки, в любом случае, реальная проблема заключается в том, что пока вы можете заменить свою клавиатуру раскладка, некоторые люди могут не захотеть этого делать, так как им нужно использовать специальные символы в раскладке, к которой они привыкли (, например, скандинавские раскладки клавиатуры, в которых есть такие символы, как ðþæöáúíóåů и т. д. ), которые было бы сложно настроить. для других раскладок клавиатуры.

Вы можете бежать

xmodmap -e "keycode 108 = Mode_switch"

Чтобы повторно привязать AltGR к чему-то, с чем xmodmap может работать, и действительно, 3-е назначение комбинации клавиш будет выведено, когда вы сейчас нажмете AltGR, однако это полностью нарушит исходную раскладку клавиатуры, поскольку никакие сочетания клавиш AltGR больше не будут работать с AltGR. ключ.

Я нашел два обходных пути, которые не нарушают мою существующую раскладку клавиатуры и не требуют переключения раскладок . Один из них — привязать переключатель режима _к другой клавише.

Идеальной клавишей для этого является Super _R, которая находится рядом с AltGR, ее код — 134.Однако они есть не на всех клавиатурах и в моем случае на ноутбуке у меня их тоже нет, поэтому я решил привязать его к последней оставшейся клавише, которой практически не пользуюсь, Right Control.

xmodmap -e "keycode 105 = Mode_switch"

У меня американская физическая раскладка клавиатуры, но конфигурация европейской раскладки и клавиша меньше/больше/черная черта (, также известная как ISO _Обратная косая черта, хотя она не распознается самим xmodmap ), обычно рядом с Z на таких клавиатурах отсутствует. Я привязал это к Menu (135 ), но это может служить альтернативой R _Ctrl и Super _R

Я полагаю, это грязное исправление.

На обдумывание второго обходного путиушло немного больше времени. Использование альтернативы sxhkd (xbindkeys)

Если добавить это в~/.config/sxhkd/sxhkdrc:

~ISO_Level3_Shift
    xdotool key Mode_switch

Ваш AltGR будет работать как обычно, но при его нажатии переключатель режима _переключается (вроде Caps Lock, но для переключателя режима _)и любых ключей xmodmap, которые его используют, будет заблокирован в режиме AltGR, пока вы снова не нажмете AltGR, чтобы отключить его. Должно быть несложно написать скрипт для автоматического отключения при отпускании клавиши, но мои попытки сделать это были, по меньшей мере, довольно глючными.

1
20.08.2021, 12:17

Теги

Похожие вопросы