Що робить "Ключ, щоб вибрати 5-й рівень" у властивостях клавіатури gnome?


18

Існує можливість вказати клавішу, яка буде використовуватись для доступу до 5-го рівня на клавіатурі gnome-keyboard-properties("Клавіатура" в розділі "Обладнання в системних налаштуваннях"):

Знімок екрана цього діалогового вікна

Але якщо я встановити 5-й рівень, AltGrа третій рівень - Right 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
  1. То що робить модифікатор 5-го рівня?

  2. Як налаштувати його так , що я можу отримати 5 або шість різних персонажів з одного ключа (модифікованого Shift, Alt Grі , Right Ctrlнаприклад)?

Відповіді:


15

«1. То що робить модифікатор 5-го рівня? "

Він обирає п’ятий рівень. Модифікатор 2-го рівня (просто регулярна зміна) вибирає другий рівень, а 3-й рівень вибирає третій рівень.

Причиною того, що модифікатор 5-го рівня вибирає п'ятий рівень замість четвертого рівня (відразу після модифікатора 3-го рівня), полягає в тому, що ці три модифікатори можна комбінувати різними способами, щоб вибрати вісім різних рівнів (це включає не використання жодного з модифікаторів, яка просто натискає клавішу без таких модифікаторів). З восьми ↑ 3 = 8. існує вісім комбінацій. Для перших двох модифікаторів є чотири комбінації:

  • Немає модифікаторів (рівень 1)
  • Модифікатор другого рівня, відомий також як зсув (рівень 2)
  • Модифікатор 3-го рівня (рівень 3)
  • 2-й + 3-й модифікатор (рівень 4)

Додавання третього модифікатора (5-го рівня) додає ще чотири рівні.

«2. Як це налаштувати так, щоб я міг отримати з однієї клавіші 5 або шість різних символів (змінено Shift Alt GrтаRight Ctrl наприклад)? "

Перш за все вам потрібен макет, в якому використовується п'ять і більше символів на ключ. Ви можете вибрати існуючий макет, але якщо ви просто хочете додати більше рівнів до макета, який ви зараз використовуєте, це може бути не оптимальним. Наприклад, є Нео розкладка клавіатури († 1), але вона "оптимізована для німецької мови", так що це не чудово для більшості носіїв англійської мови.

Але все-таки може бути корисним подивитися, які клавіші вибрав Neo для модифікатора рівня 5.

Нео макет

Нео, мабуть, називає модифікатор рівня 5 для "Mod4". Як ви бачите, він використовує ключ праворуч від лівої клавіші зсуву ( LSGT) та правої клавіші Alt /AltGr клавіші. Це на європейській клавіатурі (105 клавіш), яка порівняно з американською клавіатурою (104 клавіші) має вузьку ліву зміну та високу та тонку клавішу повернення. Для розкладки клавіатури, заснованої на американській клавіатурі, можливо, доведеться або бажає вибрати інші клавіші.

Вибір ключа модифікатора рівня 5

У відповіді sup він вирішує використовувати Xmodmap. На сьогоднішній день такі інструменти, як Setxkbmap, рекомендується використовувати над Xmodmap. Xkb поставляється з багатьма заздалегідь визначеними варіантами для таких речей, як вибір модифікатора рівня 5. Якщо ви консультуєтеся з man xkeyboard-config та шукаєте, 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.

Якщо цих параметрів недостатньо, і ви хочете визначити іншу клавішу для модифікатора рівня 5, доцільно переглянути декларації для цих параметрів. Вони, здається, в /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 при натисканні разом із іншою клавішею зсуву рівня 5. Таким чином, рівні 5–8 випромінюються, ISO_Level5_Lockоскільки всі ці рівні доступні, утримуючи зсув рівня 5 та деяку комбінацію інших клавіш зсуву (жодної для всіх). Якщо ви хочете лише поведінку зсуву, а не поведінку блокування, якщо два натиснуті, ви можете зробити більш просту заяву (з того ж файлу):

// 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)"
};

Додавання додаткових рівнів до макета

Макети Xkb досить модульні. Ви можете включити існуючі макети та змінити їх. Таким чином, ми можемо вибрати існуючий макет із меншими 5 рівнями та додати до нього деякі рівні.

Ви можете створити нові макети, скопіювавши файл із своїми макетами до того місця /usr/share/X11/xkb/symbols/, де ваші інструменти Xkb шукають макети. Але для цього потрібна привілей судо, тому це не найкраще рішення. Крім того, ви можете скопіювати структуру каталогів 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"

Що стосується файлу з макетом, скажімо, що ми хочемо розширити "американський міжнародний" макет, який використовує чотири рівні. Перш за все, ми встановили клавіші перемикання рівня 3 та 5 рівня так само, як це робить Neo:

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)"
};

Тепер ми хочемо додати кілька додаткових символів. Давайте просто використовувати перші чотири клавіші макетів Qwerty як приклад. Ці ключі 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)"

† 1: Нео знаходиться de(neo)в Xkb; setxkbmap "de(neo)".

† 2: Щоб знайти символічні імена, які використовує Xkb, знайдіть файл з назвою keysymdef.h. Він повинен знаходитись під каталогом X11/. Ви також можете використовувати імена Unicode, наприклад U2192для U + 2192.


1
Дякуємо, що знайшли час, щоб скласти цю відповідь. Я шукав спосіб використовувати свої клавіші JKLI як клавіші зі стрілками, так що це було дуже зручно. Будь ласка, насолоджуйтесь цими додатковими 50 балами! (Я повинен бути в змозі призначити
суму ще

1
Ну, спасибі, це чудовий відгук, навіть якщо він приходить трохи пізно, але саме це я шукав назад (але зараз GNOME насправді не підтримує налаштування модифікатора - але поки він працює за допомогою конфігураційних файлів, все добре).
суп

8

Ну, після трохи копання:

(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 інакше.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.