linux: определить, подключена ли внешняя клавиатура к ноутбуку

try readelf -l uclsyn_linux Запрос интерпретатора программы скажет вам, чего вам не хватает.

1
07.03.2016, 15:36
1 ответ

Для этого можно использовать правило udev . В моем примере я использую USB-ключ для беспроводной мыши, вам нужно будет соответствующим образом настроить:

1.Получение идентификаторов

Чтобы создать уникальное правило для устройства, нам необходимо правильно его идентифицировать. Используйте для этого вывод udevadm (ваша USB-клавиатура должна отображаться в / dev / usb / . Подключите и отключите, чтобы увидеть, появляется ли это устройство (устройство)) . Идентификаторы поставщика и устройства должны быть достаточно уникальными, но чем больше совпадений, тем лучше.

udeadm info -a -n /dev/usb/hiddev0 | grep 'idVendor\|idProduct'
ATTRS{idVendor}=="0e8f"
ATTRS{idProduct}=="00a4"
ATTRS{idVendor}=="1d6b"
ATTRS{idProduct}=="0001"

Обратите внимание на два значения, которые соответствуют выходным данным lsusb с идентификатором (чтобы узнать, какое это устройство, либо проверьте разницу lsubs с клавиатурой и без нее, либо посмотрите, не вы можете сопоставить имена в выходных данных)

lsusb
Bus 005 Device 004: ID 0e8f:00a4 GreenAsia Inc.

Поэтому мы будем использовать 0e8f и 00a4 для идентификатора поставщика и продукта соответственно.

2. Создание правила

Само правило - это просто список того, что нужно делать. Сохраните его в /etc/udev/rules.d/ , например, keyboard.rules (обратите внимание, что суффикс .rules является обязательным). Файл сопоставит ( == ) несколько атрибутов, действие и запустит наш скрипт:

ACTION=="add", ATTRS{idVendor}=="0e8f", ATTRS{idProduct}=="00a4", RUN+="/full/path/to/script.sh"

У вас могут возникнуть проблемы с частью ACTION == "remove" , прочтите это . Проблема в том, что некоторые атрибуты удаляются при удалении, и поэтому udev больше не может сопоставить их для вашего правила удаления.

В моем случае я использовал udeadm monitor --environemnt и отключил devive.Я выбрал

ID_MODEL_ID=00a4

и использовал это как единственное требование (вам может потребоваться немного проб и ошибок для хороших совпадений здесь, однако одиночное совпадение скорее спасет вас только для вашего случая изменения раскладки клавиатуры). Обратите внимание, что для правила удаления требуется ENV вместо ATTRS (AFAIK ENV также работает для правила плагина, но ATTRS не удаляется )

ACTION=="remove", ENV{ID_MODEL_ID}=="00a4", RUN+="/path/to/removal_script.sh"

Правила добавления и удаления могут быть одним файлом с одной строкой для каждого действия.

3. Сценарий

Сценарий ВСЕГДА запускается пользователем root , поэтому убедитесь, что а) он доступен для записи только пользователю root (из соображений безопасности) б) если ваша команда должна выполняется пользователем, используйте в сценарии sudo -u user1 команду . Конечно, он должен быть исполняемым. Если вы пытаетесь выполнить команду напрямую (т. Е. Без использования сценария), используйте абсолютный путь к указанной команде.

Удачи.

2
27.01.2020, 23:48

Теги

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