xkb установить клавиатуру 3 уровня на Ctrl + Alt

1683
Vlad

Название говорит само за себя: мне интересно подражать поведению Windows, где Left Ctrl+ Left Altдействует как выбор 3-го уровня. Это сравнительно важно для меня, потому что, как программист, на моей раскладке клавиатуры, важные символы, такие как {, [, ]или }доступны только нажатие Right Alt+ Key, что крайне неудобно, используя только одну руку. На данный момент я использую обе Altклавиши в качестве выбора уровня 3, но это имеет некоторые нежелательные последствия, так как я больше не могу вводить некоторые сочетания клавиш (например, Home в Firefox).

Я нахожусь на openSuse 13.1, используя XFCE в качестве рабочего стола. Этот вопрос уже задавался пару раз, но, к сожалению, ни на один из них не было дано ответа, и документации по xkb довольно мало.

7
Вы уже нашли решение для этого? Я был бы очень заинтересован в этом. Dave 9 лет назад 0
К сожалению нет. Vlad 8 лет назад 0
Возможный дубликат [Использование Ctrl + Alt для замены функции 3-го уровня AltGr на xorg] (http://superuser.com/questions/384334/using-both-ctrlalt-to-replace-altgr-3rd-level-function-on -xorg) Burgi 8 лет назад 1
Как я до сих пор вижу вопросы для этого на нескольких форумах. Для меня это решение (http://unix.stackexchange.com/questions/157834/how-to-bind-altgr-to-ctrl-alt) сработало. Dave 7 лет назад 0

1 ответ на вопрос

0
aplaice

Следующее решение является варварским, но оно работает (при условии, что вы будете удовлетворены защелкой уровня 3 вместо сдвига уровня 3) - разница в том, что при последней все клавиши должны нажиматься одновременно, а при первой нажмите LeftCtrl+ LeftAlt, отпустите это и только затем нажмите клавишу, которая будет сдвинута) и не требует рута.

setxkbmap -option grp:lctrl_lalt_toggle  xmodmap -e 'keycode 37 = Control_L ISO_Level3_Latch' xmodmap -e 'keycode 64 = Alt_L ISO_Level3_Latch' 

Объяснение того, как это работает:

Параметр xkb grp: lctrl_lalt_toggle позволяет LeftCtrlперейти LeftAltна уровень 2 и наоборот (см /usr/share/X11/xkb/symbols/group. :) . Это также приводит к сдвигу level2 LeftCtrlи LeftAltстановится ISO_Next_Group, что нежелательно, поскольку мы хотим, чтобы оно было ISO_Level3_Latch, поэтому мы используем xmodmap для изменения level2 на ISO_Level3_Latch для обоих LeftCtrlи LeftAlt(сохраняя level1 как Control_L и Alt_L). Коды клавиш (37 и 64) можно найти, проверив вывод xmodmap -pkeили используя xev.

Если бы мы применили только переопределения xmodmap (без использования setxkbmapfirst), то ключ, отвечающий за сдвиг level2, был бы Shift, как и почти для всех ключей, так что Shift+ LeftCtrlи Shift+ LeftAlt(но не LeftCtrl+ LeftAlt) стали бы защелками Level3.

Почему мы должны использовать защелку уровня 3, а не сдвиг уровня 3?

Если бы вы использовали ISO_Level3_Shift, а не ISO_Level3_Latch, вы должны были бы одновременно нажать LeftCtrl+ LeftAlt+ YourDesiredKey, чтобы произошел сдвиг уровня 3. К сожалению, LeftCtrlи LeftAltдо сих пор остаются модификаторами, поэтому, кроме корректного смещения YourDesiredKey, он также будет «изменен» одним из Alt или Ctrl (в зависимости от того, что вы нажали первым). С защелкой у вас нет этой проблемы.

Я попробовал это, но для меня ничего не случилось. Я все еще не могу использовать lctrl + lalt в качестве средства выбора третьего уровня. У вас есть подсказки о том, как это отладить? В любом случае, это здорово, что люди все еще отвечают и работают над этим так долго после того, как вопрос был задан. Dave 7 лет назад 0
Чтобы проверить, правильно ли setxkbmap устанавливает соответствующую опцию, используйте: `setxkmap -print` и проверьте, содержит ли строка` xkb_symbols` что-то вроде `+ group (lctrl_lalt_toggle)`. aplaice 7 лет назад 0
Вы можете использовать `xmodmap -pke` для печати вашей текущей раскладки клавиатуры, и вы можете сделать это как до, так и после изменений, чтобы убедиться, что они действительно применяются правильно. Наконец, `xev` скажет вам, какие коды клавиш отправляются, когда вы нажимаете данную клавишу (или комбинацию клавиш) - третья строка для данного нажатия клавиш наиболее важна. Когда вы применили изменения (`setxkbmap -option ...` и два хака xmodmap) и нажали Ctrl + Alt через xev, вывод должен содержать ISO_Level3_Latch. aplaice 7 лет назад 0
Кроме того, вам нужно убедиться, что коды клавиш для Ctrl и Alt на самом деле равны 37 и 64 соответственно (используйте `xev` или` xmodmap -pke`, как описано выше) и что вы находитесь на X11, а не Wayland (поскольку Wayland не использует Xmodmap). aplaice 7 лет назад 0