Я часто подключаю USB-клавиатуру к своему ноутбуку (в дополнение к внешнему монитору и мыши, которые практически превращают мой ноутбук в настольный компьютер), и тогда я предпочитаю использовать другую раскладку клавиатуры.
Мне приходится вручную менять текущую раскладку клавиатуры каждый раз, когда я подключаю эту USB-клавиатуру.
И я хотел бы использовать автоматизированный способ для этого, если это возможно.
Radu ответ «S на вопрос здесь дают некоторые подсказки, но, кажется , мне нужен сценарий запуска для этой задачи , как идентификатор устройства для моего USB клавиатуры меняется каждый раз , когда компьютер начинает.
Этот сценарий запуска, вероятно, сначала будет включать команду xinput -list | grep "USB Keyboard"
и другую команду, чтобы получить первый отображаемый идентификационный номер USB-клавиатуры, а затем использовать его в последней команде, чтобы установить выбранную раскладку для этой USB-клавиатуры, как показано ниже:
setxkbmap -device <NUMBER> -layout <LAYOUT>
Ответы:
После небольшого исследования я нашел решение, хотя я все еще открыт для других (возможно, лучших) ответов.
Вот скрипт запуска (который можно добавить в автозагрузку приложений ), который установит вручную введенную переменную usbkbd_layout в идентификаторы устройства usbkbd , найденные в xinput -list :
Этот сценарий весьма полезен (и более стабилен) для сценариев, когда пользователь начинает использовать ноутбук на настольном компьютере (с внешней клавиатурой, мышью, монитором и т. Д.), И его также можно запускать вручную, когда подключена внешняя USB-клавиатура ...
================================================== ========================
ЛУЧШИЙ (почти идеальные) РЕШЕНИЕ - найдено благодаря MinimusHeximus и соответствующим участникам к теме он упомянул в своем комментарии ниже:
Теперь я могу просто подключить USB-клавиатуру и автоматически применить ее другую (TR-F) раскладку клавиатуры, сохраняя при этом раскладку клавиатуры по умолчанию (TR-Q) на моем ноутбуке!
Вот файлы и их содержимое, которые делают это возможным:
/etc/udev/rules.d/00-usb-keyboard.rules
/home/sadi/.bin/usb-keyboard-in_udev
/home/sadi/.bin/usb-keyboard-in
/home/sadi/.bin/usb-keyboard-out_udev
/home/sadi/.bin/usb-keyboard-out
Примечания:
chmod - 755 /home/sadi/.bin/usb-keyboard-*
ДЛЯ АДАПТАЦИИ ЭТОЙ УСТАНОВКИ К РАЗЛИЧНЫМ ТРЕБОВАНИЯМ:
lsusb
(например, мойlsusb
выход есть это для моего USB клавиатуры:Bus 001 Device 006: ID 09da:0260 A4 Tech Co., Ltd
)xinput -list | grep "USB Keyboard"
дает мне две строки;↳ USB Keyboard id=14 [slave keyboard (3)]
и↳ USB Keyboard id=16 [slave keyboard (3)]
; затем они фильтруются сawk
использованием "=" в качестве разделителя полей и захвата второй части; затем обрезается только первые две цифры, а затем использовать только значение в первой строке)источник
IF
мне пришлось использоватьFOR
. Это работает для меня сейчас, спасибо! gist.github.com/zvictor/193b567c14b5b6a679feВнутри правила udev можно указать параметры драйвера X11, никаких пользовательских сценариев не требуется. В качестве примера, вот содержимое моего /etc/udev/rules.d/99-usb-kbd.rules
Это правило гарантирует, что определенная клавиатура USB использует американскую раскладку в Xorg (внутренняя клавиатура моего ноутбука - немецкая, и это также моя основная раскладка). Важные моменты:
idVendor
иidProduct
вашего устройства, используяlsusb
илиevtest
/usr/share/X11/xkb/symbols
. Обратите внимание, чтобы указать как верный макет, так и верный вариант./lib/udev/rules.d/64-xorg-xkb.rules
источник
/var/log/Xorg.0.log
возможные проблемы. Вы также можете использовать,udevadm info
чтобы проверить, что настройки применяются правильно.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
. Если вы также добавите такую заметку, я постараюсь отметить вашу в качестве ответа (вместо этой неуклюжей, длинной и извилистой дороги ;-)/usr/share/X11/xkb/rules/evdev.lst
Я только что улучшил это решение для клавиатуры bépo Typematrix (французская версия оптимизированного превосходного дворака) и в широком системном контексте (предполагается, что у вас есть root-доступ к машине). Для работы нужно всего 3 файла. Вы можете обратиться к лог-файлу в случае невозможности выяснить, что не работает.
/etc/udev/96-usb-keyboard.rules
/etc/udev/bepo-typematrix-kbd.sh (абсолютно необходимо использовать промежуточный фоновый скрипт)
/ И т.д. / Udev / Bepo-typematrix-KBD
источник
После того, как я много поигрался, это то, что я бегу сейчас. Может быть, я напишу полную статью своего рода и опубликую код в репозитории, если это будет интересно.
Установите новый набор правил для udev следующим образом:
Правило должно вызывать сценарий оболочки всякий раз, когда какое-либо действие инициируется устройством с заданной комбинацией поставщика и идентификатора продукта.
После добавления нового набора правил перезапустите службу udev:
Примечание. Мне не удалось добиться надежных результатов, предоставив более конкретные правила сопоставления в этом файле. Самое главное, что добавление
ACTION
соответствующего правила не сработало. Насколько я могу судить, сценарий был запущен в любом случае. При добавленииACTION=="add"
скрипт все равно будет вызываться при удалении устройства. Очень странно и запутанно.Однако действие, которое вызвало правило udev, будет доступно вызываемому сценарию, как показано ниже.
Далее сам скрипт. Ну, не совсем. Обратите внимание на
wrapper
суффикс в имени файла. Это указывает на то, что это не настоящий скрипт, а оболочка, которая вызывает скрипт и выполняет его в фоновом режиме, чтобы udev мог завершить свой процесс.~/.bin/switch-kb-layout-wrapper.sh
:Переменная
ACTION
содержит действие udev, которое было запущено устройством. Он выдает такие значения, какadd
(устройство было подключено) иremove
(устройство было удалено). Мы будем использовать их позже.~/.bin/switch-kb-layout.sh
:Замените мое имя пользователя вашим при настройке
HOME
переменной ($(whoami)
здесь не будет работать, так как он будет вызываться не вашим пользователем, а пользователемroot
).В целях тестирования я добавил несколько строк, которые регистрируют определенные события в файле в моем домашнем каталоге, чтобы посмотреть, все ли работает. Вы можете безопасно удалить их.
Наконец, эти сценарии должны иметь разрешения на выполнение. Также может быть важно отметить, что эти сценарии будут вызываться
root
пользователем, поэтому будьте осторожны с тем, что вы там делаете.источник
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
работает не так, как задумано, так как скрипт выполняетсяroot
. В моих тестах линия не влияла на эту настройку.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
от имени пользователя раз и навсегда, а затем использовать этот сценарий безgsettings set
команд ...У меня была проблема с разрешением скрипта, выполняемого udev. Я решил с sudo следующим образом:
Установите карту клавиатуры для каждого устройства
источник
Вы также можете определить его в конфигурационном файле Xorg.
Выложен в этом стеке обмениваться ответом: /superuser//a/946575/437492
источник
/etc/X11/xorg.conf.d/
(это самое подходящее место).