пятница, декабря 14, 2007

Переключение раскладок KDE в комиксах


Вчера наблюдал в очередной раз в ирц эту картину. При вопросах нубов о переключателе раскладок в кедах ведущие собаково гуру рекомендуют выключить его вообще, настроить xorg.conf и установить kkbswitch. Утомило. Можно, но не обязательно.
В 3-х кедах (не знаю как будет в 4-х) переключалка раскладок настраивается в 2-х разных местах, поэтому не всем удаётся это сделать сходу и используют костыли типа kkbswitch или xxkb, а обезьянки с ЛОРа эту проблему возвели в ранг фетиша. Далее опишу процесс настройки переключения раскладки. Для военных - картинки в самом верху этого поста (кликабельны).
В моём случае переключение происходит по клавише Left Win, так как для меня эта клавиша бесполезна, а раскорячивать пальцы на 2 клавиши (Ctrl+Shift или Alt+Shift) лениво. Для справки привожу кусок моего /etc/X11/xorg.conf, касающийся клавиатуры. Всё это прописал сузёвый установщик Yast, я вручную поправил только строчку Option "XkbOptions", где вместо lwin_toggle стояло ctrl_shift_toggle.
Section "InputDevice"
Driver "kbd"
Identifier "Keyboard[0]
Option "Protocol" "Standard"
Option "XkbLayout" "us,ru"
Option "XkbModel" "microsoftpro"
Option "XkbOptions" "grp:lwin_toggle,grp_led:scroll"
Option "XkbRules" "xfree86"
Option "XkbVariant" ",winkeys"
EndSection
Центр управления KDE -> Региональные и специальные возможности -> Раскладка клавиатуры. Там включить переключение раскладок, добавить русскую раскладку winkeys. Чтобы работали английские горячие клавиши при текущей русской раскладке, поставить галку "Включить латинскую раскладку" (скриншот 1).
Перейти на вкладку "Параметры переключения", включить галку "Показывать флаг страны", остальные галки - по вкусу (скриншот 2).
Перейти на вкладку "Параметры xkb". Если все желаемые опции уже прописаны в строке Option "XkbOptions" файла /etc/X11/xorg.conf, то можно вообще выключить галку "Использовать переключатели xkb" и перейти к следующему шагу. Если в /etc/X11/xorg.conf прописано другое сочетание клавиш для переключения раскладок и не желаете там править, то нужно поставить галку "Игнорировать параметры системы", в секции "Layout switching" выбрать нужное сочетание клавиш (у меня Left Win-key changes layout) и, если необходимо, в секции "Use keyboard LED to show alternative layout" поставить галку на "ScrollLock LED shows alternative layout". (скриншот 3).
И последнее что надо сделать - назначить ещё раз эту клавишу (или сочетание клавиш) на переключение раскладок в другом апплете. Центр управления KDE -> Региональные и специальные возможности -> Комбинации клавиш. В самом конце списка вкладки "Глобальные привязки" переназначить сочетание для действия "Переключиться на следующую раскладку клавиатуры", прессанув радиобатон "Другая" (скриншот 4). Справедливости ради, Alt+Shift назначить у меня не получалось ни разу, но именно такое сочетание я себе поставил бы в последнюю очередь, нужна серьёзная распальцовка, особенно на лаптопе. Возможно, не получается потому что Alt+Shift+<клавиша> используются в большом количестве хоткеев KDE.
Если в предлагаемых параметрах нет желаемого вами сочетания клавиш (скриншот 3), могу только сказать, что разработчики KDE не могут учесть фантазии всех своих пользователей, но письмо с вашим future request они прочитают. А пока придётся врукопашную настроить такое экзотическое сочетание в /etc/X11/xorg.conf и во вкладке "Параметры xkb" (всё тот же скриншот 3) снять галку "Использовать переключатели XKB", при этом всё остальное, описанное выше, остаётся действительным и будет работать. Всё это справедливо для оконного менеджера kwin, а как это будет выглядеть в натянутом поверх кедов beryl/compiz не знаю, не пользую.
Таким образом получаем нужное переключение раскладок и индикацию текущей раскладки в лотке KDE штатными средствами.



