Переключение раскладки клавиатуры
Раскладка клавиатуры отображает сканкоды клавиатуры в символы, отправленные в приложение.
Соответствующая раскладка клавиатуры необходима для поддержки как клавиатур, отличных от 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.
keymap="us"
extended_keymaps=""
И, наконец, перезапустите keymaps, чтобы применить изменения, и добавьте keymaps в уровень запуска boot.
root #
rc-service keymaps restart
root #
rc-update add keymaps boot
Если нужно отображать в терминале символы за пределами таблицы ASCII, измените в /etc/conf.d/consolefont используемый шрифт:
consolefont="cyr-sun16"
Перезапустите consolefont и добавьте его в уровень загрузки boot:
root #
rc-service consolefont restart
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., за исключением того, что клавиши прямой косой черты и апострофы меняются:
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 для соответствующей переменной.
KEYMAP=pl2
FONT=LatArCyrHeb-16
X11
Modern X11 applications usually use x11-libs/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.
KDE Plasma
Откройте System Settings и перейдите к модулю Input Devices.
To make additional languages available in the SDDM login manager, follow instructions on adding custom keymap.
Общее (Generic) окружение рабочего стола
Измените ~/.xprofile и вызовите setxkbmap из него или настройте клавиатуру в конфигурационном файле Xorg (примеры смотрите ниже).
Последние версии GNOME 3 больше не используют x11-libs/libxklavier, поэтому это может вообще не работать или, скорее всего, переопределяется GNOME. Подобным образом любое другое окружение рабочего стола может также переопределять конфигурацию x11-libs/libxklavier как часть инициализации или изменения раскладки.
~/.xprofile — это нестандартный файл, заполняемый только при входе в систему через диспетчер экрана, который его поддерживает (тестировалось только на GDM, LightDM, LXDM и SDDM), и возможно существует специфика, зависящая от дистрибутива, хотя, похоже, все распространенные дистрибутивы, поддерживают этот файл.
Общий X11
Используя setxkbmap
Эти изменения являются непостоянными и будут сохраняться только до тех пор, пока пользователь не перезапустит X11. Естественно, команда может быть вызвана из скрипта запуска, чтобы установить соответствующие параметры при каждом запуске X-сервера.
Чтобы запросить существующую конфигурацию:
user $
setxkbmap -query
Настройка раскладки клавиатуры:
user $
setxkbmap lv
Настройка раскладки клавиатуры, ее варианта и модели:
user $
setxkbmap lv apostrophe -model logiultrax
Установка двух раскладок со светодиодной индикацией:
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 и настройте с его помощью необходимые настройки клавиатуры.
Section "InputClass"
Identifier "keyboard-all"
Driver "evdev"
Option "XkbLayout" "us,br"
Option "XkbVariant" ",abnt2"
Option "XkbOptions" "grp:shifts_toggle,grp_led:scroll"
MatchIsKeyboard "on"
EndSection
В приведенном выше примере настраиваются раскладки клавиатуры США и Бразилии с комбинацией клавиш Left Shift + Right Shift для переключения между ними. Бразильская раскладка сигнализируется светодиодом Scroll Lock на клавиатуре.
When using a Cyrillic language layout and the keyboard has “Windows®” keys, it may be necessary to add responsive
",winkeys"
to XkbVariant
option.Дополнительные возможности настройки
Существует множество вариантов и опций, которые можно использовать при настройке сооответствий клавиатуры. Большинство из них можно найти в файле /usr/share/X11/xkb/rules/base.lst.
Например, раскладку США с возможностью записи некоторых международных символов можно настроить с помощью варианта altgr-intl
:
...
Option "XkbLayout" "us,br"
Option "XkbVariant" "altgr-intl,abnt2"
...
Right Alt используется как модификатор для ввода международных символов.
Xorg предоставляет возможность набирать международные и различные знаки в композиции - это означает, нажать "compose key", за которой следует нажать последовательность символов. Чтобы включить клавишу compose, добавьте опцию compose:<compose_key>
:
...
Option "XkbOptions" "grp:shifts_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
Это необходимо, когда необходимо внести более значительные изменения в раскладку клавиатуры, например, добавить назначения клавиш или добавить действия к функциональным клавишам. Поскольку такие изменения фактически являются улучшением исходных файлов пакета, рекомендуется использовать механизм пользовательских патчей, чтобы эти правки сохранялись при следующем обновлении пакета.
Основы
Соответствующий пакет 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:
key <AE02> { [ 2, quotedbl, twosuperior, oneeighth] };
After making the additions, the section looks like this:
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:
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 symbolXF86_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:
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:
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:
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.
See also
- Key repeat rate — controls how quickly a key press on the keyboard will repeat if the key is pressed and held for a period of time.