LINUX.ORG.RU

Однозначное переключение раскладки

 ,


2

2

Добрый день!

Хочется сделать переключение раскладки однозначным - то есть чтоб us всегда включалась одной клавишей, ru - другой. Хочется чтоб поведение не зависело от DE (чтоб одинаково работало и в графической сессии, и в VT).

Варианты, предлагаемые через изменение keyboard-configuration меня не устраивает - там нет однозначных, только циклические. Плюс еще и те что через ctrl ломают ^C и прочие горячие клавиши.

Варианты с setxkbmap также ломают стандартные хоткеи, плюс к этому там очень мало вариантов - единственный нормальный это Caps\Shift+Caps, из-за которого теряется капслок. И опять же подгружается это все только в оболочке.

xmodmap вообще работает странно - ради интереса переназначил capslock как numlock (а при использовании shift он опять становится capslock'ом что мне весьма подходит), в своем DE настроил хоткеи переключения по numlock'e на us-раскладку и по printscreen на кириллицу - все работает нормально. Заблокировал десктоп (через xscreensaver) - снять блокировку уже не получается потому что переключение языков сломалось. После ребута нажатие на капслок то включает uppercase, то меняет раскладку, при этом по-разному работает в зависимости от текущей раскладки.

В общем, хотелось бы избежать все этой ерунды, сделать один раз и чтоб оно и дальше работало. Идеальный вариант для меня - CapsLock - us, PrintScreen - ru, shift+CapsLock = uppercase. Посоветуйте, пожалуйста, как я могу это сделать.

Кстати, варианты типа «ctrl+1 - en \ ctrl +2 - ru» тоже подходят, но я не смог найти ни одного даже близко похожего рецепта.

Ответ на: комментарий от greenman

Ну опять же - переключение раскладки работает, но при переключении ru > en (на капслоке) я начинаю с букв в верхнем регистре. То есть дополнительно мне придется как-то капслок отключать.

micronekodesu ★★★
() автор топика
Ответ на: комментарий от greenman

Ну это не вариант совсем, проще тогда угадывать с циклическим переключением.

micronekodesu ★★★
() автор топика
Ответ на: комментарий от micronekodesu

Там вроде довольно неплохо описано — https://webhamster.ru/site/page/index/articles/projectcode/181

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

Меня и обычная переключалка в кедах устраивает (она умеет группировать языки и сохранять язык каждого окна) . Если ты хочешь просто фиксированное переключение — забинди на хоткей вот это: https://github.com/ierton/xkb-switch/

З.Ы. Была ещё какая-то подобная утилитка, не могу вспомнить.

ShizuShidou
()
Ответ на: комментарий от ShizuShidou

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

В общем у меня не заработало. Ни с конфигурацией «из коробки», ни со своим маппингом. Через strace я вижу что свитчер видит нажатия клавиш, но реакции никакой нет.

micronekodesu ★★★
() автор топика
Ответ на: комментарий от ShizuShidou

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

А, спасибо за ваши рекомендации!!

micronekodesu ★★★
() автор топика

Идеальный вариант для меня - CapsLock - us, PrintScreen - ru, shift+CapsLock = uppercase

Хотелось бы в таком случае знать модель клавиатуры, потому что расстояние до PrintScreen обычно не позволяет им комфортно пользоваться. Я бы настроил Caps/Shift-Caps для раскладок и LeftShift-RightShift для uppercase.

Karthago ★★
()
Ответ на: комментарий от Karthago

Синкпадовская (L460). Принтскрин там где menu обычно (между правыми Alt и Ctrl).

micronekodesu ★★★
() автор топика
Ответ на: комментарий от Karthago

Я бы настроил Caps/Shift-Caps для раскладок

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

micronekodesu ★★★
() автор топика
Ответ на: комментарий от micronekodesu

Кмк, если выделить второй язык в отдельную группу в системном xorg.conf.d, то поломаться ничего не должно. Единственное что в DE надо настраивать именно индикатор, а не переключалку. Впрочем, тут тоже есть вопрос: как оно будет себя вести в GNOME с Wayland я не представляю.

ShizuShidou
()
Ответ на: комментарий от ShizuShidou

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

Поддержка в GNOME и Wayland мне не сильно важна, вряд ли я буду ими пользоваться в ближайшее время.

micronekodesu ★★★
() автор топика

Хочется сделать переключение раскладки однозначным - то есть чтоб us всегда включалась одной клавишей, ru - другой. Хочется чтоб поведение не зависело от DE (чтоб одинаково работало и в графической сессии, и в VT).

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

debugger ★★★★★
()
Последнее исправление: debugger (всего исправлений: 1)

Утилита xxkb. Ещё одна, маленькая и простая.

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

kirill_rrr ★★★★★
()
Ответ на: комментарий от micronekodesu

Нет, там в конфиге настройки. А утилита при запуске приводит настройки Х-сервера к своему конфигу. Хотя может это только для базовых функций? Я её 2 года назад настроил и теперь просто конфиг копирую.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 2)
24 января 2018 г.

Варианты с setxkbmap также ломают стандартные хоткеи, плюс к этому там очень мало вариантов - единственный нормальный это Caps\Shift+Caps, из-за которого теряется капслок.

Рекомендую:
grp:shift_caps_switch,shift:both_capslock,grp:win_space_toggle,grp:switch
Caps — включить en
Shift+Caps — включить ru
LShift+RShift — переключить CapsLock
Win+Space — переключить en/ru
RAlt — переключить en/ru на время удержания

Жаль grp:switch нельзя совместить с compose:ralt, чтоб по удержанию RAlt было переключение, а по однократному нажатию — compose. Поэтому для compose приходится другую клавишу сочинять, например compose:paus — Pause.

PS. Можно shift:both_capslock_cancel — оба шифта — включить CapsLock, одиночный Shift — выключить.

bormant ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.