Настройка занимает минуту, а на написание потратил ч0ртзнаетсколько времени :( И разбросанность настроек в кедах НЕ-НА-ВИ-ЖУ!

9 комментариев:

Анонимный комментирует...

Однако не судьба штатными средствами настроить, что я делаю не так?
Иду в "Комбинации клавиш", хочу изменить на Ctrl+Shift, при нажатии клавишь получаю вместо "Ctrl+Shift_L;Ctrl+Shift_R" такую бяду:

Ctrl+ISO_Prev_Group; Ctrl+ISO_Next_Group;

которая ессно не работает.

tolikzilla комментирует...

Каменты видел, сразу не ответил потому что двумя словами не отделаешься. Да ещё и руку слегка покалечил, а одной рукой писать тяжело.
Так вот, в Вашем случае (Ctrl+Shift) переключение между группами раскладок будет по левому Ctrl+Shift, переключение внутри группы - по правому Ctrl+Shift. Немного подробнее на отвлечённом примере.
Допустим, я - гарный хлопец из города Харькова. Мне нужна украинская, русская, английская (US) раскладки. Ага, в списке раскладок (скрин 1) выставляю эти 3 раскладки (а в понимании разработчиков KDE - группы раскладок). Далее всё то что и описывал ранее, но в апплете комбинаций клавиш (скрин 4) при переназначении клацаю только левый Ctrl+Shift, при этом альтернативно правый Ctrl+Shift клацать бесполезно, у него другое назначение при выставлении галки на этом сочетании в параметрах kxkb (скрин 3). Группы раскладок переключаю по левому Ctrl+Shift, при переключении в трее меняется флажок (US, русская и украинская группы). Тычок в правый Ctrl+Shift приводит к переключению внутри группы (не забыли о галке "включить латинскую раскладку" на скрине 1?) и при этом загорается и гаснет ScrollLock если была выставлена галка на скрине 3, индицирующая текущую раскладку внутри группы - национальная или латинская, но при этом в трее не меняется флаг группы, так как текущая группа осталась та же.
Такой способ переключения неимоверно рулит если Вы имеете более двух групп раскладок, так как 2 раза тыкать в переключатель слева по кругу переходя от русской к английской неудобно, проще 1 раз справа. И в каком бы состоянии вы не оставили раскладку (национальная или латинская) перед переключением между группами раскладок по левому Ctrl+Shift, переключаясь по кругу и придя на нужную, Вы всегда получите национальную раскладку.
Так задумано и реализовано разработчиками kxkb. И это не бага, и не багофича. Это фича. В интервью Леонида Кантера после выхода очередной версии ASP Linux на вопрос а не сделали ли они что-нибудь с этим kxkb в новой версии дистрибутива, он вполне резонно заметил, что такая работа переключателя разработчиков KDE устраивает и он не видит смысла что-то менять.
Тяжело понять без чтения документации недавним пользователям другой ОС? Да. Такая реализация неудобна для пользования? Э-э-э... М-м-м... Нет. Дело привычки. Если же не хочется привыкать к хорошему, можно использовать хак с той самой ручной правкой конфигов.
Но! Штатный переключатель раскладок в KDE работает. Работает, как и было задумано. Если задумки разработчиков в Вашем понимании - кривизна переключалки, то вэлкам в багзиллу, создавайте баг (если его ещё нет) и активно голосуйте. Или сами переписывайте этот модуль на свой вкус. Это ж опенсорс.

Анонимный комментирует...

В общем я понял принцип, но..

"Группы раскладок переключаю по левому Ctrl+Shift, при переключении в трее меняется флажок (US, русская и украинская группы)."

Вот этот момент у меня не срабатывает.
Интересно, что: если переключить мышкой на Рус, то после этого Ctrl+Shift переключает на английский и обратно (правда флаг не меняется, видимо срабатывает переключение внутри группы?), причём одинаково отрабатывают и Ctrl+Shift_L и Ctrl+Shift_R.

Вот скриншоты настроек:

http://img247.imageshack.us/img247/4144/kbd1rb6.png
http://img167.imageshack.us/img167/5016/kbd2dx8.png
http://img144.imageshack.us/img144/4607/kbd3uf9.png
http://img153.imageshack.us/img153/1858/kbd4su8.png

PS Я разобрался, проблема в этом "Ctrl+ISO_Prev_Group". Если вручную прописать в ~/.kde/share/config/kdeglobals строку:
Switch to Next Keyboard Layout=Ctrl+Shift_L
(не указываю альтернативную комбинацию Ctrl+Shift_R), то всё начинает работать как надо. А именно:

Ctrl+Левый_Shift меняют флаг
Ctrl+Правый_Shift переключает внутри группы, не меняя флага.


Вопрос: Почему у меня не получается настроить без ручной правки конфига. Из-за чего сканируется не "Ctrl+Shift_L", а "Ctrl+ISO_Prev_Group" и соотв. нифига не работает?
Правда у меня Gentoo и я мог что-то недоставить/недоконфигурить (?).

Анонимный комментирует...

PPS если поставить переключение по левому Win, то флажки переключаются, кстати. Кнопка в "Комбинации клавиш" прописывается как ISO_Next_Group и работает (!).
Только внутри группы не пойму какой переключатель в этом случае? Правый Ктрл+Шифт не срабатывает, а правого Win у меня нет.

>>"Справедливости ради, Alt+Shift назначить у меня не получалось ни разу"

Вобщем, я так понимаю, Alt+Shift и Ctrl+Shift без ручной правки конфигов таки не настроить?

tolikzilla комментирует...

Из Ваших скриншотов смог увидеть только 2-й и 3-й, на остальные получил ошибку соединения с хостом. Полагаю, это и неважно. Патамушта:
>
Я разобрался, проблема в этом "Ctrl+ISO_Prev_Group". Если вручную прописать в ~/.kde/share/config/kdeglobals строку:
...
Вопрос: Почему у меня не получается настроить без ручной правки конфига. Из-за чего сканируется не "Ctrl+Shift_L", а "Ctrl+ISO_Prev_Group" и соотв. нифига не работает?
>
Всё, что я писал, точно будет работать у тех, кто предварительно не правил конфиги вручную. Ваша ситуация осложнена, видимо, этим. Я не уверен в том, что
Switch to Next Keyboard Layout=Ctrl+Shift_L
есть правильный вариант. Попробуйте имитировать чистую установку, как будто Вы не прикасались к этому конфигу, т.е. сбросить значение параметра Switch to Next Keyboard Layout или закомментровать эту строку или удалить, потом перезапустить кеды и повторить всю настройку по шагам. Я ни разу не прикасался сам к конфигу kdeglobals, и только что настроил переключение между тремя раскладками, которое описал в предыдущем длинном каменте по Ctrl+Shift. Получил вот такое:
lamer@tzlaptop:~$ cat .kde/share/config/kdeglobals | grep Layout
Switch to Next Keyboard Layout=ISO_Prev_Group
lamer@tzlaptop:~$
Для справки как это у меня выглядит:
xorg.conf не трогал, всё то же что и в самом посте.
Скрин 1. 3 группы раскладок (US, русская winkeys и украинская winkeys). В русской и украинской включены галки латинской раскладки.
Скрин 2. Показывать флаг страны - галка. Политика переключения - радиобатон "Приложение". Переключение между основными раскладками - нет галки.
Скрин 3. Использовать переключатели XKB - галка. Игнорировать параметры системы - галка (т.к. в xorg.conf другие параметры). Секция "Настройка переключения групп" - галка на "Ctrl+Shift переключают группу". Секция "Использовать светодиоды клавиатуры для индикации альтернативной группы" - галка в "ScrollLock показывает альтернативную группу".
Скрин 4. На выборе сочетания клавиш -> Другая -> прессанул левый Ctrl+Shift.
Проделано на OpenSUSE 10.3 (KDE 3.5.7), Kubuntu 7.04 (KDE 3.5.7), Kubuntu 7.10 (KDE 3.5.8). Не думаю, что Вы что-то могли недоставить или не включить, в генте вроде бы ванильные кеды.
>
если поставить переключение по левому Win, то флажки переключаются, кстати. Кнопка в "Комбинации клавиш" прописывается как ISO_Next_Group и работает (!).
Только внутри группы не пойму какой переключатель в этом случае? Правый Ктрл+Шифт не срабатывает, а правого Win у меня нет.
>
Еcли переключение по Ctrl+Shift вам уже разонравилось. Делаем по левой win. Правой win и у меня нет. Лаптоп, да. Ладно, какая из правых клавиш Вам наиболее симпатична? Исходя из собственного опыта пользования клавиатурой, могу сказать, что юзаю правый Shift, клавиши Menu и правый Ctrl не использую. На правую Alt можно повесить Compose. Давайте принесём в жертву, скажем... ну... клавишу Menu. В параметрах xkb (скрин 3) в секции "Настройка переключения групп" ставим галки на "Клавиша Menu переключает группу" и "Левый Win переключает группу". Всё остальное как и выше, только в апплете комбинаций клавиш (скрин 4) прессуем этот левый Win. Получаем переключение между группами по Win, переключение внутри группы - по Menu.
lamer@tzlaptop:~$ cat .kde/share/config/kdeglobals | grep Layout
Switch to Next Keyboard Layout=ISO_Next_Group
lamer@tzlaptop:~$
Как я уже сказал ранее, все эти навороты прикольны при количестве групп раскладок >2. Описанный случай с тремя раскладками - не мой. На самом деле я не гарный хлопец из города Харькова, украинского я не знаю и вообще языков не знаю, поэтому обхожусь двумя группами раскладок - русской и английской и переключаюсь по левой Win.
>
Вобщем, я так понимаю, Alt+Shift и Ctrl+Shift без ручной правки конфигов таки не настроить?
>
Насчёт Ctrl+Shift претензии снимаете? Насчёт Alt+Shift - не знаю где собака зарыта, и, честно говоря, эксгумацией этой собаки не хочу заниматься, так как шибко неудобное (для меня) сочетание клавиш, использовать его не буду. Когда пользовал ОС от MS, первой же настройкой после установки системы была смена сочетания клавиш на Ctrl+Shift.

Анонимный комментирует...

Правка .kde/share/config/kdeglobals ничего страшного в себе не несёт, эта же строка запросто заменяется в гуевой настройке (к примеру скинул на дефолт для эксперимента).

Мне удалось получить "Switch to Next Keyboard Layout=ISO_Prev_Group" для Ctrl+Shift, и переключаться левыми кнопками (ура!), НО ТОЛЬКО:

Если сначала нажимать Shift, потом - Ctrl (!). Переключение происходит так же - первым должен быть нажат шифт.

Вопрос: У Вас так же? Или без разницы какая кнопка нажимается первой?

При нажатии сначала Ctrl, потом - Shift, получаю неработоспособный Ctrl+ISO_Prev_Group.

Кстати, я тоже не пользуюсь тремя языками, и переключение внутри раскладок мне совсем не интересно. А интересно мне средствами графического интерфейса повесить переключение раскладок как на левые, так и на правые Ctrl+Shift. Кстати на правый не вешается, получается либо Shift+Shift_R (при нажатии первым - шифта), либо Ctrl+ISO_Next_Group (при нажатии первым - Ctrl) - оба варианта нерабочие.

Проверял в Gentoo и OpenSuSE - результат одинаковый. Хотя в сюзе выбран тип клавиатуры не 104, а Dell Inspiron (то есть близкий к реальности, если это вообще важно).

Посему претензии по Ctrl+Shift пока наполовину снимаю ;)
Настроить можно, но только на левую комбинацию, и если нажимать первым клавишу "Shift".

Кстати, когда я прописываю в конфиг "Ctrl+Shift_L;Ctrl+Shift_R" - в этом случае для переключения необходимо нажимать Ctrl первым, иначе - тоже не сработает.

Спасибо за терпение, ну и с Наступающим! ;)

tolikzilla комментирует...

>
Если сначала нажимать Shift, потом - Ctrl (!). Переключение происходит так же - первым должен быть нажат шифт.

Вопрос: У Вас так же? Или без разницы какая кнопка нажимается первой?
>
Раньше не обращал внимания, оказывается, да. Наверное попадаю всегда сначала в первую очередь на Shift.
Ну как уж есть, так есть. Я разочарован :)
Да, и Вас с наступающим Новым годом.

cub-uanic комментирует...

Есть желание сделать две группы - us + ru - с подгруппой ua в каждой из них, тоесть в итоге получаем "us:ua,ru:ua". Язык по-умолчению для новых окон - us.
Достижимо ли это штатными средствами?

tolikzilla комментирует...

Нет. ПМСМ экзотика, поэтому разрабы и не предусмотрели.