Jump to content

# Xorg (Русский)/Keyboard configuration (Русский)

4 languages

- English
- Français
- 日本語
- Українська

From ArchWiki
< Xorg (Русский)
Состояние перевода: На этой странице представлен перевод статьи Xorg/Keyboard configuration. Дата последней синхронизации: 5 октября 2024. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ссылки по теме

- X keyboard extension
- Конфигурация клавиатуры в консоли
- Дополнительные клавиши
- Xorg (Русский)
- Горячие клавиши

Эта статья описывает основные настройки клавиатуры в Xorg. Для расширенных тем, таких как изменение раскладки клавиатуры или дополнительные сопоставления клавиш, смотрите статьи X keyboard extension или дополнительные клавиши соответственно.

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

Примечание: Параметры XKB могут быть переопределены инструментами некоторых сред рабочего стола, таких как GNOME и Plasma.

## Просмотр настроек клавиатуры

Используйте следующую команду, чтобы просмотреть настройки 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

    ru

- xkblayout-state-gitAUR:

    $ xkblayout-state print "%s"

    ru

## Настройка раскладки клавиатуры

Раскладку клавиатуры можно настроить разными способами в Xorg. Вот объяснение используемых параметров:

- `XkbModel` устанавливает модель клавиатуры. Это влияет только на некоторые дополнительные клавиши. Для большинства клавиатур подходят модели `pc104` (ANSI) или `pc105` (ISO). Но, например, ноутбуки обычно имеют дополнительные клавиши, и иногда, чтобы заставить их работать, достаточно просто выбрать правильную модель клавиатуры.
- `XkbLayout` устанавливает раскладку клавиатуры. Можно указать несколько раскладок через запятую, если, например, вам нужно быстро переключаться между ними.
- `XkbVariant` устанавливает определённый вариант раскладки, указанной в `XkbLayout`. Например, вариант по умолчанию для `sk` — `qwertz`, но его можно изменить вручную на другой, например, `qwerty`.
- `XkbOptions` устанавливает некоторые дополнительные опции (через запятую). Используется для указания клавиш для смены раскладки, отображения текущей раскладки через светодиоды на клавиатуре, режима compose и др. Примеры есть в разделе #Часто используемые опции XKB.

Примечание: Число раскладок и число вариантов раскладок должны совпадать. Если для какой-то из указанных вами раскладок нужен стандартный вариант, можно оставить на её месте пустую строку (но запятая должна оставаться). Например, если нужны первичная стандартная раскладка `us` и вторичная раскладка `us` с вариантом расположения клавиш `dvorak`, тогда укажите `us,us` в параметре `XkbLayout` и `,dvorak` в параметре `XkbVariant`.

Имя раскладки, как правило, состоит из 2-буквенного кода страны. Чтобы посмотреть полный список моделей клавиатур, раскладок, вариантов и опций вместе с коротким описанием, откройте файл `/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`

Примеры в следующих подразделах будут делать одно и то же. Они устанавливают модель клавиатуры `pc105`, первичной раскладкой `us`, `ru` — вторичной раскладкой, вариант расположения клавиш `dvorak` для раскладки `us` и комбинацию клавиш `Win+Space` для переключения между раскладками. Для получения дополнительной информации смотрите xkeyboard-config(7).

Примечание: У пользователей Fcitx/IBus данные методы могут не работать (или работать только определённое время), так как они контролируют раскладку клавиатуры. Пользователи Fcitx должны выбрать `Keyboard - layout` в качестве первого метода ввода, см. Fcitx#Input methods configuration. Пользователям IBus необходимо активировать параметр "Use system keyboard layout" в разделе Preference -> Advanced при использовании файлов настроек X или же указать раскладку вручную с помощью setxkbmap.

### Через setxkbmap

setxkbmap настраивает раскладку клавиатуры только для текущего сеанса X, но её можно сделать постоянной через xinitrc или xprofile. Это переопределяет общесистемные настройки, указанные #Через файлы настроек X.

Используйте следующим образом (смотрите setxkbmap(1)):

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

