У меня есть ноутбук в американском стиле, но у меня также есть эргономичная USB-клавиатура в британском стиле.
В связи с этим у меня обычно установлена раскладка клавиш США, но когда я сажусь за свой стол и использую британскую USB-клавиатуру, я обнаруживаю, что делаю глупые ошибки с символами (обычно довольно хорошая печатная машинка на клавиатуре или стандартный кбд).
Кто-нибудь может подумать о чистом способе установки раскладки клавиатуры на основе предполагаемой раскладки / USBID любого подключенного к клавиатуре?
Даже с пользовательской настройкой, такой как добавление определенной USB ID для сценария выполнения, который проверяет, подключен ли он или нет. Можно ли это сделать без выхода пользователя из системы? Я помню, что делал что-то похожее с xorg.conf, но это требовало выхода из системы.
Вы можете попробовать написать правило udev. Подключите клавиатуру и введите lsusb
и запишите свой идентификатор клавиатуры, он должен выглядеть примерно так:
Bus 001 Device 001: ID 13ab:001a name-of-the-keyboard
В этом случае 13ab - это идентификатор поставщика, а 001a - это идентификатор продукта. Теперь вы можете отключить клавиатуру.
Перейдите на /etc/udev/rules.d/
и создайте новый файл, например 80-keyboard.rules
, и напишите (замените idVendor и idProduct в этом примере на идентификатор вашей клавиатуры):
SUBSYSTEM=="input", ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="13ab", ATTRS{idProduct}=="001a", RUN+="/path/to/connect/script"
SUBSYSTEM=="input", ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{idVendor}=="13ab", ATTRS{idProduct}=="001a", RUN+="/path/to/disconnect/script"
Вы можете использовать setxkbmap из udev, потому что в нем не установлены необходимые переменные окружения. Эта часть заимствована из этого aswer .
#!/bin/sh
/path/to/set-keyboard-layout.sh uk
#!/bin/sh
/path/to/set-keyboard-layout.sh us
#!/bin/sh
sleep 1
DISPLAY=":0.0"
HOME=/home/your-username
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME
setxkbmap -layout $1
Не забудьте выполнить chmod + x во всех трех сценариях и измените / home / your-username на путь к домашней папке.
Теперь запустите sudo service udev restart
и подключите клавиатуру и посмотрите, изменится ли раскладка при подключении / отключении.
Я проверил это на своем жестком диске USB, и он работает (за исключением того, что у меня был блок вместо ввода для подсистемы).