Я купил причудливую механическую клавиатуру в Корее. В общем, он отлично работает, за исключением одного - даже если у него есть клавиши Alt и Ctrl на правой стороне, эти клавиши не генерируют те же коды, что и «обычная» клавиатура.
Короткий рассказ , Right Alt - это клавиша Hangul (меняется между латинскими и корейскими буквами), а Ctrl - Hanja (преобразует между хангульскими и «старыми» корейскими символами). Я хотел использовать несколько макетов - корейский и мой местный (польский) и сохранить лучшее из обоих миров - это означает, что Right Ctrl испускает код клавиатуры для Alt, набирая польский и для Hangul при вводе на корейском языке .
Корейский работал из коробки (поскольку коды клавиш верны), но польские необходимые настройки. Я изменил макет (/usr/share/X11/xkb/symbols/pl), добавив следующие строки в активную секцию xkb_symbols:
key <HNGL> { [ ISO_Level3_Shift ] };
key <HJCV> { [ Control_R ] };
И я прокомментировал строки, связанные с HNGL и HJCV в «inet», так как они переписывали мои изменения.
После этих изменений я получил Ctrl , работая отлично, но по-прежнему возникла проблема с неправильной работой клавиши Ctrl. В целом это работает, но при редактировании текста я должен иметь возможность, например, удалите одно слово, используя комбинацию Alt + Backspace, и я не могу этого сделать.
Я выполнил xset -r 131, чтобы отключить повтор ключа для этого ключа Ctrl / Hanja, но он по-прежнему не работает, как настоящий Ctrl
Вот вывод xev remapped 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?
Назначение ключа другому уникально, когда ключ является модификатором. Этот ответ имеет хорошее объяснение:
Действие, когда оно является действием модификатора, таким как это, изменяет текущее состояние модификатора, которое (просто put) представляет собой набор флагов, записанных в операционной системе, которые записывают какие модификаторы в настоящее время «включены». [Эта запись] влияет на то, к какому действию прилагаются дальнейшие нажатия клавиш.Итак, когда вы пытаетесь сопоставить свой ключ, он отображается как обычный ключ и теряет информацию, которая указывает, как она ведет себя при нажатии нескольких клавиш.
Чтобы продемонстрировать, запустите 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, вы заметите, что новый ключ был добавлен для элемента управления модификатором, и он должен работать правильно.
answer является ссылкой на официальные инструкции Arch Linux по переназначению модификаторов клавишами на вашей клавиатуре.
изменить:
для постоянных изменений, добавить к /usr/share/X11/xkb/symbols/pl:
key <HJCV> { [ Control_L ] };
modifier_map Control { Control_L, Control_R, <HJCV> };
Назначение ключа другому уникально, когда ключ является модификатором. Этот ответ имеет хорошее объяснение:
Действие, когда оно является действием модификатора, таким как это, изменяет текущее состояние модификатора, которое (просто put) представляет собой набор флагов, записанных в операционной системе, которые записывают какие модификаторы в настоящее время «включены». [Эта запись] влияет на то, к какому действию прилагаются дальнейшие нажатия клавиш.Итак, когда вы пытаетесь сопоставить свой ключ, он отображается как обычный ключ и теряет информацию, которая указывает, как она ведет себя при нажатии нескольких клавиш.
Чтобы продемонстрировать, запустите 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, вы заметите, что новый ключ был добавлен для элемента управления модификатором, и он должен работать правильно.
answer является ссылкой на официальные инструкции Arch Linux по переназначению модификаторов клавишами на вашей клавиатуре.
изменить:
для постоянных изменений, добавить к /usr/share/X11/xkb/symbols/pl:
key <HJCV> { [ Control_L ] };
modifier_map Control { Control_L, Control_R, <HJCV> };