Xorg (Українська)/Keyboard configuration (Українська) - ArchWiki

Jump to content
< Xorg (Українська)

Повʼязані статті

- X keyboard extension
- Linux console/Keyboard configuration
- Extra keyboard keys
- Xorg (Українська)
- Keyboard shortcuts

У цій статті мова йде про налаштування клавіатури для Xorg. Щоб дізнатись про складніші теми, на зразок модифікування розкладки чи перевизначення клавіш, прочитайте X keyboard extension та Extra keyboard keys відповідно.

Xorg сервер використовує X keyboard extension (Клавіатурне розширення X) (XKB) для визначення розкладок клавіатури. Також, можна використати xmodmap щоб отримати прямий доступ до внутрішньої таблиці кодів клавіш, проте її не варто використовувати для складних робіт. Окрім цього, можна використати localectl із systemd щоб визначити розкладку клавіатури як для Xorg, так і для віртуальної консолі.

Примітка: Деякі середовища стільниці, як-от GNOME та KDE можуть перезаписувати параметри XKB.

## Перегляд налаштувань клавіатури

Ви можете використати цю команду, щоб дізнатись, які налаштування XKB дійсні на даний момент:

    $ setxkbmap -print -verbose 10

    Setting verbose level to 10
    locale is C
    Applied rules from evdev:
    model:      evdev
    layout:     us
    options:    terminate:ctrl_alt_bksp
    Trying to build keymap using the following components:
    keycodes:   evdev+aliases(qwerty)
    types:      complete
    compat:     complete
    symbols:    pc+us+inet(evdev)+terminate(ctrl_alt_bksp)
    geometry:   pc(pc104)
    xkb_keymap {
            xkb_keycodes  { include "evdev+aliases(qwerty)" };
            xkb_types     { include "complete"      };
            xkb_compat    { include "complete"      };
            xkb_symbols   { include "pc+us+inet(evdev)+terminate(ctrl_alt_bksp)"    };
            xkb_geometry  { include "pc(pc104)"     };
    };

### Сторонні допоміжні програми

Існують „неофіційні“ програми, які займаються виводом інформації про розкладку клавіатури.

- xkb-switch-gitAUR:

    $ xkb-switch

    us

- xkblayout-state-gitAUR:

    $ xkblayout-state print "%s"

    de

## Вибір розкладки

Keyboard layout in Xorg can be set in multiple ways. Here is an explanation of used options:

- `XkbModel` обирає модель клавіатури. Вона має вплив на роботу лише кількох додаткових клавіш, які може мати ваша клавіатура. У разі чого, завжди можна виставити значення `pc104` або `pc105`. Але, наприклад, ноутбуки, зазвичай, мають додаткові клавіші, і щоб заставити їх робити, іноді, достатньо просто вказати правильну модель клавіатури.
- `XkbLayout` обирає розкладку. Можна вказати декілька розкладок, через кому.
- `XkbVariant` обирає конкретний різновид розкладки для `XkbLayout`. Наприклад, за замовчуванням `sk` (Словацька) використовує `qwertz`, але її можна явно змінити на `qwerty`, і так далі.
- `XkbOptions` містить додаткові налаштування (через кому). Тут можна визначити: як перемикати розкладку, роботу світлодіодів, комбінації клавіш, тощо. У розділі #Широковживані параметри XKB наведені приклади.

Примітка: Потрібно визначити стільки ж видів розкладки, скільки й розкладок. Якщо вам потрібна звичайна розкладка, впишіть пропуск (але залиште коми). Наприклад, щоб вашою основною розкладкою була звичайна `us` а другорядною — такий вид `us` розкладки як `dvorak`, задайте `us,us` як `XkbLayout` і `,dvorak` як `XkbVariant`.

Назва розкладки — це, зазвичай, код країни із двох літер. Щоб побачити весь список моделей клавіатур, розкладок, їх підвидів та додаткових налаштувань, разом із коротким описом, відкрийте `/usr/share/X11/xkb/rules/base.lst`. Або ж, Ви можете скористатись цими командами, щоб отримати списки без описів:

- `localectl list-x11-keymap-models`
- `localectl list-x11-keymap-layouts`
- `localectl list-x11-keymap-variants [layout]`
- `localectl list-x11-keymap-options`

Ось що робить приклад з наступного розділу: він визначає модель клавіатури як `pc104`, `cz` — як основну розкладку, `us` — як другорядну, використовує такий різновид розкладки `us` як `dvorak`, та дозволяє перемикати розкладки клавішами `Win+Space`. Дізнайтеся більше: xkeyboard-config(7).

