xmodmap как переназначить ключи и отключить оригинальные?

885
Tomas

Я подумываю получить 60% клавиатуру и хочу попробовать поработать с этой раскладкой перед покупкой настоящей клавиатуры.

Я пытаюсь отобразить клавиши со стрелками на caps lock + ijkl и отключить реальные клавиши со стрелками. Я узнал, как переназначить его, но когда я пытаюсь отключить настоящие клавиши со стрелками, переназначенные клавиши ломаются. Вот рабочая карта:

keycode 66 = Mode_switch keycode 31 = i I Up keycode 44 = j J Left keycode 45 = k K Down keycode 46 = l L Right 

Чтобы отключить стрелку вверх я добавляю

keycode 111 = 

И как только я это сделаю, ijkl больше не будет работать как символы, а будет действовать как стрелка, даже не нажимая модификатор (caps lock). Как отключить клавиши со стрелками, не нарушая мое предыдущее отображение?

4
Работает ли он у вас, если вы отключите его вручную? через `$ xmodmap -e 'код клавиши 111 ='` tukan 4 года назад 0
Он работает так же, как с файлом конфигурации. Я могу либо отключить ключ, либо переназначить его, но не оба. Tomas 4 года назад 0
Хм, это странно. В любом случае, почему вы все равно пытаетесь отключить клавиши со стрелками? Если у вас будет 60% клавиатура, у вас их не будет. Если у вас их нет, вам не нужно их отключать, не правда ли? Просто введите рабочее отображение и все в порядке. tukan 4 года назад 0
Я нашел github xmodmap для таких клавиатур. Вы можете попробовать это. https://gist.github.com/jeffeb3/743507871082c9e1ca44 tukan 4 года назад 0
Я забыл, что у меня есть переназначение и продолжаю использовать клавиши со стрелками по привычке. Я хочу отключить клавиши со стрелками, чтобы напомнить себе, что переназначение существует, и я должен использовать его. Я проверил конфигурацию на Github, она не отключает какие-либо ключи, поэтому сомневаюсь, что это будет полезно. Tomas 4 года назад 0
Ах, я понял это сейчас. Да, GitHub существует для дальнейшего вдохновения, а не для решения проблемы. Я проверю исходный код xmodmap, если найду что-нибудь. tukan 4 года назад 0
не могли бы вы сделать мне свое отображение после того, как вы применили все? Через `xmodmap -pke | egrep -e '(вверх | вниз | влево | вправо)' ` tukan 4 года назад 0
https://pastebin.com/wQPiRVTQ Tomas 4 года назад 0
смотри мой ответ. В сопоставлениях кажется, что вы не удалили исходный код клавиши 111 =. tukan 4 года назад 0
Я думаю, что я понял это. Вы можете проверить это и дайте мне знать :). tukan 4 года назад 0

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

2
tukan

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

К ответу:

После изменения настроек мой xmodmapвыглядит так:

xmodmap: до 4 ключей на модификатор (коды клавиш в скобках):

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), Meta_L (0xcd) mod2 Num_Lock (0x4d) mod3 Mode_switch (0x42), Mode_switch (0xcb) mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce) mod5  

Расследование Mode_switchприводит нас к выводу, что Caps_Lockбыл успешно нанесен на карту:

[smalltalk@localhost ~]$ xmodmap -pke | egrep -e '(Mode_switch)' keycode 66 = Mode_switch NoSymbol Mode_switch keycode 203 = Mode_switch NoSymbol Mode_switch 

Теперь xmodmap - выдержка из страниц руководства:

 keycode NUMBER = KEYSYMNAME ... The list of keysyms is assigned to the indicated keycode (which may be specified in decimal, hex or octal and can be determined by running the xev program). Up to eight keysyms may be attached to a key, however the last four are not used in any major X server implementation. The first keysym is used when no modifier key is pressed in conjunction with this key, the second with Shift, the third when the Mode_switch key is used with this key and the fourth when both the Mode_switch and Shift keys are used. 

Следующая конфигурация работает, но вы должны удерживать Caps_Lock при использовании i, j, k, l (в точности так, как написано на страницах руководства):

Редактировать vim ~/.Xmodmap:

! make Capslock the "Mode_switch" key clear Lock  ! All Mod must be cleared clear Mod1 clear Mod2 clear Mod3 clear Mod4 clear Mod5  ! clearning current Caps_Lock assigment and assigning it new one keycode 66 = keycode 66 = Mode_switch  ! setting all the modification keys add Mod1 = Alt_L Alt_R Meta_L add Mod2 = Num_Lock add Mod3 = Mode_switch add Mod4 = Super_L Super_R Hyper_R  ! Clear must be done before configuring it keycode 31 = keycode 44 = keycode 45 = keycode 46 =  ! Configuration (first column normal type, second with shift and second with Mod_switch) keycode 31 = i I Up keycode 44 = j J Left keycode 45 = k K Down keycode 46 = l L Right  ! Clearing the arrow keys and some functional keys like home keycode 111 = keycode 113 = keycode 114 = keycode 116 = keycode 112 = keycode 117 = 

Теперь к большому вопросу:

Как заставить работать клавиши i, j, k, l при включенном Caps_Lock? Вам, вероятно, придется внести изменения xkb, которые я должен обдумать.

редактировать

Да, ты можешь. Я понял это.

Примечание: это относится ко всем клавиатурам, ко всем раскладкам, поэтому хорошо подходит для тестирования. Если вы хотите сделать это через xkbправильно, вы должны создать свой собственный макет и сделать сопоставление для group1 и group2 +.

Ниже приведен взлом, идеальный для тестирования вашей клавиатуры (и) (не забудьте сделать резервную копию ../basicфайла!):

Предупреждение это относится ко всем клавиатурам, ко всем вариантам.

Редактировать файл: sudo vim / usr / share / X11 / xkb / compat / basic

# Add Caps_Lock to virtual modifiers virtual_modifiers NumLock,AltGr,Caps_Lock;  # change FROM: interpret Mode_switch { useModMapMods= level1; virtualModifier= AltGr; action= SetGroup(group=+1); };  # TO: interpret Mode_switch { useModMapMods= level1; virtualModifier= Caps_Lock; action= LockGroup(group=+1); };  # change from group 2 = AltGr; TO: group 2 = Caps_Lock; 

Примечание. Если у вас несколько макетов, это может помешать им.

0
The Edge Of Rage

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

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

С помощью этой прошивки вы можете сопоставить любой ключ с любым действием, включая добавление множества слоев, где каждый ключ может делать разные вещи. Представьте, что вы нажимаете клавишу fn на ноутбуке, но это полностью настраиваемо. Вы можете выбрать, какой ключ активирует, какой слой и даже как. Например, вы можете включить / выключить слой, сохранить его активным, удерживая клавишу и т. Д. Таким образом, вы можете сделать Caps Lockэто Caps Lockпри нажатии и переключиться на другой слой (где ijklклавиши являются клавишами со стрелками), когда удерживаете нажатым.

Единственным недостатком является то, что переназначение требует, чтобы вы редактировали массивы в коде C, хотя на самом деле это довольно просто и не требует предварительных знаний в области программирования. Документация довольно обширна и объясняет все, что нужно, чтобы начать работу.

Существует 60% вариантов клавиатуры, но большинство из них - это наборы, которые вы должны собрать самостоятельно. Если у вас нет проблем с этим, проверьте платы GH60, Satan или XD60. Вы можете найти все это на Если вы не хотите собирать его самостоятельно, вы можете проверить клавиатуру Whitefox или посмотреть, можете ли вы найти что-то в магазине KBDFans, так как они предлагают услуги по сборке для большинства своих комплектов.

Как я уже упоминал в этом вопросе, я не уверен, смогу ли я жить без клавиш со стрелками, поэтому «[я] хочу попробовать поработать с этой раскладкой перед покупкой настоящей клавиатуры». Tomas 4 года назад 0