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

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Keyboard layout switching and the translation is 69% complete.

Other languages:
English • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

Раскладка клавиатуры отображает сканкоды клавиатуры в символы, отправленные в приложение. Раскладки клавиатуры также могут выполнять более сложные преобразования с помощью так называемых мертвых клавиш, которые не выводят символы самостоятельно, а изменяют вывод последующих ключей. Соответствующая раскладка клавиатуры необходима для поддержки как клавиатур, отличных от QWERTY, так и клавиатур QWERTY для ввода символов вне набора ASCII.

Текстовый режим

OpenRC

The default console keymap is set in /etc/conf.d/keymaps by assigning the appropriate keymap as the value for keymap. The keymap values are defined in /usr/share/keymaps, and most users will use a value from /usr/share/keymaps/i386/qwerty/. Optionally, set the value for the extended_keymaps variable from the appropriate include directory, like /usr/share/keymaps/i386/include. For example, set extended_keymaps="euro2" to get Euro and cent with Alt-Gr on the positions where many keyboards have E and C.

Файл /etc/conf.d/keymapsПример конфигурации
keymap="us"
extended_keymaps=""

Наконец добавьте /etc/init.d/keymaps в уровень запуска boot.

root #rc-update add keymaps boot

Restart keymaps for apply changes

root #rc-service keymaps restart
Заметка
Возможно, потребуется также отредактировать /etc/conf.d/consolefont, чтобы в терминале отображались символы, отличные от ASCII.
Файл /etc/conf.d/consolefontExample configuration for cyrillic font
consolefont="cyr-sun16"

Restart consolefont

root #rc-service consolefont restart

And add to boot runlevel

root #rc-update add consolefont boot

Пользовательская раскладка клавиатуры

Чтобы создать пользовательскую раскладку клавиатуры, просмотрите предоставленные раскладки клавиатуры в /usr/share/keymaps:

user $vi <keymap file>.map
user $gzip <keymap file>.map
root #mv <keymap file>.map /usr/share/keymaps/<some directory>

Вот пример пользовательской раскладки клавиатуры, которая совпадает с раскладкой клавиатуры QWERTY для U.S., за исключением того, что клавиши прямой косой черты и апострофы меняются:

Файл /usr/share/keymaps/i386/qwerty/swap_slash_apostrophe.map.gzПример раскладки
include "us.map"
 
keycode  40 = slash            question
keycode  53 = apostrophe       quotedbl
Предупреждение
Коды клавиш, вероятно, будут отличаться от системы к системе.

Чтобы найти коды клавиш, сопоставленные с клавишами, смотрите вывод dumpkeys:

user $dumpkeys -l

Если клавиша не может быть найдена с использованием указанной выше команды, запустите:

user $showkey

Просто нажмите клавишу, и будет показан ее код. По завершении подождите несколько секунд и showkey закроется.

systemd

systemd использует /etc/vconsole.conf и включает в себя как настройки шрифта терминала, так и настройки раскладки клавиатуры, но не имеет дополнительных настроек, имеющихся в OpenRC. Допустимые значения должны соответствовать тому, что поддерживает OpenRC для соответствующей переменной.

Файл /etc/vconsole.confПример настроек
KEYMAP=pl2
FONT=LatArCyrHeb-16

X11

Modern X11 applications usually use libXklavier ("klavier" being German for "keyboard") and can be configured by using setxkbmap. Furthermore X11 supports much broader sets of keyboard layouts than is supported for virtual terminals. It should be kept in mind that a proper desktop environment will do its own keyboard layout management. There is no need to directly use the aforementioned application but it can come in handy when dealing with broken or lacking keyboard layout management.

KDE4 / Plasma

Откройте System Settings и перейдите к модулю Input Devices.

To make additional languages available in the sddm login manager, edit the file /usr/share/sddm/scripts/Xsetup/ and add the command setxkbmap followed by a comma separated list of the locales you would like to choose from.

For example to enable German as default and prove US as your keyboard layouts add the following:

Файл /usr/share/sddm/scripts/Xsetup
#!/bin/sh
# Xsetup - run as root before the login dialog appears
setxkbmap de,us

Общее (Generic) окружение рабочего стола

Измените ~/.xprofile и вызовите setxkbmap из него или настройте клавиатуру в конфигурационном файле Xorg (примеры смотрите ниже).