Примітка: В користувачів Fcitx або IBus цей спосіб може не спрацювати, або працювати недовго, так як ці програми контролюють розкладку. Користувачам Fcitx потрібно встановити перший спосіб вводу як `Keyboard - layout`. Прочитайте Fcitx#Input methods configuration. Натомість, користувачі IBus мають увімкнути параметр "Use system keyboard layout" в Preference -> Advanced якщо вони користуються файлами налаштувань X, або ж виставити розкладку вручну через setxkbmap.

### Використання setxkbmap

This article or section needs expansion.

Reason: Udev також відміняє зміни зроблені setxkbmap (наприклад, якщо підключити нову клавіатуру) (Discuss in Talk:Xorg (Українська)/Keyboard configuration (Українська)#Persisting layout when USB keyboard connected)

Зміни, зроблені setxkbmap стосуються лише одного сеансу роботи X, їх можна зробити постійними в xinitrc або в xprofile. Цим ви перезапишете загальносистемні налаштування, задавання яких описане в розділі #Використання файлів налаштування X. Проте, налаштування сторонніх клавіатур усе одно не будуть зберігатись якщо не задати їх id в setxkbmap. Або ж якщо це основна клавіатура X сервера.

Використовується він ось так (див. setxkbmap(1)):

    $ setxkbmap [-model xkb_model] [-layout xkb_layout] [-variant xkb_variant] [-option xkb_options]

Примітка: setxkbmap додає обрані параметри до тих, що були задані раніше (вони зберігаються як властивості кореневого вікна). Якщо ви хочете замінити всі попередньо задані параметри, використайте ключ `-option` з пустими аргументами.

Щоб просто поміняти розкладку (`-layout` — це ключ за замовчуванням):

    $ setxkbmap xkb_layout

Для множинного налаштування:

    $ setxkbmap -model pc104 -layout cz,us -variant ,dvorak -option grp:win_space_toggle

### Використання файлів налаштування X

Примітка: `xorg.conf` читається X сервером на початку його роботи. Щоб ваші зміни набули чинності перезавантажте X.

Синтаксис файлів X пояснено в Xorg#Configuration. Вони задають параметри, які зберігаються після завершення роботи.

Приклад такого файлу:

    /etc/X11/xorg.conf.d/00-keyboard.conf

    Section "InputClass"
            Identifier "system-keyboard"
            MatchIsKeyboard "on"
            Option "XkbLayout" "cz,us"
            Option "XkbModel" "pc104"
            Option "XkbVariant" ",dvorak"
            Option "XkbOptions" "grp:win_space_toggle"
    EndSection

#### Використання localectl

Для зручності, можна використати localectl замість того, щоб вручну переписувати файли налаштувань X. Ця команда зберігає налаштування в `/etc/X11/xorg.conf.d/00-keyboard.conf`. Цей файл не потрібно міняти самотужки бо localectl перезапише його щойно ви її запустите.

Її можна викликати ось так:

    # localectl [--no-convert] set-x11-keymap layout [model [variant [options]]]

Якщо ви хочете задати model, variant чи options, вам потрібно задати всі перелічені поля, хоча ви можете їх пропустити вказавши пропуск `""`. Якщо ключ `--no-convert` не вказаний, то найбільш схожий до заданої клавіатури, варіант консольної клавіатури, буде використаний в налаштуваннях консолі в `vconsole.conf`. Дізнайтеся більше в localectl(1).

Створити `/etc/X11/xorg.conf.d/00-keyboard.conf` можна так:

    # localectl --no-convert set-x11-keymap cz,us pc104 ,dvorak grp:win_space_toggle

## Широковживані параметри XKB

### Зміна розкладки

Щоб мати змогу швидко змінювати розкладку, спершу, вкажіть всі ці розкладки (перша з них буде основною). А потім — клавішу (або комбінацію клавіш) якою вони будуть перемикатись. Наприклад, щоб перемикатись між англійською та шведською розкладками використовуючи клавішу `CapsLock`, передайте аргумент `us,se` до `XkbLayout` і `grp:caps_toggle` як аргумент до `XkbOptions`. В `XkbLayout` потрібно вказати стільки ж розкладок, скільки і їх різновидів у `XkbVariant`. А якщо ви хочете переключатись між різними видами однієї розкладки, вкажіть її двічі (`de,de`).

Якщо вам хочеться перемикати розкладки іншими клавішами окрім `CapsLock`, то доступні варіанти перелічені в `/usr/share/X11/xkb/rules/base.lst`, починаються на `grp:` і закінчуються на `toggle`. Щоб отримати повний список, запустіть команду:

    $ grep "grp:.*toggle" /usr/share/X11/xkb/rules/base.lst

Зверніть увагу: параметр `grp:alts_toggle` не надійний і навряд чи коли його виправлять; виберіть щось інше!

### Зупинка Xorg з Ctrl+Alt+Backspace

За замовчуванням, комбінація клавіш `Ctrl+Alt+Backspace` вимкнена. Ми можете увімкнути її передавши `terminate:ctrl_alt_bksp` в `XkbOptions`. Це також можна зробити прив'язавши до певної клавіші функцію `Terminate_Server` в `xmodmap` (який відмінить усі налаштування зроблені `XkbOptions`). Щоб ці способи спрацювали, параметр `DontZap` в `ServerFlags` повинен мати значення "off". Хоча, з версії R6.8.0 (2004 рік) [1] воно стоїть за замовчуванням.

### Зміна місцями лівого Control і Caps Lock

Щоб поміняти Caps Lock з лівим Control, додайте `ctrl:swapcaps` до `XkbOptions`. Ця команда дасть вам список схожих параметрів з описами:

    $ grep -E "(ctrl|caps):" /usr/share/X11/xkb/rules/base.lst

### Кнопки переміщення курсора

Кнопки переміщення курсора (ті що на цифровій клавіатурі а не на мишці), вимкнені за замовчуванням. Виправити це можна додавши `keypad:pointerkeys` до `XkbOptions`. Цим ви заставити комбінацію `Shift+NumLock` вмикати/вимикати кнопки переміщення курсора.

Більше інформації є у статті X keyboard extension#Mouse control.

### Налаштування клавіші compose

Хоч більшість клавіатур і не мають клавіші Compose, її функціонал можна назначити іншій клавіші.

Клавіша `Compose` дозволяє вводити складні та рідковживані символи, які не передбачені розробником клавіатури, які не можна ввести з натиснутою `AltGr`. Вони вводяться почерговим натисненням групи клавіш, перша з яких — `Compose`. Наприклад: `Compose` `'` `e` напише `é`, а `Compose` `-` `-` `-` напише „довге тире“: `—`.

Примітка: На українській розкладці тире можна ввести просто через `AltGr` `-`.

Хоч деякі незвичайні клавіатури й мають клавішу `Compose`, зазвичай, використовують інші клавіші в якості неї. Наприклад, щоб клавіша `Menu` працювала як `Compose` використайте налаштування середовища стільниці, або передайте `compose:menu` до `XkbOptions` (чи setxkbmap: `setxkbmap -option compose:menu`). Дозволені заміни клавіш визначені в `/usr/share/X11/xkb/rules/base.lst`:

    $ grep "compose:" /usr/share/X11/xkb/rules/base.lst

Якщо потрібної вам клавіші немає в списку, скористайтесь xmodmap щоб перевизначити ту клавішу на `Multi_key`, яка працює як Compose (зверніть увагу: setxkbmap стирає зміни, зроблені xmodmap ).

#### Комбінації клавіш

Стандартні комбінації клавіш залежать від мови системи і зберігаються в `/usr/share/X11/locale/використана_мова/Compose`, де `використана_мова` це, наприклад, `en_US.UTF-8`.

Ви можете додати свої власні комбінації для compose, скопіювавши файл зі списком комбінацій в `~/.XCompose` та зробивши допис до нього. Інакше, створіть пустий файл `~/.XCompose` та додайте до нього загальний список командою `include "%L"`, наприклад:

    ~/.XCompose

    include "%L"

    <Multi_key> <g> <a> : "α"
    <Multi_key> <g> <b> : "β"
    <Multi_key> <g> <g> : "γ"

Клавіша compose (названа `<Multi_key>` у файлі `~/.XCompose`) з будь-яким із тисяч символів юнікоду, включно з тими, які знаходяться за межами базової багатомовної площини. Перегляньте сторінку посібника Compose(5), там описаний формат файлу XCompose.

GTK не використовує XIM а тому не сприймає клавіші, визначені в `~/.XCompose`. це можна виправити й заставити GTK використовувати XIM якщо додати `export GTK_IM_MODULE=xim` і/або `export XMODIFIERS="@im=none"` до `~/.xprofile`.

Порада: XIM дуже старий, вам варто спробувати інші способи: SCIM, Uim, IBus, тощо. Подробиці в статті Input method.
Примітка: XIM забере можливість вводити символи Unicode через `Ctrl+Shift+u`.

### Символ валюти на іншій клавіші

Більшість європейських розкладок мають символ євро (€) намальований на клавіші `5`. Щоб мати змогу вводити його через `Alt+5`, використайте `lv3:lalt_switch` та `eurosign:5`.

Таким же чином можна використати знак рупії (₹) `rupeesign:4`.

Примітка: Українська розкладка вже має символи валют: долара ($) на `Alt+4`, євро (€) на `Alt+Shift+4` і гривні (₴) — на `Alt+Shift+3`

### Миттєва зміна стану при натисненні на Caps Lock

Ті, хто любить писати великі літери з Caps Lock'ом можуть стикатись із короткою затримкою при зміні стану Caps Lock, через що великими стануть дві чи більше літер (АЛе, ХОча, ЛІнукс). Так стається, бо Caps Lock вмикається миттєво, щойно клавіша натиснута, але вимикається лише коли вдруге натиснута клавіша буде відпущена. Така поведінка — це спадок друкарських машинок, в яких для набору великими літерами фізично затискались клавіші зміни регістру, і для того, щоб звільнити їх, потрібно було відпустити клавішу замка

Деякі більш популярні операційні системи прибрали цю особливість або свідомо (бо вона може збивати з пантелику), або випадково, але все це питання смаку. На трекер Xserver'а приходила купа скарг на неполадки, так як на данай момент немає простого способу перевести систему, щоб вона працювала так, як інші ОС. Для всіх, хто хоче спробувати: скарги та здійснену роботу можна знайти на [2] й [3].

#### Спосіб обійти проблему

Спершу, вивантажте ваші налаштування клавіатури до файлу:

    $ xkbcomp -xkb $DISPLAY xkbmap

У файлі xkbmap, знайдіть розділ Caps Lock. Він починається з key <CAPS>:

     key <CAPS> {         [       Caps_Lock ] };

І замініть увесь розділ на цей код:

    key <CAPS> {
        repeat=no,
        type[group1]="ALPHABETIC",
        symbols[group1]=[ Caps_Lock, Caps_Lock],
        actions[group1]=[ LockMods(modifiers=Lock), Private(type=3,data[0]=1,data[1]=3,data[2]=3)]
    };

Збережіть та перезавантажте налаштування клавіатури:

    $ xkbcomp -w 0 xkbmap $DISPLAY

Налаштування не зберігаються після перезавантаження комп'ютера, тому вам варто зробити так, щоб вони запускались відразу кожного разу після початку роботи X.

## Одноклавішні функції

Щоб назначити клавіші функцію, скористайтесь xcape. Для прикладу, можна зробити так, щоб `CapsLock` робив як `Escape` якщо натиснути його самого, але як `Control` якщо його зажати і натиснути на іншу клавішу. Спершу поставте заміну `Control` скориставшись setxkbmap як було вже сказано раніше, і та призначте клавіші функцію `Escape` з xcape:

     $ xcape -e 'Caps_Lock=Escape'

Ви можете призначити декілька функцій через кому: `Caps_Lock=Escape;Shift_L=Escape`.

Якщо ви триматимете клавішу довше встановленого проміжку часу (500мс за замовчуванням), xcape не оброблятиме натиск кнопки (вона вважатиметься затисненою).

## Налагодження затримки друку

Затримка друку (typematic delay) визначає як довго (в мілісекундах) потрібно тримати кнопку щоб вона спрацювала повторно. Щойно це станеться, новий символ буде вводитись із частотою (в герцах) заданою темпом друку (typematic rate). Ці два параметри налагоджуються окремо для Xorg і для віртуальної консолі.

### Використовуючи xset

Затримку і темп друку для запущеного X сервера можна задати з xset, деякі дії із сервером X можуть заставити його відмінити зміни й повернутись до звичайних налаштувань.

Використання:

    $ xset r rate delay [rate]

Щоб виставити затримку 200мс і темп 30гц, скористайтесь командою (додайте її до xinitrc щоб зробити постійною):

    $ xset r rate 200 30

Запуск команди без заданих параметрів відкотить їх до стандартних: затримку до 660мс і темп — до 25гц:

    $ xset r rate

### Використовуючи налаштування запуску X сервера

Надійніший спосіб задати затримку й темп друку — зробити їх звичайними налаштуваннями передавши бажані значення, як параметри, до сервера, на старті:

- `-ardelay мілісекунди` - задає затримку автоповтору (проміжок часу в мілісекундах, який треба тримати клавішу щоб запустити автоповтор).
- `-arinterval мілісекунди` - задає період автоповтору (проміжок часу в мілісекундах, який який проходить між введенням символу).

У посібнику Xserver(1) є список всіх параметрів запуску сервера X. Дізнайтесь, як передаються ці параметри у вашому менеджері входу.

## Див. також

- Стаття про розширення XKB (заархівована на Wayback Machine)

Categories:

- X server (Українська)
- Keyboard configuration (Українська)

Hidden category:

- Pages or sections flagged with Template:Expansion