Xorg (Українська)/Keyboard configuration (Українська)
У цій статті мова йде про налаштування клавіатури для Xorg. Щоб дізнатись про складніші теми, на зразок модифікування розкладки чи перевизначення клавіш, прочитайте X keyboard extension та Extra keyboard keys відповідно.
Xorg сервер використовує X keyboard extension (Клавіатурне розширення X) (XKB) для визначення розкладок клавіатури. Також, можна використати xmodmap щоб отримати прямий доступ до внутрішньої таблиці кодів клавіш, проте її не варто використовувати для складних робіт. Окрім цього, можна використати localectl із systemd щоб визначити розкладку клавіатури як для Xorg, так і для віртуальної консолі.
Перегляд налаштувань клавіатури
Ви можете використати цю команду, щоб дізнатись, які налаштування 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 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).
Keyboard - layout
. Прочитайте Fcitx#Input methods configuration. Натомість, користувачі IBus мають увімкнути параметр "Use system keyboard layout" в Preference -> Advanced якщо вони користуються файлами налаштувань X, або ж виставити розкладку вручну через setxkbmap.Використання setxkbmap
Зміни, зроблені setxkbmap стосуються лише одного сеансу роботи X, їх можна зробити постійними в xinitrc або в xprofile. Цим ви перезапишете загальносистемні налаштування, задавання яких описане в розділі #Використання файлів налаштування X. Проте, налаштування сторонніх клавіатур усе одно не будуть зберігатись якщо не задати їх id в setxkbmap. Або ж якщо це основна клавіатура X сервера.
Використовується він ось так (див. setxkbmap(1)):
$ setxkbmap [-model xkb_model] [-layout xkb_layout] [-variant xkb_variant] [-option xkb_options]
-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
.
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)