Заметка
Последние версии GNOME 3 больше не используют libXklavier, поэтому это может вообще не работать или, скорее всего, переопределяется GNOME. Подобным образом любое другое окружение рабочего стола может также переопределять конфигурацию libXklavier как часть инициализации или изменения раскладки.
Предупреждение
~/.xprofile — это нестандартный файл, заполняемый только при входе в систему через диспетчер экрана, который его поддерживает (тестировалось только на GDM, KDM, LightDM, LXDM и SDDM), и возможно существует специфика, зависящая от дистрибутива, хотя, похоже, все распространенные дистрибутивы, поддерживают этот файл.

Обработчик раскладки клавиатуры lxpanel

lxde-base/lxpanel предоставляет обработчик раскладки клавиатуры в качестве элемента панели.

Lxpanel kyboard layout handler.png

Общий X11

Используя setxkbmap

Эти изменения являются непостоянными и будут сохраняться только до тех пор, пока пользователь не перезапустит X11. Естественно, команда может быть вызвана из скрипта запуска, чтобы установить соответствующие параметры при каждом запуске X-сервера.

Чтобы запросить существующую конфигурацию:

user $setxkbmap -query

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

user $setxkbmap lv

Настройка раскладки клавиатуры, ее варианта и модели:

user $setxkbmap lv apostrophe -model logiultrax

Setting up two keyboard layouts with LED indication:

user $setxkbmap -layout us,ru -option grp:shifts_toggle -option grp_led:caps

It is advised to read xkeyboard-config manual for a full list of keyboard configuration options:

user $LESS=--chop-long-lines man xkeyboard-config

Поиск поддерживаемых раскладок и вариантов или значений других свойств xkb в этом приложении не представляется возможным, хотя большинство из них перечислены в файле /usr/share/X11/xkb/rules/base.lst. Получить самый полный список можно, только просмотрев другие файлы в /usr/share/X11/xkb/. Разумная рекомендация заключается в использовании надлежащего оружения рабочего стола с собственным управлением раскладкой клавиатуры.

Использование общесистемных настроенных раскладок и горячих клавиш

Этот метод рекомендуется для конфигураций без оружения рабочего стола, другими словами, только X11 с оконным менеджером. Создайте файл 10-keyboard.conf и настройте с его помощью необходимые настройки клавиатуры.

Файл /etc/X11/xorg.conf.d/10-keyboard.confПример США и бразильской расскладки
Section "InputClass"
    Identifier "keyboard-all"
    Driver "evdev"
    Option "XkbLayout" "us,br"
    Option "XkbVariant" ",abnt2"
    Option "XkbOptions" "grp:shift_toggle,grp_led:scroll"
    MatchIsKeyboard "on"
EndSection

В приведенном выше примере настраиваются раскладки клавиатуры США и Бразилии с комбинацией клавиш Left Shift + Right Shift для переключения между ними. Бразильская раскладка сигнализируется светодиодом Scroll Lock на клавиатуре.

Дополнительные возможности настройки

Существует множество вариантов и опций, которые можно использовать при настройке сооответствий клавиатуры. Большинство из них можно найти в файле /usr/share/X11/xkb/rules/base.lst.

Например, раскладку США с возможностью записи некоторых международных символов можно настроить с помощью варианта altgr-intl:

Файл /etc/X11/xorg.conf.d/10-keyboard.confAltGr международный вариант раскладки США
...
    Option "XkbLayout" "us,br"
    Option "XkbVariant" "altgr-intl,abnt2"
...

Right Alt используется как модификатор для ввода международных символов.

Xorg предоставляет возможность набирать международные и различные знаки в композиции - это означает, нажать "compose key", за которой следует нажать последовательность символов. Чтобы включить клавишу compose, добавьте опцию compose:<compose_key>:

Файл /etc/X11/xorg.conf.d/10-keyboard.confНастройка клавиши compose
...
Option "XkbOptions" "grp:shift_toggle,grp_led:scroll,compose:sclk"
...

Опция compose:sclk выше, настраивает Scroll Lock в качестве клавиши compose. С помощью этой настройки:

  • Нажмите Scroll Lock затем наберите 'oo' чтобы получить знак градуса '°'
  • Нажмите Scroll Lock затем наберите 'oc' чтобы получить знак копирайта '©'
  • Нажмите Scroll Lock затем наберите ':)' чтобы получить улыбающееся лицо '☺'
  • Нажмите Scroll Lock затем наберите '^2' чтобы получить 2 в верхнем регистре ('²')
  • Нажмите Scroll Lock затем наберите '_2' чтобы получить 2 в нижнем регистре ('₂')
  • Нажмите Scroll Lock затем наберите 'di' чтобы получить знак диаметра '⌀'

