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

4

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

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

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

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

    
задан Andrew Bolster 09.11.2011 в 16:59
источник

1 ответ

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 

Не забудьте сделать chmod + x во всех трех сценариях и изменить / home / your-username на ваш путь к домашней папке.

Теперь запустите sudo service udev restart и подключите свою клавиатуру и посмотрите, меняется ли макет при подключении / отключении.

Я тестировал это с помощью моего usb hdd, и он работает (за исключением того, что у меня был блок вместо ввода для подсистемы).

    
ответ дан jeremija 21.08.2012 в 08:38