Как автоматически изменить раскладку системной клавиатуры при подключении внешней клавиатуры?

У меня есть ноутбук в американском стиле, но у меня также есть эргономичная USB-клавиатура в британском стиле.

В связи с этим у меня обычно установлена ​​раскладка клавиш США, но когда я сажусь за свой стол и использую британскую USB-клавиатуру, я обнаруживаю, что делаю глупые ошибки с символами (обычно довольно хорошая печатная машинка на клавиатуре или стандартный кбд).

Кто-нибудь может подумать о чистом способе установки раскладки клавиатуры на основе предполагаемой раскладки / USBID любого подключенного к клавиатуре?

Даже с пользовательской настройкой, такой как добавление определенной USB ID для сценария выполнения, который проверяет, подключен ли он или нет. Можно ли это сделать без выхода пользователя из системы? Я помню, что делал что-то похожее с xorg.conf, но это требовало выхода из системы.

4
задан 13 April 2012 в 15:29

1 ответ

Вы можете попробовать написать правило 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

set-keyboard-layout.sh

#!/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, и он работает (за исключением того, что у меня был блок вместо ввода для подсистемы).

0
ответ дан 13 April 2012 в 15:29

Другие вопросы по тегам:

Похожие вопросы: