Существует опция указать ключ, который будет использоваться для доступа к 5-му уровню на клавиатуре в gnome-keyboard-properties
("Клавиатура" под Аппаратными средствами в Параметрах настройки системы):
Но если я установил 5-й уровень на AltGr и третий уровень для Исправления Ctrl и если я установил ключевые 54 следующим образом:
xmodmap -e "keycode 54 = 1 2 3 4 5 6 7 8"
Я получаю следующие результаты нажатия различных изменений:
keycode 54 = 1
keycode 54 + right ctrl = 5
keycode 54 + right ctrl + shift = 6
keycode 54 + shift = 2
keycode 54 + AltGr = 1
keycode 54 + AltGr + shift = 2
Таким образом, что делает 5-й модификатор уровня?
Как я настраиваю его так, чтобы я мог получить 5 или шесть различных символов из единственного ключа (измененный Сдвигом, Высокий звук Gr и Правильный Ctrl, например)?
Ну, после небольшого копания:
(1) Ключ для выбора 5-го уровня делает некоторые странные вещи (относительно некоторых французских раскладок), которые не имеют отношения к тому, что я хотел сделать. В основном это устанавливает, какой ключ будет действовать как ISO_Level5_Shift. ISO_Level5_Shift используется в некоторых непонятных макетах. Этот ответ основан на количестве результатов, которые Google выдает при поиске «ISO_Level5_Shift», и на этих ссылках .
(2) Его нельзя использовать для получения 6 символов из одного физического ключа. Один из способов добиться этого - использовать файл .xmodmap, расположенный в каталоге $ HOME.
Во-первых, команда
xmodmap -pm
дает то, какие ключевые символы действуют как различные модификаторы. В моей системе это было примерно так:
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x9)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c)
mod3 необходимо настроить, чтобы использовать 6 символов с одной клавишей. Это должно быть помещено в файл .xmodmap:
clear mod3
clear mod5
keycode 94 = Mode_switch
add mod3 = Mode_switch
add mod5 = ISO_Level3_Shift
Тогда xmodmap -pm дал мне:
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x9)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3 Mode_switch (0x5e), Mode_switch (0xcb)
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), ISO_Level3_Shift (0x6c)
Где keycode 94 - это ключ, который я выбрал для работы в качестве mod3. Коды клавиш различных физических клавиш можно найти с помощью инструмента командной строки xev (просто запустите его и нажмите различные клавиши, чтобы отобразились коды клавиш).
Затем, если я помещаю в файл .xmodmap
keycode 54 = 1 2 3 4 5 6
или запускаю
xmodmap -e "keycode 54 = 1 2 3 4 5 6"
, я получаю шесть различных символов из одной клавиши с использованием altgr, shift и keycode 94 ( это бесполезная клавиша рядом со смещением влево на моей физической раскладке).
ОБНОВЛЕНИЕ: если вам нужно всего пять символов, удобно настроить его следующим образом:
keycode 54 = 1 2 3 3 5 6
Иногда мне случается, что я получаю 4 вместо 3 в противном случае.
«1. Так что же делает модификатор 5-го уровня? »
Он выбирает пятый уровень. Модификатор 2-го уровня (просто обычная смена) выбирает второй уровень, а 3-й уровень выбирает третий уровень.
Причина, по которой модификатор 5-го уровня выбирает пятый уровень вместо четвертого уровня (сразу после модификатора 3-го уровня), заключается в том, что эти три модификатора могут комбинироваться различными способами для выбора восьми различных уровней (это включает в себя не использование какого-либо из модификаторы, которые просто нажимают клавишу без таких модификаторов). Так как 2 ↑ 3 = 8, существует восемь комбинаций. Для первых двух модификаторов есть четыре комбинации:
Добавление третьего модификатора (5-й уровень) добавляет еще четыре уровня . [тысяча сто пятьдесят пять] [Тысяча сто пятьдесят шесть] «2. Как мне настроить его так, чтобы я мог получить 5 или шесть разных символов из одной клавиши (например, измененных Shift, Alt Gr kbd> и Right Ctrl kbd>)? » Прежде всего вам нужен макет, который использует пять или более символов на клавишу. Вы можете выбрать существующий макет, но если вы просто хотите добавить больше уровней к макету, который вы используете в данный момент, это может оказаться неоптимальным. Например, есть раскладка клавиатуры Neo († 1), но она «оптимизирована для немецкого языка», поэтому не подходит для большинства носителей английского языка. Тем не менее, может быть поучительно посмотреть, какие ключи выбрал Нео для модификатора 5-го уровня. Нео, очевидно, называет модификатор уровня 5 для «Mod4». Так что, как вы можете видеть, он использует клавишу справа от левой клавиши Shift ( В ответе супера он решил использовать Xmodmap. В настоящее время такие инструменты, как Setxkbmap, рекомендуются поверх Xmodmap. Xkb поставляется с множеством предопределенных опций для таких вещей, как выбор модификатора уровня 5. Если вы обратитесь к man xkeyboard-config и выполните поиск по Итак, документированные опции - это клавиша Скажем, вы хотите использовать опцию Так что для любой из опций, которые описаны в Если этих параметров недостаточно, и вы хотите определить другой ключ в качестве модификатора уровня 5, поучительно посмотреть объявления этих параметров. Похоже, они в Правая часть Макеты Xkb довольно модульные. Вы можете включить существующих макетов и изменить их. Таким образом, мы можем выбрать существующий макет с менее чем 5 уровнями и добавить к нему несколько уровней. Вы можете создавать новые макеты, скопировав файл с вашими макетами в Что касается файла с макетом, допустим, что мы хотим расширить макет «Международный США», который использует четыре уровня. Прежде всего, мы настраиваем клавиши переключения уровня 3 и уровня 5 так же, как это делает Нео: Теперь мы хотим добавить несколько дополнительных символов. Давайте просто использовать первые четыре ключа раскладок Qwerty в качестве примера. Это ключи с Для первых четырех уровней, чтобы не переопределять их, мы сопоставляем их с Чтобы использовать его, мы можем использовать скрипт-обертку, который мы сделали: † 1: Neo - это † 2: Чтобы найти символические имена, которые использует Xkb, найдите файл с именем LSGT
) и правую клавишу Alt / AltGr
. Это на европейской клавиатуре (105 клавиш), которая по сравнению с американской клавиатурой (104 клавиши) имеет узкое левое смещение и высокую и тонкую клавишу возврата. Для раскладки клавиатуры, основанной на клавиатуре США, может потребоваться - или предпочтительнее - выбрать другие клавиши. Выбор клавиши-модификатора уровня 5
lv5
, вы найдете следующие опции: ┌──────────────────────┬───────────────────────────────────────────────────┐
│ Option │ Description │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lsgt_switch_lock │ <Less/Greater> chooses 5th level; acts as onetime │
│ │ lock when pressed together with another 5th level │
│ │ chooser │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:ralt_switch_lock │ Right Alt chooses 5th level; acts as onetime lock │
│ │ when pressed together with another 5th level │
│ │ chooser │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lwin_switch_lock │ Left Win chooses 5th level; acts as onetime lock │
│ │ when pressed together with another 5th level │
│ │ chooser │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:rwin_switch_lock │ Right Win chooses 5th level; acts as onetime lock │
│ │ when pressed together with another 5th level │
│ │ chooser │
└──────────────────────┴───────────────────────────────────────────────────┘
LSGT
, правильная Клавиша Alt, правая клавиша Windows и левая клавиша Windows. Как мы уже видели, Neo использует первые два варианта. lv5:ralt_switch_lock
с некоторым макетом. Эта команда устанавливает макет us
с помощью этой клавиши-модификатора уровня 5: setxkbmap -option "lv5:ralt_switch_lock" us
man xkeyboard-config
, используйте это в качестве аргумента для -option
при использовании Setxkbmap. /usr/share/X11/xkb/symbols/level5
. Объявление для lv5:ralt_switch_lock
выглядит следующим образом: partial modifier_keys
xkb_symbols "ralt_switch_lock" {
include "level5(lock)"
key <RALT> {
type[Group1] = "EIGHT_LEVEL",
symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift,
ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
};
};
symbols[Group1]
объявляет, какой ключ или символ должен генерировать каждый уровень ключа. При этом используются все восемь возможных уровней, поскольку предполагается блокировать модификатор уровня 5 при нажатии вместе с другой клавишей Shift уровня 5. Таким образом, уровни 5–8 испускают ISO_Level5_Lock
, поскольку доступ ко всем этим уровням осуществляется путем удержания сдвига уровня 5 и некоторой комбинации других клавиш Shift (ни одной из них). Если вам нужно только поведение сдвига, а не поведение блокировки «если два нажата», вы можете сделать более простое объявление (из того же файла): // The right Alt key (while pressed) chooses the fifth shift level.
partial modifier_keys
xkb_symbols "ralt_switch" {
key <RALT> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level5_Shift ]
};
include "level5(modifier_mapping)"
};
Добавление дополнительных уровней в макет
/usr/share/X11/xkb/symbols/
, или где бы ваши инструменты Xkb не искали макеты. Но это требует привилегий sudo, поэтому это не лучшее решение. В качестве альтернативы вы можете скопировать структуру каталогов xkb/
и поместить ваши макеты в соответствующий каталог в xkb/
, а именно symbols/
. Допустим, вы сделали файл xkb-tree/symbols/my-layouts
. Чтобы использовать макеты, определенные в этом файле, вы можете использовать опцию -print
в setxkbmap
и затем направить вывод в xkbcomp
. Этот скрипт-обертка принимает макеты в качестве входных данных: #!/bin/sh
# `-option ""` resets all options.
setxkbmap -option "" -layout "$1" \
-print |
xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"
partial alphanumeric_keys
xkb_symbols "mine" {
// US international
include "us(intl)"
// Set up level 3 modifiers.
include "level3(modifier_mapping)"
include "level3(bksl_switch)"
include "level3(caps_switch)"
// Set up level 5 modifiers.
include "level5(modifier_mapping)"
include "level5(lsgt_switch)"
include "level5(ralt_switch)"
};
Q
по R
, которые соответствуют с <AD01>
по <AD04>
. Сначала нам нужно сделать ключи способными использовать до восьми уровней: key.type[Group1] = "EIGHT_LEVEL";
NoSymbol
. Затем мы добавляем два уровня. На уровне 5 мы добавляем стрелки ←↓↑→
(† 2). На уровне 6 мы добавляем клавиши со стрелками. Наш макет в итоге выглядит следующим образом: partial alphanumeric_keys
xkb_symbols "mine" {
// US international
include "us(intl)"
// Set up level 3 modifiers.
include "level3(modifier_mapping)"
include "level3(bksl_switch)"
include "level3(caps_switch)"
// Set up level 5 modifiers.
include "level5(modifier_mapping)"
include "level5(lsgt_switch)"
include "level5(ralt_switch)"
// Make the following keys capable of using eight levels.
key.type[Group1] = "EIGHT_LEVEL";
key <AD01> { [
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
leftarrow, Left
] };
key <AD02> { [
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
downarrow, Down
] };
key <AD03> { [
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
uparrow, Up
] };
key <AD04> { [
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
rightarrow, Right
] };
};
./setxkbmap-wrapper "my-layouts(mine)"
de(neo)
в Xkb; [+1136]. [+1173] keysymdef.h
. Он должен находиться в каталоге с именем X11/
. Вы также можете использовать имена Unicode, например U2192
для U + 2192.