О блоге

Все новые материалы размещаются на Блогосайте alv.me. Старые - в процессе переноса.

09.08.2008

KDE: настраиваем клавиатурные раскладки

2004.11.18

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

Общее введение

Тем не менее, все не так страшно, как может показаться на первый взгляд. И если ранее (например, в руководствах Алексея Новодворского к первым версиям Mandrake Russian Edition) резонные люди советовали вообще не трогать модуль настройки клавиатуры KDE, во избежание потери базовой русификации Иксов, то ныне им вполне можно пользоваться. Если это, конечно, нужно.

А нужно ли это народу? Как обычно, ответ будет вполне дипломатичный - кому нужно, а кому и нет. В обоснование чего вспомним, как достигается базовая русификация клавиатуры в Иксах и что она дает.

Сами по себе Иксы (то есть X-сервер) обеспечивают пользователю подключение кириллической раскладки, и не более того. Причем раскладки - одной единственной, примерно соответствующей фабрично русифицированным клавиатурам с DOS-маркировкой клавиш. Что не следует путать с DOS-кодировкой клавиатурного ввода - это название исторически закрепилось за некогда распространенными (а когда-то и единственно наличествующими) в продаже клавиатурами, у которых в кириллице самые востребованные знаки препинания (точка и запятая) располагались на верхнем регистре цифрового ряда клавиш - как на механических пишущих машинках отечественного (и соцлагерного) производства...

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

Историческое отступление: некогда русская раскладка переключатель Lat/Рус имела, и привязан он был к клавише CapsLock. Как сказали бы в Одессе - и кому это мешало? Кому-то, видимо, мешало, потому что начиная, если память не изменяет, с версии XFree86 3.3.4, штатный переключатель из русской раскладки выкинули. То есть пользоваться ею по прямому назначению стало невозможным? - ведь трудно представить себе самого исконно-кондового патриота, не нуждающегося в латинице вообще.

