Почему поведение клавиши Compose отличается в чистой консоли и X?

Я обнаружил, что способ добавления строк в разные конфиги x11 в моем случае оказался неэффективным. В качестве альтернативы я создал сценарий bash, который автоматически применяет мои настройки при входе в систему. Проще говоря, я просто взял то, что я изменил из сохраненного файла xconf, что, по сути, приводит нас к желаемому концу. Это не самый элегантный метод, но он работает...

В приведенном ниже файле указаны мои настройки для моих мониторов, вам нужно будет поместить свою информацию поверх моей.

Лично я решил добавить эти строки прямо в.bashrc:

nvidia-settings --load-config-only
nvidia-settings --assign CurrentMetaMode="DVI-I-1: nvidia-auto-select +0+54, HDMI-0: nvidia-auto-select +1600+0 {viewportout=1792x1008+65+30}"

Мой первоначальный и действительный ответ был отредактирован, чтобы предложить поместить его в отдельный файл и вместо вызова файла в .bashrc. Оба действительны. Однако я хотел, чтобы ответ отражал оба метода.

Пример сценария bash:

# Save this to some script.sh
nvidia-settings --load-config-only
nvidia-settings --assign CurrentMetaMode="DVI-I-1: nvidia-auto-select +0+54, HDMI-0: nvidia-auto-select +1600+0 {viewportout=1792x1008+65+30}"

Затем отредактируйте .bashrcили.bash_profile(в зависимости от ваших предпочтений )и добавьте туда свой сценарий, чтобы он запускался автоматически при входе в систему.

Наконец, сделайте ваш скрипт исполняемым с помощьюchmod +x script.sh

3
11.02.2021, 22:44
1 ответ

Поведение консоли отличается, потому что оно обрабатывается совершенно другим кодом. /etc/default/keyboardсодержит настройки для XKB , который является частью X, обрабатывающей ввод с клавиатуры. Пакет установки консоли -переводит эти настройки в то, на что способна консоль, благодаря программам setupcon(, которые считывают и анализируют/etc/default/keyboardckbcomp(, которые переводят настройки XKB в настройки консоли. ). Эти инструменты ограничены возможностями консоли.

Консоль Linux, реализованная внутри ядра, имеет лишь частичную поддержку многобайтовых наборов символов. Что касается ключа компоновки, в частности, в ядре существует жесткое -закодированное ограничение :таблица компоновки (accent_table)имеет жестко -закодированный размер MAX_DIACR, который равен 256, если вы не перекомпилируете свой код. ядро¹. Это может объяснить, почему в установочном пакете консоли -нет таблицы компоновки Unicode :всего с 256 записями, вы не собираетесь охватывать много символов, что бы вы ни делали. Насколько я могу судить, когда вы используете настройку консоли -с набором символов Unicode, вы получаете ядро ​​, встроенное -в таблице компоновки , в которой перечислены только символы latin1 non -ASCII. буквы с акцентом (, а не знаки препинания, такие как ° ).

Вы можете определить свою собственную таблицу составления. Выберите до 256 комбинаций двух символов, чтобы объединить их в третий, и перечислите их в файле карты для создания консоли.

Compose 'o' 'o' to degree
Compose 0x6f 0x006f to 0xb0
Compose U+6F U+006f to U+00B0

Первые строки выше иллюстрируют различные способы сказать, что Composeoo вставляет °. Конечно, вам нужен только один. Способы указания символа²:

  • Число в десятичном, восьмеричном с начальным 0или шестнадцатеричном с начальным 0x.
  • одиночный -байтовый символ внутри '.Перед этим символом может быть обратная косая черта, а обратная косая черта обязательна для обратной косой черты, а одинарная кавычка:'\o'эквивалентна 'o', но обратная косая черта и одинарная кавычка могут быть записаны только '\\'и '\'соответственно (или используя другой синтаксис ).
  • '\ooo'где ооо — ровно 3 восьмеричных цифры, определяющие значение не более 255(\377).
  • U+hhhhгде hhhh — ровно 4 шестнадцатеричных цифры.
  • Только справа -от toсимволическое имя персонажа. Символическое имя является подмножеством имен символов клавиш X11. См. источник (syms.*.h)для списка символических имен.

Чтобы загрузить собственную карту компоновки, запустите

loadkeys /path/to/my/compose.kmap

Заменяет текущую загруженную таблицу компоновки.

Я не могу найти способ заставить консоль -загрузить пользовательскую карту составления. ckbcompзагружает /etc/console-setup/compose.${charmap}.incдля кодировок, отличных от -Unicode, но для Unicode пропускает этот шаг.

¹ Количество элементов массива kbdiacrucвstruct kbdiacrsuc— это максимальное количество элементов, которое может установить пользовательское пространство. Вероятно, необходимо установить одно и то же значение.
² Исходный код :исходный код(kbdпакет, файлы src/libkeymap/analyze.lиsrc/libkeymap/parser.y). Я не смог найти эти детали в документации.

2
18.03.2021, 22:34

Теги

Похожие вопросы