Как добавить собственную раскладку клавиатуры?

openSUSE, SUSE Linux Enterprise

Модератор: Модераторы разделов

gabix
Сообщения: 352
ОС: openSUSE Leap 15.4

Как добавить собственную раскладку клавиатуры?

Сообщение gabix »

openSUSE 12.3/KDE 4.10.5 “release 4”

Хочу добавить собственную раскладку клавиатуры (русскую «Диктор»). Раскопал кое-какую инструкцию в одной из старых тем: Альтернативная раскладка клавиатуры. Проделал первый шаг, добавил в /usr/share/X11/xkb/symbols/ru следующий раздел:

Spoiler

Код: Выделить всё

partial alphanumeric_keys
xkb_symbols "diktor" {

    name[Group1]= "Russia - Diktor";

    key    <TLDE> {    [     Cyrillic_io,     Cyrillic_IO    ]    };
    key    <AE01> {    [        1,Cyrillic_HARDSIGN    ]    };
    key    <AE02> {    [        2,Cyrillic_SOFTSIGN    ]    };
    key    <AE03> {    [        3,      numerosign    ]    };
    key    <AE04> {    [        4,         percent    ]    };
    key    <AE05> {    [        5,         colon    ]    };
    key    <AE06> {    [        6,     semicolon    ]    };
    key    <AE07> {    [        7,         minus    ]    };
    key    <AE08> {    [        8,      quotedbl    ]    };
    key    <AE09> {    [        9,     parenleft    ]    };
    key    <AE10> {    [        0,    parenright    ]    };
    key    <AE11> {    [     asterisk,    underscore    ]    };
    key    <AE12> {    [        equal,          plus    ]    };
    key    <BKSL> {    [    backslash,           slash    ]    };

    key <LSGT> {        [           slash,             bar      ]       };

    key    <AD01> {    [    Cyrillic_tse,    Cyrillic_TSE    ]    };
    key    <AD02> {    [Cyrillic_softsign,Cyrillic_hardsign    ]    };
    key    <AD03> {    [     Cyrillic_ya,     Cyrillic_YA    ]    };
    key    <AD04> {    [        comma,      question    ]    };
    key <AD05> {        [          period,          exclam    ]       };
    key    <AD06> {    [     Cyrillic_ze,     Cyrillic_ZE    ]    };
    key    <AD07> {    [     Cyrillic_ve,     Cyrillic_VE    ]    };
    key    <AD08> {    [     Cyrillic_ka,     Cyrillic_KA    ]    };
    key    <AD09> {    [     Cyrillic_de,     Cyrillic_DE    ]    };
    key    <AD10> {    [    Cyrillic_che,    Cyrillic_CHE    ]    };
    key    <AD11> {    [    Cyrillic_sha,    Cyrillic_SHA    ]    };
    key    <AD12> {    [  Cyrillic_shcha,  Cyrillic_SHCHA    ]    };

    key    <AC01> {    [      Cyrillic_u,    Cyrillic_U    ]    };
    key    <AC02> {    [      Cyrillic_i,    Cyrillic_I    ]    };
    key    <AC03> {    [     Cyrillic_ie,     Cyrillic_IE    ]    };
    key    <AC04> {    [      Cyrillic_o,    Cyrillic_O    ]    };
    key    <AC05> {    [      Cyrillic_a,    Cyrillic_A    ]    };
    key    <AC06> {    [     Cyrillic_el,     Cyrillic_EL    ]    };
    key    <AC07> {    [     Cyrillic_en,     Cyrillic_EN    ]    };
    key    <AC08> {    [     Cyrillic_te,     Cyrillic_TE    ]    };
    key    <AC09> {    [     Cyrillic_es,     Cyrillic_ES    ]    };
    key    <AC10> {    [     Cyrillic_er,     Cyrillic_ER    ]    };
    key    <AC11> {    [ Cyrillic_shorti, Cyrillic_SHORTI    ]    };

    key    <AB01> {    [     Cyrillic_ef,     Cyrillic_EF    ]    };
    key    <AB02> {    [      Cyrillic_e,    Cyrillic_E    ]    };
    key    <AB03> {    [     Cyrillic_ha,     Cyrillic_HA    ]    };
    key    <AB04> {    [   Cyrillic_yeru,   Cyrillic_YERU    ]    };
    key    <AB05> {    [     Cyrillic_yu,     Cyrillic_YU    ]    };
    key    <AB06> {    [     Cyrillic_be,     Cyrillic_BE    ]    };
    key    <AB07> {    [     Cyrillic_em,     Cyrillic_EM    ]    };
    key    <AB08> {    [     Cyrillic_pe,     Cyrillic_PE,    guillemotleft,    less    ]    };
    key    <AB09> {    [    Cyrillic_ghe,    Cyrillic_GHE,    guillemotright,    greater    ]    };
    key    <AB10> {    [    Cyrillic_zhe,    Cyrillic_ZHE    ]    };

    key.type[group1]="TWO_LEVEL";

    include "kpdl(comma)"

    include "level3(ralt_switch)"
};


А вот дальше что делать? Файл /etc/X11/xorg.conf, как известно, нынче жёстко игнорируется, и добавление чего-то в него эффекта не имеет. Если щёлкнуть правой кнопкой мыши по индикатору раскладки и выбрать Настроить…, потом Раскладки → Добавить, то для русского языка вижу следующие варианты:
  • вариант по умолчанию
  • DOS
  • печатная машинка
  • печатная машинка, устаревшая,
  • с украинско-белорусской раскладкой
  • устаревшая
  • фонетическая с клавишами Win
  • фонетическая
  • сербская (Россия)


Перезагрузка иксов по Ctrl+Alt+Backspace ничего не меняет.

Пробовал искать в Гугле по следующим фразам:
how to add custom keyboard layout in openSUSE 12.3 KDE
how to create custom keyboard layout in openSUSE 12.3 KDE
как добавить собственную раскладку клавиатуры в openSUSE 12.3 KDE
как создать собственную раскладку клавиатуры в openSUSE 12.3 KDE

однако ничего путного не нашёл, лишь банальные инструкции о том, как настроить раскладки.

Конечно, можно попытаться обойти проблему, например, вставить нужный код под legacy или типа того, но хотелось бы разобраться: неужели теперь нет никакой возможности собственные раскладки добавлять?
Спасибо сказали:
Аватара пользователя
Minton
Сообщения: 1588
Статус: openSUSE Localization Team
ОС: openSUSE Tumbleweed x86-64

Re: Как добавить собственную раскладку клавиатуры?

Сообщение Minton »

gabix писал(а):
24.12.2013 21:41
Файл /etc/X11/xorg.conf, как известно, нынче жёстко игнорируется, и добавление чего-то в него эффекта не имеет.

И откуда же вам известна подобная ахинея?
Русский раздел на forums.opensuse.org :)

"Настоящие мужчины используют поиск" ©Goodvin
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как добавить собственную раскладку клавиатуры?

Сообщение drBatty »

gabix писал(а):
24.12.2013 21:41
Файл /etc/X11/xorg.conf, как известно, нынче жёстко игнорируется

это не так. На самом деле настройки лежат в другом месте(у меня в куче файлов /etc/X11/xorg.conf.d/ ), но если вы хотите, вы можете определить и старый xorg.conf для совместимости вот с такими инструкциями.

Но я-бы сделал это так, как это принято в дистрибутиве. Т.е. в /etc/X11/xorg.conf.d/20-keyboard-layout.conf

Хотя конечно в сусе это может и переделали, я без понятия.



gabix писал(а):
24.12.2013 21:41
потом Раскладки → Добавить, то для русского языка вижу следующие варианты

вот и сделайте так. Добавьте чё-нить, и перезагрузитесь. А потом в консоли наберите

$

find /etc/ -mtime -1


оно покажет, какие файлы изменились в /etc/ за последние сутки.

PS: возможно(хотя вряд-ли в этом случае), она что-то меняет не в /etc/, а в $HOME.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
gabix
Сообщения: 352
ОС: openSUSE Leap 15.4

Re: Как добавить собственную раскладку клавиатуры?

Сообщение gabix »

drBatty писал(а):
25.12.2013 10:35
Т.е. в /etc/X11/xorg.conf.d/20-keyboard-layout.conf


У меня в /etc/X11/xorg.conf.d/ такого файла не было. Обнаружился некая копия 01-keyboard-layout.conf~. Я пересохранил этот файл и как 01-keyboard-layout.conf, а потом и как 20-keyboard-layout.conf со следующим содержанием:

Код: Выделить всё

Section "InputDevice"
  Driver       "kbd"
  Identifier   "Keyboard[0]"
  Option       "Protocol" "Standard"
  Option       "XkbLayout" "us,ru,by,epo,ru"
  Option       "XkbModel" "microsoftmult"
  Option       "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll,lv3:win_switch"
  Option       "XkbRules" "xfree86"
  Option       "XkbVariant" ",winkeys,winkeys,,diktor"
EndSection


Эффекта никакого ни в одном из случаев.

вот и сделайте так. Добавьте чё-нить, и перезагрузитесь. А потом в консоли наберите

$

find /etc/ -mtime -1


оно покажет, какие файлы изменились в /etc/ за последние сутки.


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

Код: Выделить всё

# find /etc -mtime -0,2
/etc
/etc/X11/xorg.conf.d
/etc/X11/xorg.conf.d/20-keyboard-layout.conf
/etc/X11/xorg.conf.d/01-keyboard-layout.conf~
/etc/X11/xorg.conf.d/01-keyboard-layout.conf
/etc/resolv.conf.netconfig
/etc/adjtime


а также:

Код: Выделить всё

# find $HOME -mtime -0,2
/root
/root/.dbus/session-bus/f2e42fa76d380fe9ded6ae94493eec15-0
/root/.kde4/share/apps/kate
/root/.kde4/share/apps/kate/metainfos
/root/.kde4/share/apps/RecentDocuments
/root/.kde4/share/apps/RecentDocuments/20-keyboard-layout.conf.desktop
/root/.kde4/share/apps/RecentDocuments/01-keyboard-layout.conf~.desktop
/root/.kde4/share/apps/RecentDocuments/01-keyboard-layout.conf.desktop
/root/.kde4/share/apps/activitymanager/activityranking
/root/.kde4/share/apps/activitymanager/activityranking/database
/root/.kde4/share/apps/activitymanager/resources
/root/.kde4/share/apps/activitymanager/resources/database
/root/.kde4/share/config
/root/.kde4/share/config/kglobalshortcutsrc
/root/.kde4/share/config/katerc
/root/.kde4/share/config/kdeglobals
/root/.bash_history
/root/.xauthEnc1Hh


Но вопрос мой не в том, как добавить дополнительную раскладку, а как объяснить системе, что есть мой собственный её вариант.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как добавить собственную раскладку клавиатуры?

Сообщение drBatty »

gabix писал(а):
25.12.2013 18:11
У меня в /etc/X11/xorg.conf.d/ такого файла не было. Обнаружился некая копия 01-keyboard-layout.conf

цифра означает приоритет. Подробности в мане, AFAIK чем меньше цифра, тем позже запускается файл. Этот в посл. очередь должен.
gabix писал(а):
25.12.2013 18:11
Эффекта никакого ни в одном из случаев.

читайте документацию к своему дистрибутиву.
gabix писал(а):
25.12.2013 18:11
Добавил русскую устаревшую, перезагрузился, получил (думаю, целые сутки смотреть нет смысла, 4,8 часа достаточно):

facepalm

ну кто сказал что там дроби можно, и что их пишут через запятую?!

