Pull to refresh

Comments 62

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

UFO landed and left these words here

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

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

на всякий случай, вдруг пригодится: испытываю наслаждение от набора испанского текста с браузерным плагином Google Input Tools.
UFO landed and left these words here
Не только в браузере — это да, не покатит.
преимущество в том, что физическая клавиатура не обязательна, можно вывести виртуальную на экран. Если набирать надо немного и преимущественно — в браузере, то решение отличное. Очень кросс-платформенное, например :-)
Спасибо! Нубский вопрос для полноты: куда правильно прописать загрузку этого конфига дабы не затронуть других пользователей? Походил по связанным статьям — нашел только о скрипте в /etc/X11/Xsession.d/, но это же для всех.
Попробовал — xkbcomp явно отрабатывает (в .xsession-errors появляются те же «Warning: No symbols defined for ...» что и при ручном запуске), однако эффекта никакого (вручную из терминала всё работает). Подозреваю что Cinnamon что-то переопределяет позже (хотя в его настройках отключил назначение клавиш смены раскладок — это и пытаюсь сделать, свою комбинацию). Можно конечно в /usr/share/X11/xkb/symbols/group отредактировать любую из предлагаемых Cinnamonом комбинацию, но хочется сделать красиво, ищу дальше.
Warning: No symbols defined for ...»

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


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

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

Вдруг кому полезно будет: вместо гонок со стартом Cinnamonа решил добавить новую комбинацию смены раскладок (других целей не преследовалось) в меню настроек. Cinnamonовский апплет настроек клавиатуры (он такой же, как на картинке в статье) базируется на libgnomekbd, так что метод должен работать не только на Cinnamon. Апплет не содержит жестко забитого списка комбинаций, а собирает его на лету из конфигов xkb.
В /usr/share/X11/xkb/symbols/group сделал под новым именем копию конфига наиболее близкой комбинации, поправил коды клавиш на нужные. Далее поиском по имени исходной комбинации нашел все её упоминания в файлах в /usr/share/X11/xkb/ (нашлось несколько файлов разных форматов, в том числе xml-подобный список комбинаций с текстами для пунктов меню настроек) и по аналогии добавил везде свою новую комбинацию. Новый пункт сразу появился в меню и заработал как ожидалось.
А теперь все это на гитхаб, чтобы после переезда накатить обратно в одно движение
Поставим-ка 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, если так удобнее.

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

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


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

KDE:


org.kde.keyboard /Layouts
А это куда нужно писать?
UFO landed and left these words here

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


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

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

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


$ 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). За что отвечают остальные строчки можно почитать арчвики тут и тут.


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

UFO landed and left these words here

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


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

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

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

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

UFO landed and left these words here
setxkbmap -layout us,ru

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

UFO landed and left these words here

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

UFO landed and left these words here
Сначала разберемся, как можно настроить смену раскладки клавиатуры.

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


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

как с помощью клавиатуры переключаться между несколькими открытыми окнами, например, 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 ужасное решение, которое крайне неудобно нажимать одной рукой, не перенося для этого всю руку. Лучший вариант найти клавишу, которую используешь в среднем никогда и поставить переключение на нее.

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

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

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

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

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

Можно, но с некоторым побочным эффектом. Для этого нужно вернуть 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 можно сделать, чтобы в одном порядке переключало в одну сторону, а в обратном — в другую.

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


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

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


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

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


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

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

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

при этом 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"


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

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

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

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

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


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

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

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


    key <KPDL> {
        symbols[Group2]= [ KP_Delete, KP_Decimal ]
    };
У меня достаточно простая задача. В Ubuntu 18.04 LTS сделать, чтобы в русской раскладке работала следующая раскладка:
AltGr+[ = [

Написал следующий конфиг:
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)»

name[group1]=«English (US)»;
name[group2]=«Russian»;
key {
type[group2]= «FOUR_LEVEL»,
symbols[group2]=[Cyrillic_hardsign, Cyrillic_HARDSIGN, bracketright, braceright]
};
};
xkb_geometry { include «pc(pc105)» };
};

и ничего не работает
Такое впечатление что клавиша AltGr глобально отключена для X11

Чтобы AltGr + [ = [ как значение на третьем уровне, надо модификатор этого уровня определить


key <RALT> { [ ISO_Level3_Shift ] }

А еще для самой клавиши код указать нужно (скорее всего key <AD12> { ...)

"AD12" потерялся при отображении


key <RALT> { [ ISO_Level3_Shift ] }; 

не помогло. решил проблему следующим конфигом (добавил еще переключение между раскладками)


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)+group(lalt_lshift_toggle)+level3(ralt_switch)"

                name[group1]="English (US)";
                name[group2]="Russian";
                key <AD12> {
                        type[group2]= "FOUR_LEVEL",
                        symbols[group2]=[Cyrillic_hardsign, Cyrillic_HARDSIGN, bracketright,         braceright]
                };
        };
        xkb_geometry  { include "pc(pc105)"     };
};

Можно попробовать не FOUR_LEVEL, а PC_ALT_LEVEL2. Тогда должно будет на втором месте задаваться значение с ALT. Так, например, написано в переключении раскладок по ALT+что-то, возможно и другие значения задать получится.

А у кого либо ациклическое переключение сработало? Пытался сделать как тут описано, но в Ubuntu 16LTS почему-то не работает.
Очень интересно. Мне интересны любые варианты которые работают в людей. Возможно получится заставить систему отрабатывать ацикличность. Даже отдельно вопрос создал, но пока глухо. Ubuntu сочетание клавишь для выбора конкретного языка?

Использую i3, просто в конфиге прописал команду xkbcomp ...
В гноме вроде можно через настройки добавить в автозапуск эту команду

И прямо именно ациклическое переключение получилось? Т.е. жмем некий хоткей1 и у нас русская раскладка, жмем некий хоткей2 и у нас английская?

Можно повесить там, где конфигурируются в вашей DE шорткаты, вот такие штуки:
setxkbmap -layout ru,us и setxkbmap -layout us,ru.
Если совместимость с циклической раскладкой не нужна, то выкидываем все, что после запятой. Если надо больше языков — дополняем список по аналогии.

UFO landed and left these words here
Only those users with full accounts are able to leave comments. Log in, please.