Предотвращение сброса раскладки клавиатуры при подключении USB-клавиатуры

Предотвращение сброса раскладки клавиатуры при подключении USB-клавиатуры

Всякий раз, когда я подключаю 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-getDebian и подобных дистрибутивах 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вместе с краткими описаниями.

Я не знаю, как предотвратить возникновение этой проблемы, но теперь она не так раздражает, поскольку я могу исправить ее из командной строки.

Связанный контент