Раздел: Админство

Переключение раскладки по Alt+Shift в Archlinux

На офсайте Archlinux на данный момент описано, как настроить переключение раскладок по правому alt или по ctrl+shift.
Решил записать, как сделать привычную alt+shift.

Стандартные раскладки хранятся в директории /usr/share/kbd/keymaps/i386/qwerty/
Различные русские раскладки выглядят так:

cd /usr/share/kbd/keymaps/i386/qwerty/
ls ru*
ru1.map.gz  ru-cp1251.map.gz  ru-ms.map.gz             ruwin_cplk-CP1251.map.gz  ruwin_ctrl-KOI8-R.map.gz   ruwin_ct_sh-UTF-8.map.gz
ru2.map.gz  ru.map.gz         ruwin_alt-CP1251.map.gz  ruwin_cplk-KOI8-R.map.gz  ruwin_ctrl-UTF-8.map.gz    ru_win.map.gz
ru3.map.gz  ru.map.gz_OLD     ruwin_alt-KOI8-R.map.gz  ruwin_cplk-UTF-8.map.gz   ruwin_ct_sh-CP1251.map.gz  ru-yawerty.map.gz
ru4.map.gz  ru_mine.map.gz    ruwin_alt-UTF-8.map.gz   ruwin_ctrl-CP1251.map.gz  ruwin_ct_sh-KOI8-R.map.gz

Можно взять ru.map.gz или ru1.map.gz и немного изменить.
для этого скопируем раскладку, дадим ей новое имя, распакуем и начнём редактировать:

cp ru.map.gz my_rus_altshift.map.gz
gzip -d my_rus_altshift.map.gz
vi my_rus_altshift.map

файл будет содержать что-то вроде:

#-------------------------------------------------------------------------------
keycode   0 =
keycode   1 = Escape
shift           keycode   1 = Escape
alt             keycode   1 = Meta_Escape
altgr                   keycode   1 = Escape
altgr   shift           keycode   1 = Escape
altgr   alt             keycode   1 = Meta_Escape
keycode   2 = one
shift           keycode   2 = exclam
alt             keycode   2 = Meta_one
shift alt       keycode   2 = Meta_exclam
altgr                   keycode   2 = one
altgr   shift           keycode   2 = exclam
altgr   alt             keycode   2 = Meta_one
altgr   shift alt       keycode   2 = Meta_exclam
keycode   3 = two
shift           keycode   3 = at
...
...

в этом файле необходимо найти строку:

 keycode  42 = Shift

и добавить под ней ещё две строки:

alt	keycode	42 =	AltGr_Lock
altgr	alt	keycode	42 =	AltGr_Lock

далее, найти строку:

keycode	56 =	Alt

добавить под ней ещё две строки:

shift	keycode	56 =	AltGr_Lock
altgr	shift	keycode	56 =	AltGr_Lock

далее, найти строку:

keycode 97 = Control

убедиться, что она выглядит именно так. Если не так — изменить.

после сохранения файла — запаковать обратно:

gzip my_rus_altshift.map

Далее, загружаем нашу раскладку:

loadkeys my_rus_altshift.map.gz

Устанавливаем кириллический шрифт для консоли:

setfont cyr-sun16

и, добавляем соответствующую информацию в /etc/rc.conf:

LOCALE="en_US.UTF-8"
KEYMAP="my_rus_altshift"
CONSOLEFONT="cyr-sun16"
USECOLOR="yes"

я здесь использую английскую локаль, так как не вижу необходимости в криворусском переводе в консоли. Шрифт можно выбрать и другой, посмотреть доступные для установки шрифты можно командой:

pacman -Ss fonts

Наличие кириллического шрифта и локали UTF-8 гарантирует русские буквы, а не кракозябры.

Прикладываю файл раскладки: ru1.map.gz

Комментировать

Комментарии

пятнадцать + шесть =

  1. Сделал все, как у вас написано. Раскладки переключаются так — английская нормальная -> русская нормальная -> русский капс -> английский капс -> английская нормальная.
    Не могли бы вы выложить свой файл my_rus_altshift.map?

  2. @Страга Севера
    Странно,
    у меня переключение раскладок не связано с переключением регистра.
    Файл прикрепил в конце статьи.
    Отпишитесь, если получилось, в чём была причина.

    Возможно, что вы изначально выбрали для модифицирования раскладку, подразумевающую именно такой порядок действий.

  3. Все работает, спасибо большое! Правда при переключении на русскую раскладку включение капса не дает ожидаемого эффекта, но в зажатым шифтом регистр меняется. А так капс не критичен. Еще раз огромное спасибо!