Всякий раз, когда я подключаю USB-клавиатуру, раскладка всех клавиатур сбрасывается на какую-то системную раскладку по умолчанию (американская раскладка, в которой нет модификаторов и других клавиш, как мне нужно). Я наблюдал это во многих системах Debian и Ubuntu, включая Ubuntu 16.04 и 18.04. Такое поведениесуществует уже очень давно.
Я использую X11 без среды рабочего стола (хотя некоторые демоны Gnome, как правило, запускаются). Я устанавливаю раскладку клавиатуры с XKB (конкретно … | xkbcomp - "$DISPLAY"
), когда я вхожу в систему.
Когда я вставляю USB-клавиатуру, я хочу, чтобы она имела мою раскладку, а не системную. На самом деле, я бы хотел, чтобы система просто продолжала использовать мою текущую раскладку как для уже имеющейся клавиатуры (клавиатур), если таковая имеется, так и для новой вставленной клавиатуры. Если это невозможно, я бы согласился на повторное применение раскладки, котораяявыбрал.
Аналогично частота повторения на обеих клавиатурах установлена на уровне по умолчанию при входе в систему, а не на уровне, который я установил с помощью xset r
.
Как предотвратить сброс раскладки клавиатуры и частоты повторения при горячем подключении клавиатуры?Или, если это невозможно, как мне хотя бы сбросить настройки до выбранной мной раскладки?
Есть довольно неуклюжий способ, который заключается в следующем:с правилом udev. Это неуклюже, поскольку предполагает, что есть один X-сервер, и, что самое проблематичное, предполагает, что у пользователя есть права root.У меня нет прав root, поэтому любой метод, включающий настройку правил udev или редактирование, Xorg.conf
здесь неприменим.
решение1
xkbcomp - "$DISPLAY"
При входе в систему я устанавливаю раскладку клавиатуры на XKB (а именно … | ).Как предотвратить сброс раскладки клавиатуры и частоты повторения при горячем подключении клавиатуры?
Это не то, что он сбрасывает его. Если у вас уже подключена клавиатура и вы добавляете вторую, старая клавиатура продолжит использовать те же настройки.
Проблема в том, что способ загрузки конфигурации xkb на стороне клиента (с помощью xkbcomp
) или на стороне сервера (с помощью setxkbmap
) применит макет только к существующим, реальным устройствам, а не к абстракции "Core Keyboard". Когда устройство отключается, его настройки теряются.
Решение состоит в том, чтобы самостоятельно отслеживать добавление клавиатуры и вызывать xkbcomp
/ setxkbmap
и xset r rate
с вашими предпочтительными настройками.
Для этого вы делаетенетнужны какие-либо правила udev или какие-либо привилегии root;любойКлиентская программа X11 может отслеживать изменения на устройствах ввода через расширение X11 Input и реагировать на них.
Для этого из оболочки можно использовать программу, которая легко устанавливается в apt-get
Debian и подобных дистрибутивах inputplug
.
Пример:
$ cat ./on-new-kbd
#! /bin/sh
keymap=/path/to/your/keymap
echo >&2 "$@"
event=$1 id=$2 type=$3
case "$event $type" in
'XIDeviceEnabled XISlaveKeyboard')
xset r rate 200 50
xkbcomp -i "$id" "$keymap" "$DISPLAY"
esac
$ chmod 755 ./on-new-kbd
$ inputplug -d -c ./on-new-kbd
<plug keyboard>
XIDeviceEnabled 13 XISlavePointer GASIA USB KB V11
XISlaveAdded 13 XIFloatingSlave GASIA USB KB V11
XISlaveAdded 14 XIFloatingSlave GASIA USB KB V11
XIDeviceEnabled 14 XISlaveKeyboard GASIA USB KB V11
Обратите внимание -i
на опцию xkbcomp
-- вы можете использовать разные настройки для каждой клавиатуры. Протокол также позволяет устанавливать частоту повторения на основе устройства, но я не знаю, как это сделать с xset
.
Конечно, ваш оконный менеджер/среда рабочего стола могут сами отслеживать эти события и переопределять ваши настройки.
решение2
Я только что столкнулся с той же проблемой, используя usb-переключатель для совместного использования клавиатуры между двумя системами. Когда я переключаюсь обратно в свою систему Pop!_OS 20.04 LTS, производную от Debian/Ubuntu, у меня пропадают настройки. Я использовал gnome-tweak
для настройки Caps Lock, чтобы действовать как Ctrl.
Это настройка, которая у меня постоянно глючила. Я нашел этот способ командной строки, чтобы настроить ее так, как мне нужно, так что мне не нужно продолжать бегать, gnome-tweak
чтобы исправить проблему.
dconf write /org/gnome/desktop/input-sources/xkb-options "['caps:ctrl_modifier']"
Страница руководства дляxkeyboard-config
содержит список допустимых значений xkb-options
вместе с краткими описаниями.
Я не знаю, как предотвратить возникновение этой проблемы, но теперь она не так раздражает, поскольку я могу исправить ее из командной строки.