Да, если бы не модуль расширения Иксов, именуемый Xkb Extensions (или просто Xkb). Его подключение (а при любом способе конфигурирования Иксов оно выполняется по умолчанию) обеспечивает такие дополнительные возможности, как:

  • использование варианта раскладки (в частности, варианта winkeys, соответствующего маркировке ныне продающихся фабрично русифицированных клавиатур);
  • выбор клавиши-переключателя (в отличие от Windows, выбор этот весьма обширен - допустимы фиксируемые модификаторы CapsLock и ScrollLock, почти любые сочетания клавиш Alt, Control и Shift (да еще с различением правых и левых), а также т.н. Win-клавиши (полный список можно посмотреть в файле /usr/X11R6/lib/X11/xkb/rules/xfree86.lst);
  • назначение индикатора альтернативной (в нашем случае - русской) раскладки, каковым может быть любой "огонек" на клавиатуре - CapsLock, NumLock или ScrollLock, вне зависимости от того, какая клавиша выступает переключателем;
  • возможность подключения третьей раскладки клавиатуры;
  • всякого рода переопределения клавиш-модификаторов, в том числе и Win-клавиш.

Повторяю, все эти возможности задействуются по умолчанию - отключение расширений Xkb требует внесения в файл /etc/X11/XF86Config (или /etc/X11/xorg/conf) строки

    Option "XkbDisable"

или снятия с нее комментария. И правильно настроить их можно в ходе штатного конфигурирования Иксов программой xf86config/xorgconfig (или аналогичной графической утилитой xf86cfg/xorgcfg), честно и откровенно ответив на серию достаточно прозрачных вопросов. Правда, при автоматической настройке Иксов посредством

$ X --configure

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

В итоге, казалось бы, непосредственно в Иксах можно получить все, что нужно для счастья русскому (пардон, русскоязычному) человеку. За двумя исключениями:

  1. переключение раскладок клавиатуры в Иксах, в отличие от Windows, имеет силу для всех приложений сразу; что не всегда может быть удобно - например, при одновременной работе в командной строке и текстовом редакторе с русскоязычным документом;
  2. с помощью Xkb можно задействовать только три раскладки клавиатуры, и если по ходу дела в русско-латинский (или, что идентично, русско-английский) текст требуется вставлять еще и немецкие умляуты с французскими аксантами, а то и изобильную скандинавскую символику, их оказывается явно мало.

И вот тут-то и приходит на помощь интегрированный в KDE аналог Xkb, который, как нетрудно догадаться, носит имя kxkb. Так что если ни множество раскладок, ни привязка переключения клавиатуры к некоему приложению (или даже отдельному окну приложения) вам лично не нужны, дальше можете не читать, забыв об kxkb навсегда и ограничившись корректной настройкой Xkb.

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

И еще: если необходимо использовать множество клавиатурных раскладок, дело не ограничится настройкой kxkb, а потребует еще и использования unicode-шрифтов и локали UTF-8. Что, впрочем, к теме настоящей заметки не относится.

Действуем через KCC

Итак, мы впервые приступаем к настройке клавиатурных раскладок. Для чего запускаем KCC (Центр управления KDE) и следуем по пунктам меню: Региональные и специальные возможности->Раскладки клавиатуры. В правом фрейме окна KCC появляется панель с тремя закладками: Раскладка, Параметры переключения, Параметры XKB (рис. 1), которые мы и рассмотрим последовательно.

Рис. 1. Настройка раскладок клавиатуры через KCC

Как можно видеть из рисунка 1, в момент первого запуска KCC раскладки не активизированы. Чтобы сделать их доступными для загрузки, нужно в первую очередь отметить переключатель Включить раскладки клавиатуры. Что в данном случае следует понимать как подключение модуля kxkb. После чего из длинного списка слева можно выбрать требуемые раскладки, появляющиеся тем самым в списке задействованных справа (рис. 2).

Рис. 2. Выбор необходимых раскладок клавиатуры

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

Для начала из выпадающего меню Модель клавиатуры при необходимости вместо умолчальной Стандартная PC 104 клавиши выбираем что-либо более подходящее имеющимся реалиям. Впрочем, в большинстве случаев обычных настольных клавиатур делать этого не следует: эмпирически замечено, что kxkb лучше всего работает именно со стандартной клавиатурой. И к перебору вариантов приходится прибегать только при наличии чего-либо уж очень экзотического (например, всяких своеобычных ноутбучных клавиатур).

Затем двойным щелчком мыши в левом списке добавляем к умолчальной раскладке Английская США (us) нужную нам - в данном случае это будет Русская (ru). А затем из нижнего выпадающего меню Вариант раскладки выбираем искомый - winkeys. При этом в "командной строке" в нижней части панели высвечиваются выбранные параметры. В нашем примере они будут выглядеть так:

setxkbmap -model pc104 -layout ru -variant winkeys

Далее переходим на к закладке Параметры переключения (рис. 3). Здесь, в соответствие с нормами современной русской (точнее, российской) орфографии, игнорируем переключатель, отвечающий за букву ё (хорошо это или плохо - но в книгах и прочих изданиях принято именно так). Зато, при желании, ставим переключатель Отображать флаг страны. Который, встраиваясь в трей главной панели KDE, эмулирует индикатор текущей раскладки клавиатуры - в виде якобы американского и российского флагов, соответственно.

Рис. 3. Настройка параметров переключения раскладок

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

Теперь - Политика переключения, одна из причина, ради которой вообще стоит связываться с kxkb. По умолчанию отмечен вариант Глобально - то есть переключение раскладки имеет силу для всех открытых (и вновь открываемых) приложений (если кто помнит, так же было и в Windows 3.1). Что, как я уже говорил, не во всех случаях удобно. И потому можно выбрать одну из следующих возможностей - Приложение, когда переключение раскладки распространяется на данную ,программу (и все ее экземпляры, открытые в собственных окнах, как это принято в Windows, начиная с 95-й ее инкарнации), или Окно - в этом случае каждый экземпляр программы будет абсолютно автономен в отношении текущей раскладки.

А вот что такое Липкое переключение, я, честно говоря, выяснить так и не удосужился за неактуальностью. Тем не менее, буду признателен за соответствующие разъяснения. Подозреваю, что это имеет отношение к случаю с более чем двумя раскладками.

После этого переходим к последней закладке - Параметры XKB (рис. 4). Здесь для начала нужно включить расширения xkb - я уже говорил, что собственно опции Иксового Xkb Extentions аннулируются при подключении kxkb (точнее, будут аннулированы в момент, когда мы нажмем кнопку Применить. И их следует заменить аналогами из нашего KDE'шного модуля.

Рис. 4. Настройка переключателя раскладок, их индикатора и т.д.

Для чего перво-наперво отмечаем переключатель Сбросить старые параметры, под коими следует понимать опции Xkb, прописанные в файле /etc/X11/XF86Config (или /etc/X11/xorg.conf) - чтобы не мешались. Вообще-то, говорят, что это не обязательно (или обязательно не всегда). Но у меня kxkb нормально работало (после ручной доводки, о которой речь пойдет ниже) только при сбросе старых параметров.

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

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

На первый отвечать я категорически отказываюсь - хотя подозреваю, что дело тут все же в некоторых недоработках, не столько даже самого модуля kxkb, сколько способа его интерактивной раскладки. Странно только, что недоработки эти тянутся из одной версии KDE в другую, а воз и ныне там. Хотя некоторые положительные тенденции и просматриваются.

А на вопрос - что делать, - как обычно, можно ответить двояко: а) снести kxkb на фиг, или б) бороться до победы ручной правкой конфигурационного его файла.