... и многое другое. В файле /usr/share/X11/locale/compose.dir перечислены все возможные источники композиций.

Улучшение раскладки клавиатуры X

Это необходимо, когда необходимо внести более значительные изменения в раскладку клавиатуры, например, добавить назначения клавиш или добавить действия к функциональным клавишам. Поскольку такие изменения фактически являются улучшением исходных файлов пакета, рекомендуется использовать epatch_user mechanism, чтобы эти правки сохранялись при следующем обновлении пакета.

Основы

Соответствующий пакет Gentoo - x11-misc/xkeyboard-config. Настройка клавиатуры под X сложнее, чем для виртуальной консоли. Подходящие файлы конфигурации можно найти в /usr/share/X11/xkb в таких подкаталогах:

keycodes
These files associate key codes with symbolic names - it is unlikely that anyone wants to change this.
geometry
This is the physical shape of the keyboard, used by some software for drawing diagrams of it - it is also unlikely that anyone wants to change this.
types
The files here create "types". Used in a key declaration, a type specifies which combinations of shift keys can be used with the key.
symbols
These files specify the actual key assignments.
compat
The files here specify "actions" (such as switching to a virtual terminal), giving them names, which can be assigned to keys.
rules
These files, given parameters such as the keyboard type, and a language, activate the appropriate specifications in the other directories.

Более полное описание файлов в этих каталогах можно найти в Ненадежном Руководстве по конфигурации XKB Дуга Палмера. Оно намного лучше, чем означает его название. Дополнительную документацию можно найти на домашней странице xkeyboard-config по адресу http://www.freedesktop.org/wiki/Software/XKeyboardConfig/freedesktop.org.

Xkb gives keys names like "<AC01>" which means "key in the Alphanumeric area, in row C (i.e. third row from the bottom, the row CapsLock is on), and key number 01, the first key at the left of the row". This key is A in an English layout. Keys in other areas have other names, such as "<FK05>" for F5, or "<LCTL>" for the left control key.

Adding key assignments

As an example, this section will enhance the British English keyboard layout such that typing a, o, or u with AltGr will generate the German umlaut letters ä, ö, and ü. It should also do the Right Thing for the upper case versions. The keys to enhance are A (<AC01>), O (<AD09>) and U (<AD07>). (The character ß is already assigned to AltGr+S.)

The names of the umlauted letters in xkb are "adiaeresis" and so on. These names can be found in the file /usr/include/X11/keysymdef.h, though the leading "XK_"s have to be removed to get the names.

Identify the right file in the symbols directory. Most of these files are named as two letter country codes (such as gb for Great Britain) so guess the one which matches the keyboard layout currently selected in X. In this example, symbols/gb is enhanced.

With the information above, create new entries by copying the existing scheme in symbols/gb. In this example, these entries should be added into the section called "basic". From its content, it is easy to guess that the four items in the braces and brackets within the entry for each key are for regular (without other key combinations), Shift, AltGr, and Shift+AltGr respectively:

Файл /usr/share/X11/xkb/symbols/gbTypical key entry
key <AE02>	{ [         2,   quotedbl,  twosuperior,    oneeighth]	};

After making the additions, the section looks like this:

Файл /usr/share/X11/xkb/symbols/gbExample for enhancing the British English keyboard
default  partial alphanumeric_keys
xkb_symbols "basic" {
 
    // Describes the differences between a very simple en_US
    // keyboard and a very simple U.K. keyboard layout defined by
    // the SVR4 European Language Supplement and sometimes also
    // known as the IBM 166 layout.
 
    include "latin"
 
    name[Group1]="English (UK)";
 
    key <AE02>	{ [         2,   quotedbl,  twosuperior,    oneeighth ]	};
    key <AE03>	{ [         3,   sterling, threesuperior,    sterling ]	};
    key <AE04>	{ [         4,     dollar,     EuroSign,   onequarter ]	};
 
    key <AC11>	{ [apostrophe,         at, dead_circumflex, dead_caron]	};
    key <TLDE>	{ [     grave,    notsign,          bar,          bar ]	};
 
    key <BKSL>	{ [numbersign, asciitilde,   dead_grave,   dead_breve ]	};
    key <LSGT>	{ [ backslash,        bar,          bar,    brokenbar ]	};
 
// Keys inserted by ACM, 2015-10-23.
    key <AD07>  { [         u,          U,   udiaeresis,   Udiaeresis ] };
    key <AD09>  { [         o,          O,   odiaeresis,   Odiaeresis ] };
    key <AC01>  { [         a,          A,   adiaeresis,   Adiaeresis ] };
// End of insertion 2015-10-23
    include "level3(ralt_switch_multikey)"
};