тогда уж -newermt ЛЮБАЯ_ДАТА (дата в формате как в date)
gabix писал(а):
25.12.2013 18:11
/root/

вряд-ли вы прочитаете моё сообщение из linux, я угадал?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Как добавить собственную раскладку клавиатуры?

Сообщение NickLion »

Файлы /usr/share/X11/xkb/rules/base.extras.xml и /usr/share/X11/xkb/rules/evdev.extras.xml редактировали? Если нет, то отредактируйте.
Спасибо сказали:
gabix
Сообщения: 352
ОС: openSUSE Leap 15.4

Re: Как добавить собственную раскладку клавиатуры?

Сообщение gabix »

drBatty писал(а):
25.12.2013 18:47
ну кто сказал что там дроби можно, и что их пишут через запятую?!


А кто сказал, что нельзя? В том, что это можно и это действует, легко убедиться, меняя число и получая, соответственно, разные результаты. А что через запятую, выяснено на практике (если ввести -mtime -0.2 и др., с точкой, то выдаётся сообщение об ошибке, очевидно, точка или запятая зависит банально от текущей локали).
Спасибо сказали:
gabix
Сообщения: 352
ОС: openSUSE Leap 15.4

Re: Как добавить собственную раскладку клавиатуры?

Сообщение gabix »

NickLion, спасибо огромное! Пишу уже с «Диктором» :-) Проблема решена именно редактированием /usr/share/X11/xkb/rules/evdev.extras.xml (а /usr/share/X11/xkb/rules/base.extras.xml — это символическая ссылка на первый файл). Конкретно в раздел русских вариантов вставлен код:

Код: Выделить всё

        <variant>
          <configItem>
            <name>diktor</name>
            <shortDescription>diktor</shortDescription>
            <description>Russian (Diktor)</description>
            <languageList><iso639Id>rus</iso639Id></languageList>
          </configItem>
        </variant>


Ну а дальше обычный порядок включения дополнительной раскладки.

drBatty, спасибо за участие, узнал кое-что новое. Век живи — век учись :)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как добавить собственную раскладку клавиатуры?

Сообщение drBatty »

NickLion писал(а):
25.12.2013 19:15
Файлы /usr/share/X11/xkb/rules/base.extras.xml и /usr/share/X11/xkb/rules/evdev.extras.xml редактировали?

вообще-то как раз эти файлы редактировать и НЕ нужно. Хотя... Может в вашем уставе и прописано такое рукожопие, не в курсе.

gabix писал(а):
25.12.2013 19:19
А кто сказал, что нельзя?