Примечание: setxkbmap добавляет опции, указанные в командной строке, к тем, которые были заданы ранее (сохранены в свойствах корневого окна). Если вы хотите заменить все ранее указанные опции, сперва используйте флаг `-option` с пустым аргументом.

Чтобы изменить раскладку введите (`-layout` — стандартный флаг):

    $ setxkbmap xkb_layout

Для нескольких настроек:

    $ setxkbmap -model pc105 -layout us,ru -variant dvorak, -option grp:win_space_toggle

Настройки, установленные через setxkbmap, сбрасываются в момент подключения новой клавиатуры, из-за чего команду придётся выполнять повторно. Среды рабочего стола обычно восстанавливают настройки автоматически, но если вы их не используете, то можно автоматизировать вызов setxkbmap, например, через xplugdAUR.

### Через файлы настроек X

Примечание: `xorg.conf` анализируется X-сервером при запуске. Чтобы применить изменения, перезапустите X.

Синтаксис файлов настроек X описан в разделе Xorg (Русский)#Настройка. Этот способ создаёт постоянные общесистемные настройки.

Вот пример:

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

    Section "InputClass"
            Identifier "system-keyboard"
            MatchIsKeyboard "on"
            Option "XkbLayout" "us,ru"
            Option "XkbModel" "pc105"
            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 раскладка [модель [вариант [опции]]]

Чтобы установить модель, вариант или опции, нужно также указать все находящиеся перед ними поля, но их можно пропустить, передав пустую строку `""`. Если параметр `--no-convert` не передан, тогда указанная клавиатура преобразуется в ближайшую соответствующую раскладку для консоли и прописывается в настройках консоли в файле `vconsole.conf`. Для получения дополнительной информации смотрите localectl(1).

Чтобы создать файл `/etc/X11/xorg.conf.d/00-keyboard.conf`, аналогичный показанному выше:

    # localectl --no-convert set-x11-keymap us,ru pc105 dvorak, grp:win_space_toggle

Совет: localectl дополнительно записывает конфигурацию клавиатуры в файле `/etc/vconsole.conf` в переменных `XKBLAYOUT`, `XKBMODEL`, `XKBVARIANT` и `XKBOPTIONS`, [1] но Xorg не читает их из этого файла.

## Часто используемые опции XKB

### Переключение раскладок клавиатуры

Для быстрого переключения между раскладками клавиатуры сначала укажите несколько раскладок, между которыми вы хотите переключаться (первая из них будет по умолчанию). Затем укажите клавишу (или комбинацию клавиш), которую будете использовать для переключения. Например, чтобы переключаться между английской и русской раскладками с помощью клавиши `CapsLock`, используйте `us,ru` в качестве параметра `XkbLayout` и `grp:caps_toggle` в качестве параметра `XkbOptions`. Число раскладок в `XkbLayout` должно совпадать с числом вариантов в `XkbVariant` — если вы хотите переключаться между разными вариантами одной раскладки, укажите её несколько раз (например, `ru,ru`).

Список доступных раскладок и их вариантов приведён в xkeyboard-config(7) § LAYOUTS. Список комбинаций клавиш, которые можно использовать для переключения раскладки, приведён в xkeyboard-config(7) § Switching to another layout.

Переключение с помощью `grp:alts_toggle` ненадёжно и вряд ли будет исправлено; по возможности используйте другие комбинации клавиш.

#### Переключение раскладок клавиатуры с помощью Alt Shift

Для переключения раскладок через `Alt+Shift` укажите `grp:alt_shift_toggle` в `XkbOptions`.

Однако есть проблема в XKB, из-за которой перестают работать сочетания `Alt+Shift+клавиша`. Более того, в некоторых раскладках клавиатуры XKB может установить правый `Alt` по умолчанию как `AltGr`, из-за чего `RAlt+RShift` перестаёт переключать раскладку.

В качестве обходного пути можно использовать sxhkd для переключения раскладок, добавив такие настройки в `sxhkdrc`:

    Shift_L + Alt_L
        setxkbmap -query | grep -q 'ru' && setxkbmap us || setxkbmap ru,us
    Shift_R + Alt_R
        setxkbmap -query | grep -q 'ru' && setxkbmap us || setxkbmap ru,us