Having saved this file, restart X Windows. A typical desktop environment, XFCE, re-reads the above configuration files each time it starts. Should there be errors, error messages will be written to the normal stderr - if X Windows is started from the command line, stderr will be the virtual terminal it was started from.

Adding actions to function keys

As an example, add the actions "switch to virtual terminal n" (where n > 12) to the function keys F1 - F12 when Ctrl, Alt, and Shift are all selected. The same effect should also occur when AltGr and Fn are selected.

First, search for the file in the symbols directory which handles the existing assignments for the Function keys. This file is symbols/srvr_ctrl. The entry in this file for F1, which is intended to be modified, is:

Файл /usr/share/X11/xkb/symbols/srvr_ctrlExisting entry for F1
key <FK01> {
	type="CTRL+ALT",
	symbols[Group1]= [ F1, F1, F1, F1, XF86_Switch_VT_1 ]
    };

There are two things to note with this entry:

  • It is of type "CTRL+ALT"; it thus takes the standard four shift key settings with Shift and AltGr, plus a fifth setting of Ctrl+Alt. Since the goal is to use Ctrl+Alt+Shift, and there is no suitable existing type, a new one needs to be created.
  • The "action" XF86_Switch_VT_1 is just a defined symbol in the xkb system. Its semantics are given to it by an entry in a file in the compat directory, namely compat/xfree86. There is no symbol XF86_Switch_VT_13 (or higher) - instead, steal the otherwise unused existing symbols F13, F14, ..., F24.
Creating the new type CTRL+ALT+SHIFT

Having located "CTRL+ALT" in types/pc, it is easy enough to copy it, rename the copy to "CTRL+ALT+SHIFT" and extend this to allow the modifier key combination Ctrl+Alt+Shift. The result looks like this:

Файл /usr/share/X11/xkb/types/pcCreating a new type
type "CTRL+ALT+SHIFT" {
        modifiers = Control+Alt+Shift+LevelThree;
        map[None] = Level1;
        map[Shift] = Level2;
        map[LevelThree] = Level3;
        map[Shift+LevelThree] = Level4;
        map[Control+Alt] = Level5;
        map[Shift+Control+Alt] = Level6;
        preserve[Shift] = Shift;
        preserve[Shift+LevelThree] = Shift;
        level_name[Level1] = "Base";
        level_name[Level2] = "Shift";
        level_name[Level3] = "Alt Base";
        level_name[Level4] = "Shift Alt";
        level_name[Level5] = "Ctrl+Alt";
        level_name[Level6] = "Ctrl+Alt+Shift";
    };
Активация символов F13, ..., F24

The symbol XF86_Switch_VT_1 is swiftly located in compat/xfree86. It is a simple matter to copy its form, creating assignments for the symbols F13, ..., F24. The definition for the first of these symbols, F13, in compat/xfree86 then looks like:

Файл /usr/share/X11/xkb/compat/xfree86Assigning an action to a symbol
interpret  F13 {
        action = SwitchScreen(Screen=13, !SameServer);
    };

Analogous definitions for F14, ..., F24 should also be put into the file.

Amending the entries in symbols for keys F1, ..., F12

Now that the new type CTRL+ALT+SHIFT and definitions for the symbols F13, ..., F24 are defined, amend the key definitions for the function keys in symbols/srvr_ctrl. The one for F1 is mentioned below, analogous definitions also need to be inserted for the other function keys:

Файл /usr/share/X11/xkb/symbols/srvr_ctrlRedefinition of function key
key <FK01> {
	type="CTRL+ALT+SHIFT",
	symbols[Group1]= [ F1, F1, F13, F1, XF86_Switch_VT_1, F13 ]
    };

After making these changes to types/pc, compat/xfree86, and symbols/srvr_ctrl, and restarting the X server, switching from X directly to virtual terminals 13 and above is now possible - provided that these have been configured in the /etc/inittab (or systemd equivalent) of course.