четверг, 7 февраля 2008 г.

Способы переключения раскладок клавиатуры в KDE (3в1)

Оригинал статьи. Там же немало очень интересных комментариев!!!!

Читая Планету блогов о *NIX (нагло пиарю) наткнулся на несколько постов о настройке переключения раскладок клавиатуры. Кто-то советует править xorg.conf, кто-то - поставить kkbswitch, самые пытливые заставляют завестись встроенное средство переключения раскладок в KDE. Сам использовал в основном kkbswitch (сейчас включил встроенный kxkb), только в SuSE переключался средствами xorg.conf - не нашёл kkbswitch в репах. Недостаток использования переключения из xorg.conf - раскладка для всех окон всегда одна. Встроенная переключалка KDE работает неплохо, если настроить, но... в русской раскладке не срабатывают хоткеи (решено, спасибо комраду Fallen). У kkbswitch изъянов мной замечено не было, с тремя языками работает (кого волнует этот вопрос). Кстати, он читает xorg.conf и соответствующим образом настраивает себя, так что для начала потребуется настроить xorg.conf.

1. /etc/X11/xorg.conf
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbRules" "xorg"
Option "XkbModel" "pc104"
Option "XkbLayout" "us,ru"
Option "XkbOptions" "grp:ctrl_shift_toggle"
Option "XkbVariant" ",winkeys"
Option "AutoRepeat" "250 30"
EndSection
Добавление: Option "XkbOptions" "grp_led:caps"
будет включать/выключать индикатор CapsLock'а при переключении языков.

2. Поставить kkbswitch. Берёт инфо о языках и клавишах переключения из xorg.conf. Пример для 3х языков:
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbRules" "xorg"
Option "XkbModel" "pc104"
Option "XkbLayout" "us,de,ru"
Option "XkbOptions" "grp:ctrl_shift_toggle"
Option "XkbVariant" ",,winkeys"
Option "AutoRepeat" "250 30"
EndSection
Перед winkeys в данном случае две запятые (т.к. русский язык теперь третий по счёту). Языки переключаются по-кругу по Ctrl+Shift.
Один нюанс - в этом случае при трёх языках у меня почему-то не срабатывает переход в текстовую консоль по Ctrl+Alt+F1-6, хм.

3. Включение встроенного средства переключения раскладок клавиатуры KDE.
Достичь окончательного (?) просветления в этом вопросе помог пост "Переключение раскладок KDE в комиксах". В настройке переключения есть как минимум две неочевидные вещи. Рассмотрю два варианта: настройка для двух языков и для трёх, а в качестве кнопок переключения - Ctrl+Shift (как наиболее популярный вариант у иммигрантов с Windows).

а) Настройка для двух языков (Англ/Рус).
Центр Управления - Региональные и спец. возможности - Раскладка клавиатуры
1я закладка (Раскладка):
Добавляем две раскладки - Англ и Русскую, причём для русской ставим галку "Включить латинскую раскладку" (иначе в русской раскладке не будут работать хоткеи):

2я закладка (Параметры переключения):
по вкусу

3я закладка (Параметры XKB):
Выбираем "Ctrl+Shift переключает группу" и, ниже, можно выбрать "ScrollLock показывает альтернативную группу" (учтите, что хоткеи, в которых используется комбинация "Ctrl+Shift+some_key" больше не будут работать).
Первая неочевидная вещь заключается в том, что "Настройка переключения групп" на данной закладке - это отнюдь не переключатель раскладок (!), это переключатель групп языков в конкретной раскладке. Поэтому идём к пункту четыре:

4й шаг: Центр Управления - Региональные и спец. возможности - Комбинации клавиш:
В самом низу нужно назначить клавиши для "Переключиться на следующую раскладку клавиатуры" - здесь и задаётся желаемая комбинация, в нашем случае - попробуем задать Ctrl+Shift. Для основной комбинации нажимаем левые Ctrl+Shift, для альтернативной - правые.
Скорей всего вы увидите "Ctrl+ISO_Prev_Group; Ctrl+ISO_Next_Group", проверяем переключаются ли раскладки. Не переключаются? И у меня нет. В справке проблема описана так: "Если kxkb не переключает с помощью комбинации клавиш, когда вы переключаетесь на какую либо раскладку, но переключает при использовании мыши, возможно ваша раскладка не содержит клавишу, назначенную в комбинации".