По какой-то причине при использовании sxhkd клавишу `Alt` нужно нажимать первой.

### Завершение Xorg по сочетанию клавиш Ctrl+Alt+Backspace

По умолчанию комбинация клавиш `Ctrl+Alt+Backspace` отключена. Вы можете включить ее установив `terminate:ctrl_alt_bksp` для `XkbOptions`. Это также можно сделать, привязав клавишу к `Terminate_Server` в `xmodmap` (который отменяет любую существующую настройку `XkbOptions`). Для того, чтобы любой из этих методов работал, необходимо также установить `DontZap` в "off" в `ServerFlags`; однако, по крайней мере, с версии R6.8.0 (2004 год) [2] это значение по умолчанию.

### Перестановка Caps Lock и Левого Control

Чтобы поменять местами 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 для расширенной настройки.

### Настройка AltGr

Клавиша AltGr (Alternate Graphic) используется для доступа к дополнительным символам и знакам на клавиатуре. Она работает как клавиша-модификатор аналогично Shift, но обеспечивает доступ к третьему ряду клавиш. Ряды (levels) работают следующим образом:

- 1 ряд: по умолчанию (без модификатора);
- 2 ряд: доступ через клавишу Shift, даёт доступ к символам в верхнем регистре и некоторым основным символам (например, @);
- 3 ряд: доступ через клавишу AltGr, даёт доступ к дополнительным символам и знакам, которых нет в первых двух рядах.

Символы 2 ряда обычно нанесены прямо на клавиши клавиатуры, благодаря чему их легко найти. Чтобы посмотреть символы из дополнительных рядов, можно использовать `xmodmap -pk` или посмотреть в `/usr/share/X11/xkb/symbols`.

### Настройка клавиши Compose

Хотя обычно её нет на традиционных клавиатурах, однако клавишу Compose можно настроить на существующую.

Клавиша `Compose` начинает последовательность нажатия клавиш, которая включает (обычно два) дополнительных нажатия клавиш. Обычно используется либо для ввода символов на языке, для которого не была предназначена клавиатура, либо для других менее используемых символов, которые не покрываются модификатором `AltGr`. Например, нажатие `Compose` `'` `e` производит `é`, или `Compose` `-` `-` создаёт длинное тире: `—`.