в мане не написано, что можно. Значит -- нельзя. Это вы нашли любопытную пасхалку (:
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Как добавить собственную раскладку клавиатуры?

Сообщение NickLion »

drBatty писал(а):
26.12.2013 12:15
вообще-то как раз эти файлы редактировать и НЕ нужно. Хотя... Может в вашем уставе и прописано такое рукожопие, не в курсе.

А что нужно отредактировать? Да, я согласен, что просто редактирование данных файлов доживёт до обновления пакета. Я в аналогичной ситуации создавал свой пакет, в котором был патч, поэтому с обновлениями проблем не было.
Спасибо сказали:
gabix
Сообщения: 352
ОС: openSUSE Leap 15.4

Re: Как добавить собственную раскладку клавиатуры?

Сообщение gabix »

drBatty писал(а):
26.12.2013 12:15
в мане не написано, что можно.


В мане:

-mtime n
File's data was last modified n*24 hours ago.


Не вижу, как из этого следует, что n не может быть дробным.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как добавить собственную раскладку клавиатуры?

Сообщение drBatty »

NickLion писал(а):
26.12.2013 13:17
А что нужно отредактировать? Да, я согласен, что просто редактирование данных файлов доживёт до обновления пакета. Я в аналогичной ситуации создавал свой пакет, в котором был патч, поэтому с обновлениями проблем не было.

именно для этого конфиг и выносится в /etc/, а в /usr/ лежит сама программа. Но конечно можно накостылить костылей, что-бы править программу по месту.

А зачем вообще тогда конфиг? Давайте прямо в коде пропишем!
gabix писал(а):
26.12.2013 13:22
Не вижу, как из этого следует, что n не может быть дробным.

никак не следует. А разве я говорил, что там это написано? Я говорил, что там этого НЕ написано.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Как добавить собственную раскладку клавиатуры?

Сообщение NickLion »

drBatty, прекрасно, но какой /etc файл нужно изменить/добавить, чтобы получить новую раскладку в интерфейсе? Если этот файл является единственным файлом настройки программы, то не вижу в чём костыльность и патч для /usr/share/... — вполне нормальное решение.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как добавить собственную раскладку клавиатуры?

Сообщение drBatty »

NickLion
man 4 evdev
man 5 xorg.conf
XkbDir "path"
sets the base directory for keyboard layout files. The -xkbdir command line option
can be used to override this. The default directory is

/etc/X11/xkb


есть общее правило для поиска конфигов:

  • конфиг ищется в /usr/share/
  • конфиг ищется в /etc/
  • конфиг ищется в $HOME юзера запустившего программу

Эти три пункта выполняются последовательно и безусловно. При этом строчки из след. пункта перекрывают предыдущий.

Таким образом,

1. username может запустить программу prog вообще ничего не настраивая, и она будет работать с конфигом из /usr/share

2. администратор может положить в /etc/ общий конфиг, и тогда у всех юзеров, в т.ч. username, будет переопределены некоторые (все) опции конфигом /etc/

3. username может сделать свой конфиг в $HOME, и переопределить там некоторые(все) опции лично для себя.

Т.к. в данном случае ТС хочет для всех добавить раскладку, то он должен положить конфиг в /etc/. Конкретно туда, куда принято в дистрибутиве. По умолчанию в /etc/X11/xkb/ или /etc/X11/xorg.conf.d/
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как добавить собственную раскладку клавиатуры?

Сообщение drBatty »

да, способ правки конфига в /usr/share/ обладает сл. недостатками
  • конфиг слетает при обновлении, и при удалении программы. Также конфиг слетит при установке программы в другой PREFIX, например /usr/local/
  • невозможно посмотреть, какие опции в конфиге были изначально, задуманные автором программы. Если вы поставили туда 123, вы не узнаете, что там изначально было 17.
  • некоторые программы вообще не смотрят /usr/share/, а хранят например дефолтный конфиг в /usr/doc/ или вообще на сайте.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Как добавить собственную раскладку клавиатуры?

Сообщение NickLion »

Спасибо. Надо будет проверить.
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Как добавить собственную раскладку клавиатуры?

Сообщение Hephaestus »

drBatty писал(а):
26.12.2013 12:15
в мане не написано, что можно. Значит -- нельзя.
drBatty, эх, если бы маны были настолько полными и однозначными...
Но, сожалению, часто это не так.
Не далее как вчера, я хотел найти пакет из определенной ветки с помощью apt-cache.
Для apt-get в этом случае есть ключ -t, а вот для apt-cache... в общем, я полез в ман. Ключа не нашел, и вообще как-то не увидел ни слова по этому поводу.
Тем не менее, apt-cache -t сработало и вряд ли это пасхалка. Просто ман такой.
А у некоторых программ в манах вообще о ключах не написано, тем не менее, ключи есть и работают.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как добавить собственную раскладку клавиатуры?

Сообщение drBatty »

fflatx писал(а):
27.12.2013 09:49
эх, если бы маны были настолько полными и однозначными...

в данном случае это новая фича, и она пока не везде работает. Ну на своём локалхосте пробуйте конечно, но не более того...
fflatx писал(а):
27.12.2013 09:49
Тем не менее, apt-cache -t сработало и вряд ли это пасхалка. Просто ман такой.

дебианопроблемы.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: