
Я понимаю, что, добавляя
setxkbmap xxx
мы можем изменить раскладку клавиатуры на X-сервере. Она не может пережить выход из системы/перезагрузку, поэтому мы можем добавить эту строку, $HOME/.profile
чтобы сделать ее доступной при входе в систему, какэтот вопросописывает.
Но когда мы это делаем, до входа в систему, раскладка клавиатуры все еще недоступна. Если мы хотим использовать ее на этом этапе, как нам поступить? Я использую GDM на Centos7.
Что я пробовал:
Определите новую раскладку клавиатуры, назовите
symmetri
ее и поместите под/usr/share/X11/xkb/symbols/
. Для проверки вы можете загрузить еездесь.ПРИМЕЧАНИЕ: Я определил макет только для сервера X11, но еще не для виртуальной консоли.Может быть, именно поэтому я не могу перечислить его ни сlocatectl list-keymaps
, ниloadkeys
, ни касаясь/etc/vconsole.conf
.setxkbmap symmetri
для использования. Изменения применены. Вставьте его/etc/profile.d/symmetri.sh
для использования в профиле пользователя.Выхожу из системы, а когда пытаюсь войти, все перестает работать и появляется QWERTY.
Я вхожу в систему с помощью QWERTY, а затем теперь использую Symmetri, поскольку скрипт запускается после успешного входа в систему.
Открываю терминал, переключаюсь обратно
us
наsetxkbmap us
,
А потом,
localectl set-x11-keymap symmetri
На этот раз макет не изменен localectl set-keymap symmetri
.
решение1
вы можете использовать
localectl set-x11-keymap ***
Это будет постоянным для консоли и рабочего стола, более подробную конфигурацию можно найти на странице руководства.https://www.unix.com/man-page/centos/1/LOCALECTL/
решение2
@terdon твое решение не работает, но спасибо за помощь, я узнал больше; сначала я тоже подозревал, что это как-то связано с Gnome, но оказалось, что это только X11. И @TimBrandrick, твое решение должно работать в большинстве случаев, но в моем случае, не раньше, чем добавить мою раскладку клавиатуры в .../X11/xkb/rules/evdev.xml
(и на всякий случай, .../X11/xkb/rules/evdev.lst
, потому что, согласно некоторым источникам, lst
файл является скомпилированной версией xml
, но я сомневаюсь, что все процессы, зависящие от этих файлов, будут только читать xml
файлы; поэтому я добавляю оба. На самом деле, xml
содержит больше информации, чем lst
, но lst
его легче понять.)
Итак, вот как я это сделал:
1. Открыть .../X11/xkb/rules/evdev.xml
.
(Я опускаю начальную часть, поскольку она отличается в разных дистрибутивах. В CentOS 7 она находится в разделе /usr/share/
; в Ubuntu <= 8.08 она находится в разделе /etc/
. 1 Странно. )
2. В конце дочерних узлов <layoutList>
добавьте эту часть:
(измените по своему усмотрению, это всего лишь шаблон)
<layout>
<configItem>
<name>symmetri</name>
<shortDescription>symmetri</shortDescription>
<description>Symmetri (CN, EN and ES)</description>
<languageList>
<iso639Id>us</iso639Id>
</languageList>
</configItem>
<variantList>
<variant>
<configItem>
<name>non-prog</name>
<shortDescription>non-prog</shortDescription>
<description>Symmetri for non-programmer (CN, EN and ES)</description>
<languageList>
<iso639Id>us</iso639Id>
</languageList>
</configItem>
</variant>
</variantList>
</layout>
Если у вашей раскладки клавиатуры нет вариантов, <variantList>
часть может быть самозакрывающейся, например: <variantList />
.
Примечание: iso639Id
должно иметь значение, совместимое со стандартом ISO 639-1 или 639-2. 1 Полная таблица также приведена в ссылке 1. И она должна соответствовать вашим региональным настройкам. Я установил English(U.S)
язык своей системы, поэтому заполняю us
здесь.
3. Сохраните его и откройте .../X11/xkb/rules/evdev.lst
.
4. В конце ! layout
добавьте название вашего макета. Например:
symmetri Symmetri layout (CN, EN and ES)
! variant
5. Если в вашей раскладке клавиатуры есть вариант, добавьте его в конце .
non-prog symmetri: non-programmer
Имя варианта должно совпадать с информацией, указанной выше в XML-файле. (По мере тестирования localectl list-x11-keymap-variants
будеттолько(Прочитать этот файл вместо чтения XML-файла, должно быть ошибкой/багом.)
6. То же самое можно сделать с base.xml
и base.lst
, но я сделал это первым, и это не работает.
7. Настройте раскладку клавиатуры с помощью:
setxkbmap symmetri
или, чтобы задать вариант, используйте:
setxkbmap symmetri -variant non-prog
localectl
можно list-x11-keymap-layouts
и list-x11-keymap-variants
, но с ним нельзя задать вариант; setxkbmap
можно только .
С этой настройкой теперьпосле перезагрузки и перед первым входом в систему, у вас новая раскладка клавиатуры(хотя вариант не сохранится!! Сохранится только базовая раскладка!) Но после успешного входа в систему менеджер рабочего стола возьмет на себя управление, и если вы не настроите новую раскладку клавиатуры в файле $HOME/.bashrc
/ $HOME/.profile
(для одного пользователя)/ /etc/profile.d/xxx.sh
/ /etc/profile
(для всех пользователей), вынетполучите новую раскладку клавиатуры после выхода из системы и повторного входа!!!! Так что эти изменения будуттолькосохраняется до первого успешного входа в систему... вам придется использовать .bashrc
скрипты или профилировать, чтобы сообщить X-серверу: «не только до входа в систему, но и после входа я хочу, чтобы это было для всех пользователей!» Осторожно: с этим изменением, даже если вы выйдете из системы и смените пользователя, макет будет измененным, а не qwerty(us)
.
Это действительно расстраивает... должен быть более простой способ, но я не могу его найти.
Ссылки: (обязательно к прочтению)