Linux. Настройка клавиатуры

Для чего вообще специально настраивать клавиатуру?


Можно пользоваться и стандартными настройками, но иногда внесенные изменения дают возможность набирать быстрее (это, конечно, не слепая печать, но все же), совершать меньше ошибок, меньше переключать раскладку...


Почему я захотел изменить свою клавиатуру?


Во-первых, когда я начал использовать vim как основной редактор, я понял, что не хочу каждый раз тянуться к ESC. Кроме того, я писал в основном на питоне, поэтому ; нажимал сильно реже, чем :, а в vim разница стала более явной.


Во-вторых, через некоторое время я стал пользоваться вимовскими комбинациями для навигации в браузере, дальше — тайловый оконный менеджер i3, где они тоже использовались, и хотелось перейти на них везде (вместо обычных стрелок, например, в файловом менеджере).


В-третьих, когда начал писать конспекты на TeX в vim, я понял, что могу реально упростить и ускорить этот процесс; если английская и русская раскладки будут больше похожи друг на друга, то я смогу вводить одинаковые символы (например, точку, запятую, кавычки, доллар) одинаково. Плюс приходится часто менять язык, поэтому надо это делать быстро, надежно и удобно.


Настройка переключения раскладки


Что же, начнем. Сначала разберемся, как можно настроить смену раскладки клавиатуры.


  • Первый способ. Можно воспользоваться какой-нибудь программой, например, gnome-tweaks:
    здесь мы можем выбрать один из вариантов, предлагаемых нам разработчиками.
    Пример `gnome-tweaks` для Ubuntu
    Главное — мы не можем создать свой вариант. Давайте научимся делать и это.


  • Второй способ.
    Посмотрим, как то же самое можно сделать руками, и чего еще можно добиться.
    Давайте поставим переключение на правый 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 <RALT> {
        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, а на ruISO_Second_Group.


Вот такая строчка


key <CAPS> { [ ISO_First_Group, ISO_Last_Group ] }; 

говорит, что клавиша <CAPS> при обычном нажатии вызывает ISO_First_Group, а вместе с ShiftISO_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 <RALT> { [ ISO_First_Group, ISO_Last_Group ] }; 
    };
};

Проверим, что у нас получилось. Загружаем конфиг:


$ xkbcomp $HOME/.config/xkb/config $DISPLAY

Теперь язык должен переключаться по заданным комбинациям.


Замечание


Это очень удобно, когда набираешь текст, используя сразу две раскладки (например, TeX), потому что, переключение происходит часто и гораздо проще каждый раз когда начинаешь писать русский текст нажимать нужные клавиши, чем проверять, какой язык стоит сейчас, и переключать, если нужно. Просто меньше тратишь умственных сил, меньше совершаешь ошибок.


Еще один плюс ациклического переключения — можно больше не использовать никаких индикаторов.


Изменение клавиш


Двоеточие и точка с запятой


Поменяем местами двоеточие и точку с запятой. Как задать значение мы уже знаем, осталось понять как называются символы. Это можно посмотреть в тех же файлах /usr/share/X11/xkb/symbols/. Выберем файл us и найдем нужную клавишу:


key <AC10> { [ semicolon, colon ] };      

Осталось записать в наш конфигурационный файл в обратном порядке.


ESC и CapsLock


Поменяем ESC и CapsLock. В той же директории в файле capslock можно найти:


hidden partial modifier_keys
xkb_symbols "swapescape" {
    key <CAPS> { [ Escape ] };
    key <ESC>  { [ Caps_Lock ] };
};
hidden partial modifier_keys
xkb_symbols "escape" {
    key <CAPS> { [ Escape ] };
};

partical — специальные куски, которые мы можем включать в другие раскладки.
Теперь либо пишем include "swapescape", либо просто копируем код.


Alt и Win


Еще аналогично можно поменять, например, левый Alt и Win, что особенно удобно в i3wm, если поставить главный модификатор на Win, то он будет ближе к остальной клавиатуре, и плюс мы не ограничим себя в использовании Alt в комбинациях различный программ (браузер, файловый менеджер...).


