Заставить беспроводную клавиатуру всегда использовать указанную раскладку

Заставить беспроводную клавиатуру всегда использовать указанную раскладку

Это действительно должен быть комментарий к ответу на вопросКак навсегда назначить другую раскладку клавиатуры для USB-клавиатуры?Поскольку комментирование невозможно, вот новый вопрос, надеюсь, @Sadi его читает:

Моя беспроводная клавиатура и мышь перестали работать после этого. Это может быть связано с тем, что строка "USB Keyboard" отсутствует в названии моего устройства.

lsusb
Bus 003 Device 088: ID 046a:010b Cherry GmbH

xinput -list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ MLK Wireless Desktop                  id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
 ↳ MLK Wireless Desktop                     id=14   [slave  keyboard (3)]

таким образом, моя строка GREP выглядит так:

xinput -list | grep 'Wireless Desktop.*keyboard' "$@"

Чтобы изменить макет, просто запишите идентификатор и введите

setxkbmap -device 14 {language code}

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


Возможные подсказки здесь:

решение1

Насколько мне известно (а известно немного), все решения, включающиеudev.правилаНедавно эта проблема перестала работать, и на данный момент единственным решением, которое, похоже, работает, является простой скрипт запуска, который предполагает, что вторая клавиатура подключена до того, как пользователь войдет в систему, в противном случае пользователь должен вручную запустить этот скрипт позже.

Скрипт протестирован на работоспособность для USB-клавиатур (здесь:https://askubuntu.com/a/337431/47343) конечно же следует модифицировать длябеспроводные клавиатуры, что может быть похоже на то, что показано ниже.

Примечание 1: Помимо ввода нужного кода раскладки клавиатуры, может также потребоваться метод проб и ошибок (например, ввод каждой строки в окне терминала), поскольку автор является «любителем» (и почти начинающим) «писателем сценариев» ;-)

#!/bin/bash
extkbd=`xinput -list | grep -c "Wireless.*keyboard"`
if [[ "$extkbd" -gt 0 ]]
then
    extkbd_id1=`xinput -list | grep "Virtual core keyboard" | awk -F'=' '{print $2}' | cut -c 1-2`
    extkbd_id2=`xinput -list | grep "Wireless.*keyboard" | awk -F'=' '{print $2}' | cut -c 1-2`
    extkbd_layout="<kbdlayoutcode>"
    setxkbmap -device "${extkbd_id1}" -layout "${extkbd_layout}"
    setxkbmap -device "${extkbd_id2}" -layout "${extkbd_layout}"
    notify-send -i input-keyboard "Wireless Keyboard" "is ready and set for use..."
fi
exit 0

Примечание 2: Поскольку система, по-видимому, назначает 2 идентификатора устройств одному оборудованию, я обнаружил, что безопаснее назначать один и тот же код раскладки клавиатуры обоим этим идентификаторам устройств.

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