Можно исправить вручную так:
$ nano ~/.kde/share/config/kdeglobals
Найти строку "Switch to Next Keyboard Layout=..." и изменить её на:
Switch to Next Keyboard Layout=Ctrl+Shift_L;Ctrl+Shift_R

(кстати, для варианта переключения по левой клавише "Win" такие ухищрения не будут нужны, и хоткеи "Ctrl+Shift+some_key" будут работать)

Идём снова в "Раскладка клавиатуры", отключаем и вночь включаем:
[x] Включить переключение раскладок клавиатуры

Всё, теперь должно работать.

б) Настройка для трёх языков (Англ/Рус/Укр). Настраивается практически аналогично:
1я закладка (Раскладка):
Добавляем три раскладки - Англ, Русскую, Украинскую. Для русской и украинской ставится галка "Включить латинскую раскладку" (здесь это важно не столько для отрабатывания хоткеев, сколько для удобства работы с тремя языками).

2я закладка (Параметры переключения):
пока не включаем опцию "Переключение между основными раскладками".

3я закладка (Параметры XKB):
То же самое что и для варианта двух раскладок, без каких-либо изменений (если настраиваете на три раскладки после того, как настраивали для двух, то, возможно придётся отключить и вновь включить здесь "Использовать переключатели XKB").

4й шаг:
$ nano ~/.kde/share/config/kdeglobals
Найти строку "Switch to Next Keyboard Layout=..." и изменить её на:
Switch to Next Keyboard Layout=Ctrl+Shift_L
(заметьте, альтернативная комбинация не задана)

Идём снова в "Раскладка клавиатуры", отключаем и вночь включаем:
[x] Включить переключение раскладок клавиатуры

Смотрим, что получилось. А получиться должно вот что:
При нажатии левых Ctrl+Shift изменяется текущая раскладка (и соотв. флажок в трее изменяется по кругу - Англ-Рус-Укр).
При нажатии правых Ctrl+Shift изменяется текущая группа раскладки (флажок остаётся прежним). Вот так выглядит структура раскладок и групп:
Английская раскладка
- англ. группа
Русская раскладка
- русская группа
- англ. группа
Украинская раскладка
- украинская группа
- англ. группа

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

в) Настройка для трёх языков (Англ/Рус/Укр) с использованием опции "Основных раскладок".
Всё то же самое, только:
2я закладка (Параметры переключения):
Включаем опцию [x] "Переключение между основными раскладками".
Количество основных раскладок: 2

При таком варианте по левому Ctrl+Shift будет происходить переключение только между Англ и Рус раскладками. На третий язык (Укр) можно переключиться только выбрав его мышкой. Причём после выбора будет происходить переключение между Англ и Украинскими раскладками (для всей системы или только для текущего окна - в зависимости от настройки).


Вот, наверное, и всё.
Какой вариант удобнее - каждый решает для себя сам.

PS в Fedora8 по-умолчанию могут отсутствовать флажки языков, можно взять из другого дистрибутива по адресу /usr/share/locale/l10n/ru/flag.png (.../us/flag.png), либо, цитирую: "Небольшое уточнение: в Fedora 8 есть флажки стран, только входят они в пакет wordtrans и находятся в /usr/share/wordtrans/flags/".

PPS включение этого средства отключает настройки раскладок xorg.conf, при выключении для возрата к использованию настроек xorg.conf необходимо перезапустить X'сы.


Для переключения языков в текстовой консоли в Gentoo редактируется файл /etc/conf.d/keymaps.


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

3 комментария:

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

Проверил на работе в Mandriva 2007. Таки оказывается можно настроить работу трех раскладок, и с хоткеем, и стандартными средствами KDE. Раньше мне это не удавалось. Спасибо автору статьи.

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

Спасибо за статью. Очень помогла для CentOS.

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

в принципе можно и не заморачиваться с раскладками, в том числе и на украинский, а воспользоваться той же виртуальной клавиатурой через www.keyboard.su - меня выручает в сложных ситуациях