Модификаторы


Для чего вообще они нужны? Можно задать комбинации, которые будут позволять нам быстрее и удобнее набирать какие-то символы или вызывать какое-то действие, помещая поверх других, то есть эти комбинации не будут пересекаться с уже созданными или с комбинациями заданными системой.


Существует два дополнительных уровня: level3, level5. И еще комбинации с Shift.


Сделаем так, чтобы клавиша CapsLock в комбинации с h, j, k, l давала эффект стрелки. Тогда не нужно будет каждый раз тянуться ним.


Назначим модификатор (мы уже решили поставить туда ESC, но можно сделать и то и другое: об этом далее):


key <CAPS> { [ ISO_Level3_Shift ] };

Если мы хотим назначить для разных раскладок разное значение, то сначала нужно их определить:


name[group1] = "English (US)";
name[group2] = "Russian";

далее


key <CAPS> {
    symbols[group1] = [ ISO_Level3_Shift ],
    symbols[group2] = [ Caps_Lock ]
}

Теперь нужно настроить клавиши h, j, k, l. Сначала узнаем их имя — тоже можно посмотреть файл раскладки, это несложно. Их зовут <AC06>,… <AC09>. Какие команды вызывают стрелки можно узнать совершенно аналогично. Дальше пропишем поведение в комбинации с модификатором:


key <AC06> { [ h, H, KP_Left  ] };
key <AC07> { [ j, J, KP_Down  ] };
key <AC08> { [ k, K, KP_Up    ] };
key <AC09> { [ l, L, KP_Right ] };

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


Назначение модификатора как второе значение клавиши


Кроме стрелок можно назначить на третий слой символы или другие операции.
Давайте сделаем, чтобы кроме функции модификатора клавиша CapsLock выполняла и предназначенную ей миссию ранее — была ESC.


Для этого нам понадобится xcape, которая позволяет назначить на на клавишу значение, которое она будет иметь, если нажать ее не в комбинации. Еще есть полезная функция: можно настроить время, после истечения которого ее эффект отменяется.


Как я уже обещал, мы сделаем так, чтобы при однократном нажатии клавиши CapsLock вызывался ESC, а в комбинациях выступала в роли модификатора третьего уровня.


Для этого нужно выполнить


$ xcape -t <время в миллисекундах> -e "первое значение=втрое значение"

Я использую интервал 500 миллисекунд. Для нашей цели:


$ xcape -t 500 -e "ISO_Level3_Shift=Escape"

Дальнейшие изменения


Когда я пишу в TeX, я использую достаточно много одинаковых символов, но в разных раскладках. Поэтому появилась идея сделать их максимально похожими. В раскладках по умолчанию сильно отличаются положения точки, запятой, кавычек, квадратных и фигурных скобок, вопросительных знаков, различных слэшей...


Здесь было две идеи:


  1. Поставим редко используемые русские буквы на крайних правых клавишах на третий слой других букв.
    Схема была такая:


    Клавиша Третий слой
    у ю
    в б
    ь ъ
    з ж
    щ х

    Для достижения такого эффекта добавляем в конфиг (здесь для у/ю, для остальных аналогично, названия букв русского алфавита можно посмотреть, где и все остальное):


    key <AD03> {                                            
    type = "ALPHABETIC",
    type[group2] = "FOUR_LEVEL",
    symbols[group2] = [Cyrillic_u, Cyrillic_U, Cyrillic_yu, Cyrillic_YU]
    };

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


  2. Этот вариант я использую и сейчас: давайте оставим русские буквы на своих местах, а на третий слой на них назначим те символы, которые стоят на них на английской раскладке.
    Тогда мы сможем нажимать одинаковые клавиши, но с модификатором (причем, если мы не назначим что-то другое поверх символов а английской раскладке, то ничего не случиться, если мы будем нажимать модификатор и в ней тоже).
    Получаем такую схему:


    key <AD11> {
    type[group2]="FOUR_LEVEL",
    symbols[group2]=[Cyrillic_ha, Cyrillic_HA, bracketleft, braceleft]
    };
    key <AD12> {
    type[group2]="FOUR_LEVEL",
    symbols[group2]=[Cyrillic_hardsign, Cyrillic_HARDSIGN, bracketright, braceright]
    };
    key <AC10> {
    type[group2]="FOUR_LEVEL",
    symbols[group2]=[Cyrillic_zhe, Cyrillic_ZHE, colon, semicolon]
    };
    key <AC11> {
    type[group2]="FOUR_LEVEL",
    symbols[group2]=[Cyrillic_e, Cyrillic_E, apostrophe, quotedbl]
    };
    key <AB08> {
    type[group2]="FOUR_LEVEL",
    symbols[group2]=[Cyrillic_be, Cyrillic_BE, comma, less]
    };
    key <AB09> {
    type[group2]="FOUR_LEVEL",
    symbols[group2]=[Cyrillic_yu, Cyrillic_YU, period, greater]
    };

    Еще можем поставить в русской раскладке слэш и вопросительный знак туда, где они стоят в английской.


    key <AB10> {
    symbols[group2]=[slash, question]
    };

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


    key <AE03> { [ 3, numbersign, number, apostrophe ] };
    key <AE04> { [ 4, dollar ] };
    key <AE06> { [ 6, asciicircum ] };
    key <AE07> { [ 7, ampersand ] };

    И главное, что это реально упростило процесс набора текста.



Замечание


Аналогично можно добавлять пятый слой, хотя пока лично я не испытываю никакой нужды — вполне хватает третьего.


Интересный вариант BackSpace напоследок


А может хватит тянуться далеко-далеко в дальний угол клавиатуры?
Поставим-ка BackSpace на $mod3+Space ($mod3 наш модификатор третьего уровня)!


key <SPCE> { [ space, space, BackSpace, BackSpace ] };

P.S.


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


Полные конфиги можно найти на GitHub.


Этот пост стал для меня отправной точкой к пониманию того, как можно и нужно настроить клавиатуру.

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 50

    +3

    В виме также можно вместо Esc нажимать Ctrl+[
    Очень удобно, если Caps и левый Ctrl поменяны местами

      0

      Спасибо, очень простым языком написано, в отличие от многих других руководств. Придется самому подумать, как настроить клавиши под себя, потому что тот же правый Alt у меня много лет используется в качестве Compose key для ввода длинного тире, кавычек-ёлочек, градусов, дробей, и символов, которые нужны, напримерм, в испанском, на котором часто пишу. В shell и других программах использую для перемещения вместо клавиш-стрелок (которые неудобны на любой клавиатуре) стандартные Ctrl-p, Ctrl-j и прочие сочетания (никак не могу переучить себя на постоянно использование режима vim, которые есть во всех оболочках — старые привычки умирают с трудом).

        0

        У меня правый альт — для третьего-четвёртого слоёв. При включении в настройках клавиатуры дополнительных типографских символов это даёт раскладку, близкую к раскладке Ильи Бирмана. А в роли Cоmpose — правая виндовая клавиша и с её помощью я ввожу то, чего нет в третьем-четвёртом слое.

          0

          правая win есть далеко не на всякой клавиатуре (например, её нет обычно на ноутбуках)

          0
          на всякий случай, вдруг пригодится: испытываю наслаждение от набора испанского текста с браузерным плагином Google Input Tools.
            0

            А в чем преимущество? Я уже привык набирать с compose, к тому же набирать приходится не только в браузере.


            Кстати, никогда не интересовался, как собственно в Испании текст набирают. Возможно, проще добавить третью раскладуку.

              0
              Не только в браузере — это да, не покатит.
              преимущество в том, что физическая клавиатура не обязательна, можно вывести виртуальную на экран. Если набирать надо немного и преимущественно — в браузере, то решение отличное. Очень кросс-платформенное, например :-)
          0
          Спасибо! Нубский вопрос для полноты: куда правильно прописать загрузку этого конфига дабы не затронуть других пользователей? Походил по связанным статьям — нашел только о скрипте в /etc/X11/Xsession.d/, но это же для всех.
            +1

            В ~/.xsessionrc

              0
              Попробовал — xkbcomp явно отрабатывает (в .xsession-errors появляются те же «Warning: No symbols defined for ...» что и при ручном запуске), однако эффекта никакого (вручную из терминала всё работает). Подозреваю что Cinnamon что-то переопределяет позже (хотя в его настройках отключил назначение клавиш смены раскладок — это и пытаюсь сделать, свою комбинацию). Можно конечно в /usr/share/X11/xkb/symbols/group отредактировать любую из предлагаемых Cinnamonом комбинацию, но хочется сделать красиво, ищу дальше.
                0
                Warning: No symbols defined for ...»

                Можно игнорировать


                Cinnamon что-то переопределяет позже

                Вполне возможно. У меня AwesomeWM, он не умничает так :)

                  +1
                  Вдруг кому полезно будет: вместо гонок со стартом Cinnamonа решил добавить новую комбинацию смены раскладок (других целей не преследовалось) в меню настроек. Cinnamonовский апплет настроек клавиатуры (он такой же, как на картинке в статье) базируется на libgnomekbd, так что метод должен работать не только на Cinnamon. Апплет не содержит жестко забитого списка комбинаций, а собирает его на лету из конфигов xkb.
                  В /usr/share/X11/xkb/symbols/group сделал под новым именем копию конфига наиболее близкой комбинации, поправил коды клавиш на нужные. Далее поиском по имени исходной комбинации нашел все её упоминания в файлах в /usr/share/X11/xkb/ (нашлось несколько файлов разных форматов, в том числе xml-подобный список комбинаций с текстами для пунктов меню настроек) и по аналогии добавил везде свою новую комбинацию. Новый пункт сразу появился в меню и заработал как ожидалось.
              0
              А теперь все это на гитхаб, чтобы после переезда накатить обратно в одно движение
                0
                Поставим-ка BackSpace на $mod3+Space ($mod3 наш модификатор третьего уровня)!

                Кстати, может быть более полезно так (неразрывный пробел иногда нужен):


                    replace key <SPCE> {
                        type="THREE_LEVEL",
                        symbols[Group1]= [ space, BackSpace, nobreakspace ]
                    };

                Получается $mod3+Space == неразрывный пробел (иногда нужен); Shift+Space == Backspace.
                "THREE_LEVEL" указывает, что $mod3+Shift и без шифта не различаются.


                Ну или поменять местами BackSpace и nobreakspace, если так удобнее.

                  0
                  Все это замечательно, только если не работаешь на разных компьютерах, в том числе и не своих. В vim, кстати можно выходить из edit по ctrl+[.
                  А вот идея с capslock вместо левого ctrl мне нравится. У меня как раз давно левый ctrl перестал работать из-за пролитого пива.
                    0
                    setxkbmap

                    Крайне плохо дружится с десктопными окружениями. И Gnome и KDE любят вставлять свои приколы, поэтому если поковыряться в setxkbmap может внезапно перестать работать управление клавиатурой которое в системных настройках установлено.
                    Сейчас адекватно можно использовать D-Bus интерфейсы:
                    Gnome:


                    org.gnome.Shell.Eval "imports.ui.status.keyboard"

                    KDE:


                    org.kde.keyboard /Layouts
                      0
                      А это куда нужно писать?
                      0

                      я пользуюсь шифт-лайк переключением между языками (назначил правый Альт как переключающий между языками, циклически:


                      допустим раскладка сейчас на русском: пока удерживаем правый альт — она на английском. И наоборот).


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

                        0

                        Давно не правил клавиши под linux, но вроде большую часть из описанного можно реализовать силами Sxhkd. Один конфигурационный файл править или закидывать на новую систему гораздо проще, чем десяток файлов, и он отлично дружит со всеми окружениями.
                        Аналогично под виндовс можно сделать один конфиг силами Ahk.
                        Что касается радикального изменения клавиш это здорово ровно до того момента, пока не приходится периодически работать за другими компами или дать доступ к своему: презентации, удаленка, тонкие клиенты, браузер для супруги и т д. Эффективнее или перейти на другую раскладку а-ля дворак, которую можно моментально использовать или потренировать классическую, например, вот тренажер для питона, возможно просто не полноценно используете десятипальцевый набор.


                        Ну и стоит подобрать более удобную клавиатуру. Сам являюсь сторонником vim биндов и использую их повсеместно и 60% клавиатуры очень хорошо для этого подходят — тянуться легко до любых клавиш. Посоветую IKBC Poker, которой сам пользуюсь: программируемый слой, физический переключатель раскладок (Qwerty, Dvorak, Colemak, Workman) ну и размер идеальный. Раз настроить свой слой и на любой машине чувствуешь себя комфортно без лишних манипуляций.

                          0

                          Как можно настроить, чтобы на входе в систему всегда был английский для ввода пароля?

                            0

                            Я думал во всех популярных дистрибутивах это уже из коробки решается.


                            $ localectl --no-convert set-x11-keymap us,ru "" "" grp:alt_shift_toggle
                            $ systemctl restart display-manager

                            или в ручном варианте


                            $ nano /etc/X11/xorg.conf.d/00-keyboard.conf
                            
                            Section "InputClass"
                                    Identifier "system-keyboard"
                                    MatchIsKeyboard "on"
                                    Option "XkbLayout" "us,ru"
                                    Option "XkbModel" "pc105"
                                    Option "XkbVariant" ","
                                    Option "XkbOptions" "grp:alt_shift_toggle"
                            EndSection

                            Первой раскладкой при запуске будет первая указанная (us,ru). За что отвечают остальные строчки можно почитать арчвики тут и тут.


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

                              0

                              это неполное решение проблемы.


                              работает у вас комп, переключено на русский язык.
                              включается блокировщик экрана (xscreensaver например). и он остаётся на русском языке.


                              я даже подумываю патч написать на xscreensaver чтобы translate делал

                                0

                                Никогда даже не задумывался что это проблема. Впрочем у меня линукс только на старом thinkpad x220 там вход по отпечатку. Да и по логике не входит в задачи скринсейвера язык проверять.


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

                                  0

                                  Да, вот как раз эта проблема. Включился скринсейвер, после этого нужно снова залогиниться, а язык тот, который был последний включен. Нужно проверить сначала, что за язык включен, переключиться на английский и после этого ввести пароль. Хочется сразу ввести пароль и не смотреть, что за язык включен. У меня Ubuntu, Gnome. Не нашел как это настраивается.

                                    0

                                    Напишите скрипт. Отлавливайте запуск скринсейвера (что-то вроде "ps aux | grep -v grep | grep xscreensaver") и меняйте язык на английский если он запущен.
                                    Более примитивный способ "в лоб" менять язык, если была нажата комбинация блокировки, но он работает при допущениях, что вы блокируете комбинацией клавиш, а не уходите и ждете пока он сам уснет и пользуетесь именно хоткеем.

                                      0

                                      Хорошо, попробую. Спасибо.

                                        0
                                        меняйте язык на английский если он запущен.

                                        Ну и как поменять язык из shell скрипта? А то получился совет из серии как рисовать сову

                                          0
                                          setxkbmap -layout us,ru

                                          Список языков, разумеется, подставьте свой.

                                            0

                                            У меня не работает, я использую kbdd для запоминания раскладок, так вот, в терминале и со скрипта эта команда не работает

                                              +1

                                              Увы, тогда вам придется изучать документацию kbdd (или форумы) на предмет внести окно ввода пароля в исключения или подергать ее через dbus. К сожалению, этот не использует kbdd, и подсказать что-либо конкретное не сможет.

                                                +1

                                                Спасибо, сообщение через dbus работает для kbdd

                                                  0

                                                  Fine!

                                0
                                Сначала разберемся, как можно настроить смену раскладки клавиатуры.

                                А лучше не перенастраивать и привыкнуть к Super + Space. Сейчас все операционные системы по-умолчанию используют такую раскладку.


                                Еще хочется узнать, как с помощью клавиатуры переключаться между несколькими открытыми окнами, например, PyCharm'a или Google Chrome.

                                  0
                                  как с помощью клавиатуры переключаться между несколькими открытыми окнами, например, PyCharm'a или Google Chrome.

                                  Вам под какую систему переключение нужно? Если под linux ставите sxhkd в конфиге пишите свои хоткеи. Для примера команды по открытию приложений и изменению яркости из офф репа на GitHub


                                  super + o ; {e,w,m}
                                      {gvim,firefox,thunderbird}
                                  
                                  {_,shift + ,super + }XF86MonBrightness{Down,Up}
                                      bright {-1,-10,min,+1,+10,max}

                                  А лучше не перенастраивать и привыкнуть к Super + Space.

                                  Нет Super + Space ужасное решение, которое крайне неудобно нажимать одной рукой, не перенося для этого всю руку. Лучший вариант найти клавишу, которую используешь в среднем никогда и поставить переключение на нее.

                                    0

                                    Спасибо, посмотрю.

                                    0
                                    А лучше не перенастраивать и привыкнуть к Super + Space

                                    то есть опять циклическое переключение со всеми его недостатками?

                                      0

                                      А мне это не мешает.

                                    +1

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

                                      0
                                      Изменим циклическое переключение по AltGr на ациклическое: AltGr переключает на латинскую раскладку, Shift+AltGr — на русскую.

                                      Меня в этом варианте раздражает, что Shift надо нажимать до AltGr, нельзя ли сделать чтобы порядок нажатия кнопок не играл роли?

                                        0

                                        Можно, но с некоторым побочным эффектом. Для этого нужно вернуть AltGr значение Alt_R (или другое, но нужно, чтобы оно не использовалось на других клавишах) и задать значение с шифтом ISO_Last_Group, дальше задать такое же значение на шифтах при нажатом Alt_R:


                                        key <RALT> {
                                            symbols[group1] = [ Alt_R, ISO_Last_Group ],
                                            virtualMods= AltGr
                                        };
                                        key <RTSH> {
                                            type[group1] = "PC_RALT_LEVEL2",
                                            symbols[group1] = [ Shift_R, ISO_Last_Group ]                                                                            
                                        };
                                        key <LFSH> { 
                                            type[group1] = "PC_RALT_LEVEL2",
                                            symbols[group1] = [ Shift_L, ISO_Last_Group ]
                                        };

                                        И чтобы переключение на английскую раскладку было при нажатии AltGr, используем $ xcape -t <xxx> -e "Alt_R=ISO_First_Group.
                                        Здесь нужно либо подобрать время, через которое будет срабатывать переключение, либо убрать его вообще, но тогда, если сначала нажимается шифт, а потом альт, нужно отпускать вместе (иначе сработает переключение на английский).


                                        Как сделать по другому пока не представляю, потому что комбинацию AltGr+Shift просто не задать.


                                        С другой стороны, по этой же схеме, но без xcape можно сделать, чтобы в одном порядке переключало в одну сторону, а в обратном — в другую.

                                          0

                                          мне не особо нравится идея использовать xcape — это же, как я понимаю, демон-костыль, который существует отдельно от иксов.


                                          но без него такие простые вещи, как "нажатый-отпущенный AltGr переключает раскладку, зажатый AltGr с кнопками работает как модификатор" не сделать, я правильно понимаю?

                                            0

                                            xcape -t <xxx> -e "Alt_R=ISO_First_Group" — так не работает, похоже нельзя ISO_First_Group.


                                            а так по обдумыванию мне понравилась идея повесить, например на оба alt латиницу, а на оба shift кириллицу, оставив при этом их работу комбинациях так, как есть по умолчанию.
                                            я так понимаю, средствами самих иксов такого не добиться, только с xcape или чем-то ещё сторонним.

                                              0

                                              У меня работало, но при этом ISO_First_Group было назначено и на другую комбинацию. Может с этими связано.


                                              Если имеется ввиду комбинация Alt_L+Alt_R — латиница, Shift_L+Shift_R — кириллица, то без xcape получится. Мы можем задать значение шифтов в модификатором Shift (просто второй параметр) и значение альтов с модификатором Alt (тип -> PC_ALT_LEVEL2, и теперь второй параметр). Это похоже на то, что было выше.

                                                0
                                                Если имеется ввиду комбинация Alt_L+Alt_R

                                                нет, имелось в виду Alt_L или Alt_R на латиницу, то же самое на кириллицу (с двух сторон для того, чтобы можно было переключиться, если вдруг в правой чашка чая и набираешь одной левой).

                                                  0
                                                  при этом ISO_First_Group было назначено и на другую комбинацию

                                                  точно, в документации об этом прямым текстом сказано.


                                                  вроде бы получилось то, что хотелось, в несколько этапов:


                                                  1. добавляем ISO_First_Group и ISO_Last_Group на явно неиспользуемые кнопки
                                                    загружаем keymap:


                                                    xkb_keymap {
                                                        xkb_keycodes  { include "evdev+aliases(qwerty)" };
                                                        xkb_types     { include "complete"      };
                                                        xkb_compat    { include "complete+ledscroll(group_lock)"        };
                                                        xkb_geometry  { include "pc(pc105)"     };
                                                    
                                                    xkb_symbols "my" {
                                                    include "pc+us+ru:2+inet(evdev)"
                                                    
                                                    key <I251> {
                                                        [ ISO_First_Group ]
                                                    };
                                                    key <I252> {
                                                        [ ISO_Last_Group ]
                                                    };
                                                    };
                                                    }

                                                  2. переназначаем правый альт на неиспользуемый модификатор, иначе некоторых программах (firefox, например) при нажатии на него вылетает меню:


                                                    xmodmap -e "keycode 108 = Hyper_R"

                                                  3. ну и запускаем xcape:


                                                    xcape -e "Alt_L=ISO_First_Group;Shift_L=ISO_Last_Group;Hyper_R=ISO_First_Group;Shift_R=ISO_Last_Group"


                                                  единственное "но" — отвалилась индикация раскладки скроллоком, непонятно, но с этим уже можно жить.

                                            0

                                            Попробовал сделать, но столкнулся с проблемой: загрузка конфигурации ломает виджет отображения раскладки в awesome WM (нет ни отображения, ни переключения раскладки). Посмотрел исходники и похоже что awesome берёт названия активных раскладок из строки типа "pc+us+ru...". Своя конфигурация надписывает это или я что-то делаю не так? В какую сторону копать, чтобы починить это? Ссылка на конфиг. Заранее спасибо за ответ.

                                              0

                                              Решение: убрать "my" из строки "xkb_symbols "my" {" в конфигурации.

                                              0

                                              Расскажите, как заставить vim понимать команды c кириллической раскладки? Например, чтобы войти в режим редактирования и продолжить писать на кириллице, мне необходимо переключиться на латинскую раскладку, нажать i, а после снова вернуться на кириллицу.

                                                0

                                                Есть плагин vim-xkbswitch, который сохраняет раскладку в insert и при переходе в normal автоматически переключается на латинскую и умеет реагировать на горячие клавиши в русской раскладке.


                                                https://github.com/lyokha/vim-xkbswitch

                                                0
                                                Еще можем поставить в русской раскладке слэш и вопросительный знак туда, где они стоят в английской.

                                                я ещё убрал запятую с цифровой клавиатуры:


                                                    key <KPDL> {
                                                        symbols[Group2]= [ KP_Delete, KP_Decimal ]
                                                    };

                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                Самое читаемое