Disclaimer
Всё нижеописанное относится к Ubuntu 8.10 (interpid), хотя скорее всего затронет и будущие стабильные версии.
Обратите внимимание, что некоторые описанные ниже шаги могут привести к непредсказуемым :) последствиям.
Предистория
Некоторое время назад o4kapuk описывал в статье И снова о раскладке Бирмана как «Добиться поддержки „типографической” функциональности средствами, максимально приближенными к штатным.»
У меня, как дома, так и на работе это решение приводило к следующим проблемам:
- После перезагрузки раскладка не переключалась. Эту проблему каждый раз приходилось решать вызывая апплет конфигурации и изменение какого-нибудь параметра в «Дополнительных параметрах».
- После некоторых обновлений раскладка ломалась совсем. Приходилось переустанавливать нужные файлы
- После обновления на 8.10 метод перестал работать окончательно.
Кто виноват, и что делать?
Шаг 1
Начну с того, что с некоторого времени вариант winkeys стал «вариантом по умолчанию» и в файле
/etc/X11/xkb в раскладке ru не упоминается. Не смотря на это повторим 3-ий шаг из упомянутой статьи: добавим вариант winkeys_typo:
<layout> <configItem> <name>ru</name> <shortDescription>Rus</shortDescription> <description>Russia</description> </configItem> <variantList> <variant> <configItem> <name>winkeys_typo</name> <description>Winkeys + Typography</description> </configItem> </variant> <variant>
Шаг 2
И вот тут нас ждёт сюрприз: теперь файл /etc/X11/xkb/symbols/ru не является наиболее подходящим местом для добавления варианта winkeys_typo. Откроем файл /usr/share/X11/xkb/symbols/ru и добавим в него уже привычный код:
partial alphanumeric_keys xkb_symbols "winkeys_typo" { include "ru(winkeys)" name[Group1]= "Russia — Typography"; key.type[group1]="FOUR_LEVEL"; key <TLDE> { [ Cyrillic_io, Cyrillic_YO, acute, approxeq ] }; key <AE01> { [ 1, exclam, onesuperior, onesuperior ] }; key <AE02> { [ 2, quotedbl, twosuperior, twosuperior ] }; key <AE03> { [ 3, numerosign, threesuperior, threesuperior ] }; key <AE04> { [ 4, semicolon, section, section ] }; key <AE05> { [ 5, percent, 0x01002030, 0x01002030 ] }; key <AE11> { [ minus, underscore, emdash, hyphen ] }; key <AE12> { [ equal, plus, notequal, plusminus ] }; key <AD01> { [Cyrillic_shorti, Cyrillic_SHORTI, q, onequarter ] }; key <AD03> { [ Cyrillic_u, Cyrillic_U, EuroSign, oneeighth ] }; key <AD04> { [ Cyrillic_ka, Cyrillic_KA, registered, R ] }; key <AD05> { [ Cyrillic_ie, Cyrillic_IE, trademark, onethird ] }; key <AD09> { [ Cyrillic_shcha, Cyrillic_SHCHA, masculine, O ] }; key <AC01> { [ Cyrillic_ef, Cyrillic_EF, approxeq, A ] }; key <AC02> { [ Cyrillic_yeru, Cyrillic_YERU, section, S ] }; key <AC03> { [ Cyrillic_ve, Cyrillic_VE, degree, D ] }; key <AC04> { [ Cyrillic_a, Cyrillic_A, sterling, F ] }; key <AC06> { [ Cyrillic_er, Cyrillic_ER, h, onehalf ] }; key <AC07> { [ Cyrillic_o, Cyrillic_O, doublelowquotemark, J ] }; key <AC08> { [ Cyrillic_el, Cyrillic_EL, leftdoublequotemark, leftsinglequotemark ] }; key <AC09> { [ Cyrillic_de, Cyrillic_DE, rightdoublequotemark, rightsinglequotemark ] }; key <AC10> { [ Cyrillic_zhe, Cyrillic_ZHE, leftsinglequotemark, seconds ] }; key <AC11> { [ Cyrillic_e, Cyrillic_E, rightsinglequotemark, minutes ] }; key <AB02> { [ Cyrillic_che, Cyrillic_CHE, multiply, 0x010022C5 ] }; key <AB03> { [ Cyrillic_es, Cyrillic_ES, copyright, copyright ] }; key <AB08> { [ Cyrillic_be, Cyrillic_BE, guillemotleft, doublelowquotemark ] }; key <AB09> { [ Cyrillic_yu, Cyrillic_YU, guillemotright, rightdoublequotemark ] }; key <AB10> { [ period, comma, ellipsis, comma ] }; key <SPCE> { [ space, space, nobreakspace, nobreakspace ] }; include "level3(ralt_switch)" };
Шаг 3
Раскладка появилась в списке и всё заработало? Чтож, вам повезло… а мне вот повезло не очень: раскладки в списке не оказалось.
В поисках решения, я наткнулся на вот такое обсуждение.
Попробовав разные варианты я остановился на следующем:
Шаг 3.1
Редактируем файл /etc/default/console-setup:
XKBMODEL="logimel" XKBLAYOUT="us,ru" XKBVARIANT=",winkeys_typo"
Обратите внимание на XKBMODEL=«logimel» — это модель вашей клавиатуры, у меня не работали некоторые дополнительные клавиши, пока я не остановился на этой. Кстати, возможно, понять какая у вас, вам поможет файл /usr/share/X11/xkb/rules/base.lst
Шаг 3.2
sudo dpkg-reconfigure console-setup :)
Тут можно просто понажимать enter, но в случае, если он не нажмётся — нажмите сначала tab :)
В результате получите кучу сообщений вида «WARNING: Undefined kernel key code for xxx» — не обращайте внимания. В конце должно быть сообщение «[ OK ] update-initramfs: Generating /boot/initrd.img-2.6.27-3-generic»
Шаг 4
А теперь решим старую проблему неработоспособности переключения при перезагрузке — для этого очистим файл конфигурации клавиатуры гнома: sudo gedit ~/.gconf/desktop/gnome/peripherals/keyboard/kbd/%gconf.xml -> ctrl+a -> ctrl+s :)
Шаг 5
Да, как это не ужасно звучит — перезагрузимся и всё должно работать. Если нет… проверяем всё ещё раз.
Заключение и предложение
Минусами данного метода, как и предыдущего, являются проблемы с совместимостью с будущими версиями ubuntu, однако лучше потратить час-другой на решение этих проблем и получить прекрасно работающую типографскую раскладку, чем наблюдать то, что сделал Хабр с кавычками тут.
С другой стороны, почему бы не включить данный вариант в базовую поставку? Это я обращаюсь к разработчикам, которым не составит труда внести изменения в дистрибутив.