Хотя ещё несколько эксцентричных клавиатур имеют клавишу `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 для сопоставления нужной клавиши с keysym `Multi_key`, которая работает как клавиша compose по умолчанию (обратите внимание, что настройки xmodmap сбрасываются setxkbmap).

#### Сочетания клавиш

Комбинация по умолчанию для клавиши compose зависит от локали, установленной для этого сеанса и находящейся в `/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`) работает с любыми из тысяч символов Unicode, включая те, которые находятся за основной многоязычной плоскостью (Basic Multilingual Plane). Формат файлов XCompose описан в Compose(5).

Однако GTK не использует XIM по умолчанию и поэтому игнорирует `~/.XCompose`. Это можно решить, заставив GTK использовать XIM путём установки переменных окружения для графического сеанса `GTK_IM_MODULE=xim` и/или `XMODIFIERS="@im=none"`.

Совет: XIM очень старый, возможно, лучше подойдут другие методы ввода, такие как IBus и Fcitx5. Для получения дополнительной информации смотрите статью Метод ввода.
Примечание: XIM предотвратит вставку символов Unicode с комбинацией `Ctrl+Shift+u`.

### Знаки валют на других клавишах

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

Знак рупии (₹) можно использовать также с `rupeesign:4`.

Для ввода знака рубля (₽) можно добавить опцию `misc:typo`, включающую дополнительные типографские символы, и назначить клавишу для выбора 3 ряда (например, опция `lv3:ralt_switch` для выбора через правый Alt) — после этого используйте сочетание клавиш `RAlt+h` (в русской раскладке `RAlt+р`) для ввода знака рубля.

### Переключение состояния клавиши Caps Lock сразу после нажатия

Те, кто предпочитает набирать заглавные буквы с помощью клавиши Caps Lock, могут столкнуться с небольшой задержкой при переключении состояния Caps Lock, что может привести к случайному вводу двух или более заглавных букв (например, THe, ARch LInux). Это происходит потому, что Caps Lock включается сразу в момент нажатия клавиши Caps Lock, но при повторном нажатии отключается только после отпускания клавиши. Это поведение унаследовано от печатных машинок, где функция Caps Lock реализовывалась путём физического сдвига (shifting) и блокировки каретки или литерной корзины, а снятие блокировки выполнялось нажатием и последующим отпусканием клавиши Shift.

Некоторые более популярные операционные системы удалили это поведение добровольно (так как оно может сбить с толку некоторых) или по ошибке, однако это вопрос предпочтения. В баг-трекер Xserver отправлялись сообщения об ошибках, поскольку в настоящее время нет простого способа переключиться на поведение, представленное другими операционными системами. [3] [4].

#### Временное решение

Сначала, экспортируйте настройки клавиатуры в файл:

    $ 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. Таким образом возможно, к примеру, назначить функцию `Escape` клавише `CapsLock` при нажатии только данной клавиши, а при нажатии вместе с другой кнопкой будет вызвана функция клавиши `Control`. Для начала задайте перестановку `Control`, используя setxkbmap, как описано ранее, а также задайте ассоциацию с `Escape` с помощью xcape:

     $ xcape -e 'Caps_Lock=Escape'

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

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

## Регулировка задержки и скорости автоповтора

Задержка автоповтора (typematic delay) — количество времени (обычно в миллисекундах), в течение которого нужно удерживать клавишу, прежде чем начнётся повторение ввода символа. После этого символ будет повторяться с определённой частотой (обычно заданной в Гц), которая задаётся скоростью автоповтора (typematic rate). Обратите внимание, что эти настройки настраиваются отдельно для Xorg и для виртуальной консоли.

### Через xset

Инструмент xset, предоставляемый пакетом xorg-xset, может быть использован для настройки скорости и задержки автоповтора для активного X-сервера, но некоторые действия в процессе работы могут привести к сбросу настроек.

Использование:

    $ xset r rate задержка [скорость]

Например, чтобы установить задержку автоповтора в 200 мс и скорость автоповтора в 30 Гц, используйте следующую команду:

    $ xset r rate 200 30

Ввод команды без указания задержки и скорости автоповтора приведёт к сбросу на значения по умолчанию; задержка 660 мс и скорость 25 Гц:

    $ xset r rate

### Через xautocfg

xautocfgAUR может автоматически применять настройки автоповтора для подключаемых на лету устройств. Он отслеживает события X11 и, когда видит появление новой клавиатуры, применяет настройки.

Отредактируйте настройки под свои нужды:

    ~/.config/xautocfg.cfg

    [keyboard]

    # задержка повтора в мс
    delay = 200

    # частота повтора в Гц
    rate = 30

Если `graphical-session.target` запускается средой рабочего окна или оконным менеджером, включите пользовательскую службу `xautocfg.service`. Если нет, запустите `xautocfg` вручную.

### Через опцию AutoRepeat

Если вы хотите сделать настройки автоповтора постоянными и общесистемными, их можно изменить #Через файлы настроек X, добавив опцию `AutoRepeat`. [5]

Параметр `AutoRepeat` принимает два значения — задержку и интервал — в миллисекундах. Например, если вам нужна частота 25 Гц, то интервал будет 1000 / 25 = 40 миллисекунд.

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

    Section "InputClass"
            ...
            Option "AutoRepeat" "200 40"
            ...
    EndSection

### Через параметры запуска XServer

Ещё один способ сделать настройки постоянными и общесистемными — передать опции X-серверу при его запуске:

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

Для получения полного списка параметров X-сервера смотрите Xserver(1) и обратитесь к своему экранному менеджеру для получения информации о том, как передать эти параметры.

## Смотрите также

- Руководство Madduck по расширению XKB (архив Wayback Machine)
- How to modify a keyboard layout in Linux - Romano Giannetti's blog

Categories:

- X server (Русский)
- Keyboard configuration (Русский)