Как стать автором
Обновить

Опять о раскладке Бирмана, да и переключении раскладок вообще в грядущей 8.10

Настройка Linux *

Disclaimer


Всё нижеописанное относится к Ubuntu 8.10 (interpid), хотя скорее всего затронет и будущие стабильные версии.

Обратите внимимание, что некоторые описанные ниже шаги могут привести к непредсказуемым :) последствиям.

Предистория


Некоторое время назад o4kapuk описывал в статье И снова о раскладке Бирмана как «Добиться поддержки „типографической” функциональности средствами, максимально приближенными к штатным.»

У меня, как дома, так и на работе это решение приводило к следующим проблемам:
  1. После перезагрузки раскладка не переключалась. Эту проблему каждый раз приходилось решать вызывая апплет конфигурации и изменение какого-нибудь параметра в «Дополнительных параметрах».
  2. После некоторых обновлений раскладка ломалась совсем. Приходилось переустанавливать нужные файлы
  3. После обновления на 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, однако лучше потратить час-другой на решение этих проблем и получить прекрасно работающую типографскую раскладку, чем наблюдать то, что сделал Хабр с кавычками тут.

С другой стороны, почему бы не включить данный вариант в базовую поставку? Это я обращаюсь к разработчикам, которым не составит труда внести изменения в дистрибутив.
Теги:
Хабы:
Всего голосов 10: ↑8 и ↓2 +6
Просмотры 1.1K
Комментарии Комментарии 12