Повторно отобразите ключ к Ctrl и заставьте его вести себя как Ctrl во время редактирования текста

Я купил необычно выглядящую механическую клавиатуру в Корее. В целом это работает действительно хорошо за исключением одной вещи - даже при том, что это имеет клавиши Alt и клавиши Ctrl на ее правой стороне, эти ключи не генерируют те же коды как "обычная" клавиатура.

Короче говоря, Правильный Высокий звук является ключом Хангыля (изменения между латинскими и корейскими буквами), и Ctrl является Hanja (преобразовывает между Хангылем и "старыми" корейскими символами). Я хотел использовать несколько разметок - корейский язык и мое локальное одно (польский язык) и сохранить лучший из обоих миров - который означает заставлять Правильный Высокий звук испустить код клавиши для Высокого звука при вводе польского языка и для Хангыля при вводе на корейском языке.

Корейский язык работал из поля (так как коды клавиши корректны там), но польские необходимые тонкие настройки. Я изменил расположение (/usr/share/X11/xkb/symbols/pl) путем добавления следующих строк в активном xkb_symbols раздел:

key <HNGL>  { [ ISO_Level3_Shift ] };
key <HJCV>  { [ Control_R ] };

И я прокомментировал строки, связанные с HNGL и HJCV в "inet" расположении, так как они перезаписывали мои изменения.

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

Я выполнился xset -r 131 для отключения ключевого повторения для этого ключа Ctrl/Hanja, но это все еще не работает как реальный Ctrl

Вот xev вывод повторно отображенных Hanja:

KeyPress event, serial 34, synthetic NO, window 0x1000001,
root 0x13f, subw 0x0, time 49086462, (88,89), root:(3928,141),
state 0x10, keycode 131 (keysym 0xffe4, Control_R), same_screen YES,
XKeysymToKeycode returns keycode: 105
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

И вот обычный Ctrl (с другой клавиатуры):

KeyPress event, serial 39, synthetic NO, window 0x1000001,
root 0x13f, subw 0x0, time 49144922, (616,377), root:(4456,429),
state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False

Есть ли что-нибудь, что я могу изменить, чтобы заставить мою систему рассматривать тот ключ как полноценный Ctrl?

5
задан 15 May 2018 в 08:00

1 ответ

Присвоение ключа к другому уникально, когда ключ является модификатором. Этот ответ имеет хорошее объяснение:

Действие, когда это - действие модификатора, такое как это, изменяет текущее состояние модификатора, которое (просто помещенный) является рядом флагов, зарегистрированных в операционной системе, которые записывают, какие модификаторы в настоящее время "включены". [Эта запись] влияет на то, на какое действие дальнейшие нажатия клавиш отображаются.

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

Для демонстрации работать xmodmap. Обратите внимание, что существует два ключа по умолчанию (Control_L и Control_R) отображены на модификаторе управления. Если Вы работаете xmodmap -e 'keycode 131 = Control_L' и затем xmodmap, модификатор управления должен все еще иметь два ключа, таким образом, Ваш ключ не распознается как модификатор.

Отображаться как модификатор:

Очистите модифицирующую клавишу control

xmodmap -e 'clear control'

Добавьте код клавиши для ключа Hanja

xmodmap -e 'keycode 131 = Control_L'

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

xmodmap -e 'add control = Control_L'
xmodmap -e 'add control = Control_R'

Теперь, если необходимо было выполнить xmodmap снова, Вы заметите, что новый ключ был добавлен для управления модификатором, и это должно работать правильно теперь.

Вот ссылка на официальную Дугу, инструкции Linux относительно повторно присваивающихся модификаторов к включают Вашу клавиатуру.

править:

для персистентных изменений добавьте к /usr/share/X11/xkb/symbols/pl:

key <HJCV> { [ Control_L ] };

modifier_map Control { Control_L, Control_R, <HJCV> };
2
ответ дан 23 November 2019 в 10:34

Другие вопросы по тегам:

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