- Linux. Настройка клавиатуры
- Почему я захотел изменить свою клавиатуру?
- Настройка переключения раскладки
- Ациклическое переключение раскладок
- Замечание
- Изменение клавиш
- Двоеточие и точка с запятой
- ESC и CapsLock
- Alt и Win
- Модификаторы
- Назначение модификатора как второе значение клавиши
- Дальнейшие изменения
- Замечание
- Интересный вариант BackSpace напоследок
- P.S.
- Переключение раскладки через консоль
Linux. Настройка клавиатуры
Можно пользоваться и стандартными настройками, но иногда внесенные изменения дают возможность набирать быстрее (это, конечно, не слепая печать, но все же), совершать меньше ошибок, меньше переключать раскладку.
Почему я захотел изменить свою клавиатуру?
Во-первых, когда я начал использовать vim как основной редактор, я понял, что не хочу каждый раз тянуться к ESC . Кроме того, я писал в основном на питоне, поэтому ; нажимал сильно реже, чем : , а в vim разница стала более явной.
Во-вторых, через некоторое время я стал пользоваться вимовскими комбинациями для навигации в браузере, дальше — тайловый оконный менеджер i3 , где они тоже использовались, и хотелось перейти на них везде (вместо обычных стрелок, например, в файловом менеджере).
В-третьих, когда начал писать конспекты на TeX в vim , я понял, что могу реально упростить и ускорить этот процесс; если английская и русская раскладки будут больше похожи друг на друга, то я смогу вводить одинаковые символы (например, точку, запятую, кавычки, доллар) одинаково. Плюс приходится часто менять язык, поэтому надо это делать быстро, надежно и удобно.
Настройка переключения раскладки
Что же, начнем. Сначала разберемся, как можно настроить смену раскладки клавиатуры.
- Первый способ. Можно воспользоваться какой-нибудь программой, например, gnome-tweaks :
здесь мы можем выбрать один из вариантов, предлагаемых нам разработчиками.Главное — мы не можем создать свой вариант. Давайте научимся делать и это.
- Второй способ.
Посмотрим, как то же самое можно сделать руками, и чего еще можно добиться.
Давайте поставим переключение на правый Alt (он же AltGr ):
$ setxkbmap -layout us,ru -option grp:toggle
Но где можно узнать, какие еще есть варианты, и как создать свои? Все файлы лежат /usr/share/X11/xkb/symbols/ . И наши переключения находятся в /usr/share/X11/xkb/symbols/group . Вот так выглядит выбранный вариант:
partial modifier_keys xkb_symbols "toggle" < virtual_modifiers AltGr; key < symbols[Group1] = [ ISO_Next_Group ], virtualMods = AltGr >; >;
Ациклическое переключение раскладок
Изменим циклическое переключение по AltGr на ациклическое: AltGr переключает на латинскую раскладку, Shift+AltGr — на русскую.
Перед тем как что-то менять, посмотрим на текущие настройки:
$ setxkbmap -layout us,ru -print
Должны получить что-такое ( pc105 может отличаться в зависимости от количества клавиш на вашей клавиатуре):
xkb_keymap < xkb_keycodes < include "evdev+aliases(qwerty)" >; xkb_types < include "complete" >; xkb_compat < include "complete" >; xkb_symbols < include "pc+us+ru:2+inet(evdev)" >; xkb_geometry < include "pc(pc105)" >; >;
Теперь запишем это в конфигурационный файл ~/.config/xkb/config .
В файле /usr/share/X11/xkb/symbols/group можно найти аналогичный вариант с CapsLock , откуда можно понять, что на us будет переключать ISO_First_Group , а на ru — ISO_Second_Group .
говорит, что клавиша при обычном нажатии вызывает ISO_First_Group , а вместе с Shift — ISO_Last_Group .
Изменим в только что созданном файле xkb_symbols :
xkb_keymap < xkb_keycodes < include "evdev+aliases(qwerty)" >; xkb_types < include "complete" >; xkb_compat < include "complete" >; xkb_geometry < include "pc(pc105)" >; xkb_symbols "my" < include "pc+us+ru:2+inet(evdev)" key < [ ISO_First_Group, ISO_Last_Group ] >; >; >;
Проверим, что у нас получилось. Загружаем конфиг:
$ xkbcomp $HOME/.config/xkb/config $DISPLAY
Теперь язык должен переключаться по заданным комбинациям.
Замечание
Это очень удобно, когда набираешь текст, используя сразу две раскладки (например, TeX ), потому что, переключение происходит часто и гораздо проще каждый раз когда начинаешь писать русский текст нажимать нужные клавиши, чем проверять, какой язык стоит сейчас, и переключать, если нужно. Просто меньше тратишь умственных сил, меньше совершаешь ошибок.
Еще один плюс ациклического переключения — можно больше не использовать никаких индикаторов.
Изменение клавиш
Двоеточие и точка с запятой
Поменяем местами двоеточие и точку с запятой. Как задать значение мы уже знаем, осталось понять как называются символы. Это можно посмотреть в тех же файлах /usr/share/X11/xkb/symbols/ . Выберем файл us и найдем нужную клавишу:
Осталось записать в наш конфигурационный файл в обратном порядке.
ESC и CapsLock
Поменяем ESC и CapsLock . В той же директории в файле capslock можно найти:
hidden partial modifier_keys xkb_symbols "swapescape" < key < [ Escape ] >; key < [ Caps_Lock ] >; >; hidden partial modifier_keys xkb_symbols "escape" < key < [ Escape ] >; >;
partical — специальные куски, которые мы можем включать в другие раскладки.
Теперь либо пишем include «swapescape» , либо просто копируем код.
Alt и Win
Еще аналогично можно поменять, например, левый Alt и Win , что особенно удобно в i3wm , если поставить главный модификатор на Win , то он будет ближе к остальной клавиатуре, и плюс мы не ограничим себя в использовании Alt в комбинациях различный программ (браузер, файловый менеджер. ).
Модификаторы
Для чего вообще они нужны? Можно задать комбинации, которые будут позволять нам быстрее и удобнее набирать какие-то символы или вызывать какое-то действие, помещая поверх других, то есть эти комбинации не будут пересекаться с уже созданными или с комбинациями заданными системой.
Существует два дополнительных уровня: level3 , level5 . И еще комбинации с Shift .
Сделаем так, чтобы клавиша CapsLock в комбинации с h, j, k, l давала эффект стрелки. Тогда не нужно будет каждый раз тянуться ним.
Назначим модификатор (мы уже решили поставить туда ESC , но можно сделать и то и другое: об этом далее):
Если мы хотим назначить для разных раскладок разное значение, то сначала нужно их определить:
name[group1] = "English (US)"; name[group2] = "Russian";
Теперь нужно настроить клавиши h, j, k, l. Сначала узнаем их имя — тоже можно посмотреть файл раскладки, это несложно. Их зовут ,… . Какие команды вызывают стрелки можно узнать совершенно аналогично. Дальше пропишем поведение в комбинации с модификатором:
При нормальном нажатии будет обычная буква, при нажатии с шифтом — заглавная, с модификатором третьего уровня — стрелки.
Назначение модификатора как второе значение клавиши
Кроме стрелок можно назначить на третий слой символы или другие операции.
Давайте сделаем, чтобы кроме функции модификатора клавиша CapsLock выполняла и предназначенную ей миссию ранее — была ESC .
Для этого нам понадобится xcape , которая позволяет назначить на на клавишу значение, которое она будет иметь, если нажать ее не в комбинации. Еще есть полезная функция: можно настроить время, после истечения которого ее эффект отменяется.
Как я уже обещал, мы сделаем так, чтобы при однократном нажатии клавиши CapsLock вызывался ESC , а в комбинациях выступала в роли модификатора третьего уровня.
Для этого нужно выполнить
$ xcape -t -e "первое значение=втрое значение"
Я использую интервал 500 миллисекунд. Для нашей цели:
$ xcape -t 500 -e "ISO_Level3_Shift=Escape"
Дальнейшие изменения
Когда я пишу в TeX , я использую достаточно много одинаковых символов, но в разных раскладках. Поэтому появилась идея сделать их максимально похожими. В раскладках по умолчанию сильно отличаются положения точки, запятой, кавычек, квадратных и фигурных скобок, вопросительных знаков, различных слэшей.
- Поставим редко используемые русские буквы на крайних правых клавишах на третий слой других букв.
Схема была такая:
Для достижения такого эффекта добавляем в конфиг (здесь для у/ю, для остальных аналогично, названия букв русского алфавита можно посмотреть, где и все остальное):
key < type[group2]="FOUR_LEVEL", symbols[group2]=[Cyrillic_ha, Cyrillic_HA, bracketleft, braceleft] >; key < type[group2]="FOUR_LEVEL", symbols[group2]=[Cyrillic_hardsign, Cyrillic_HARDSIGN, bracketright, braceright] >; key < type[group2]="FOUR_LEVEL", symbols[group2]=[Cyrillic_zhe, Cyrillic_ZHE, colon, semicolon] >; key < type[group2]="FOUR_LEVEL", symbols[group2]=[Cyrillic_e, Cyrillic_E, apostrophe, quotedbl] >; key < type[group2]="FOUR_LEVEL", symbols[group2]=[Cyrillic_be, Cyrillic_BE, comma, less] >; key < type[group2]="FOUR_LEVEL", symbols[group2]=[Cyrillic_yu, Cyrillic_YU, period, greater] >;
Плюс к этому добавляется возможность сделать одинаковыми и символы на цифрах, так как и кавычки, и двоеточие, и точка с запятой будет на других клавишах.
Замечание
Аналогично можно добавлять пятый слой, хотя пока лично я не испытываю никакой нужды — вполне хватает третьего.
Интересный вариант BackSpace напоследок
А может хватит тянуться далеко-далеко в дальний угол клавиатуры?
Поставим-ка BackSpace на $mod3+Space ( $mod3 наш модификатор третьего уровня)!
P.S.
Все настройки в принципе применимы для любых Linux дистрибутивов, использующих X.
Полные конфиги можно найти на GitHub.
Этот пост стал для меня отправной точкой к пониманию того, как можно и нужно настроить клавиатуру.
Переключение раскладки через консоль
Есть ли возможность сменить раскладку через консоль? Я хочу дописать строчку кода в свой скрипт блокировки экрана, которая будет переключать раскладку на английскую. Я пробывал использовать setxkbmap us , но после ее ввода возможности переключиться обратно на русский через alt-shift уже нет. Есть какие нибудь альтернативы? Желательно не требующие скачивания дополнительных пакетов.
Вы про какую ракладку? Под консолью обыно подразумевают ядерную консоль (/dev/tty*), а не X-овый эмулятор терминала. Но, если работает setxkbmap, то пробуйте команду xkb-switch (которую, скорее всего, придётся установить в систему).
Да, я про Х-овый эмулятор говорю. setxkbmap работает — раскладка меняется на ту которую я указываю, но после ввода setxkbmap us на русскую раскладку я смогу переключиться только через setxkbmap ru alt-shift не сработает
Естественно, ведь это команды не переключения раскладки, а настройки списка раскладок.
Понятно, а есть команда для переключения раскладки? Все что гуглится получается для настройки списка раскладок
Если очень хочется использовать именно setxkbmap, то setxkbmap ru,us и setxkbmap us,ru . Если такого требования нет, то уже упоманутый xkb-switch -n .
Вот что мне поиск по AUR выдал:
$ yaourt -Ss xkb-switch aur/xkb-switch 1.6.0-1 (16) (0,93) Program that allows to query and change the XKB layout state aur/xkb-switch-git 1.6.0.r12.gba0ee5d-1 (6) (0,16) Program that allows to query and change the XKB layout state aur/xkb-switch-i3 1.8.1-1 (1) (0,01) Program that allows to query and change the XKB layout state (with i3wm auto-switch mode) aur/xkb-switch-i3-git 1.7.1.r0.g19d223f-1 (1) (0,01) Program that allows to query and change the XKB layout state (with i3wm auto-switch mode)
Какие-то версии даже с какой-то специальной поддержкой i3.
Сейчас соберу пакет, гляну.
Ну собственно, работает как задумано.