Переходим к мануальной терапии

Возможно, вам покажется что овчинка (возможность независимого переключения раскладок в разных программах) не стоит выделки (ручной правки конфига). И тогда проще всего отказаться от kxkb. Только не нужно пытаться делать это через Центр управления - отключая раскладки клавиатуры и расширения Xkb - провозитесь вы долго, а результата, скорее всего, не будет.

И потому самое время обратиться к каталогу $HOME/.kde/share/config - помните, в прошлой заметке я говорил, что он нам еще понадобится. А потом отыскать в нем файл $HOME/.kde/share/config/kxkbrc - конфиг модуля kxkb, просто-напросто удалить его (или переименовать), и перезапустить сессию KDE. По первости среда эта выругается на отсутствие удаленного файла, но Иксовое переключение раскладок придет в норму, а при следующем старте KDE даже и ругани уже не последует...

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

Очевидно, что правке подлежит тот же самый файл $HOME/.kde/share/config/kxkbrc. Открываем его в любом текстовом редакторе и внимательно изучаем результаты наших предыдущих действий, воплощенные в опции конфигурации. А выглядит они примерно так:

[Layout]
Additional=ru
EnableXkbOptions=true
Includes=
Layout=us
Model=pc104
Options=grp_led:caps,grp:caps_toggle
ResetOldOptions=true
ShowFlag=true
ShowSingle=false
StickySwitching=false
StickySwitchingDepth=1
SwitchMode=WinClass
Use=true
Variants=us(intl),ru(winkeys)

Не смотря на некоторую бессистемность списка опций, на первый взгляд в этом файле все нормально: есть и строка, предписывающая использовать раскладки клавиатуры (Use=true), модель клавиатуры (Model=pc104), и добавленная русская раскладка (Additional=ru) вместе с определением варианта для нее (Variants=us(intl),ru(winkeys)), и включение аналогов Xkb (EnableXkbOptions=true), и сброс Иксовых настроек (ResetOldOptions=true), и демонстрация флага (ShowFlag=true), и назначение клавиши-переключателя вкупе с индикацией альтернативной раскладки светодиодом (Options=grp_led:caps,grp:caps_toggle), и привязка раскладки к приложению, как в Windows (SwitchMode=WinClass). И, тем не менее, никакого переключения не происходит...

И тут мы видим строку Layout=us. Так вот где таилась погибель kxkb - переключать-то не на что! И действительно, стоит только изменить ее таким образом:

Layout=us,ru(winkeys)

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

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

Вот и все. Единственное, что следует помнить - после ручной доводки не следует перенастраивать клавиатурную раскладку через KCC - результат может быть непредсказуемым, и сеанс мануальной терапии придется повторить. А в остальном, прекрасная маркиза, все не просто хорошо, а так даже замечательно.