Автор Тема: Правило для udev. Как идентифицировать клавиатуру?  (Прочитано 3666 раз)

0 Пользователей и 1 Гость просматривают эту тему.

lisss

  • Гость
Хочу написать правило для клавиатуры на своем ноуте. Для идентификации обычно используют производителя и модель. Например:
Цитировать
ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP ProBook*", RUN+="keymap $name 0xF8 rfkill"

Вот что выдает для моей клавиатуры:
Цитировать
lisss@notebook:/lib/udev/rules.d> udevadm info -q all -n /dev/input/by-path/platform-i8042-serio-0-event-kbd
P: /devices/platform/i8042/serio0/input/input0/event0
N: input/event0
S: input/by-path/platform-i8042-serio-0-event-kbd
E: DEVLINKS=/dev/input/by-path/platform-i8042-serio-0-event-kbd
E: DEVNAME=/dev/input/event0
E: DEVPATH=/devices/platform/i8042/serio0/input/input0/event0
E: DMI_VENDOR=SAMSUNG ELECTRONICS CO., LTD.
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_KEYBOARD=1
E: ID_PATH=platform-i8042-serio-0
E: ID_PATH_TAG=platform-i8042-serio-0
E: ID_SERIAL=noserial
E: MAJOR=13
E: MINOR=64
E: SUBSYSTEM=input
E: USEC_INITIALIZED=1430545
Как видите, модель отсутствует. Что из этого можно использовать для точной идентификации?
 

Оффлайн corner

А что, клавиатура не работает? Из лога видно, что распознается.
 

Оффлайн Olej

Как видите, модель отсутствует. Что из этого можно использовать для точной идентификации?
1. Ловите все события sysfs посылаемые udev (асинхронные уведомления и udev)
$ udevadm monitor --env
...
2. Потом по параметрам нужного вам события составляете правило.
 

lisss

  • Гость
ммм... клавиатура работает. но мне нужно назначить некоторые действия на клавиши Fn+... Для этого мне нужно написать правило для клавиатуры. На данный момент я это сделал, переписав правила для всех клавиатур Samsung, отфильтровав их по VENDOR. Но мне нужно правило для конкретной клавиатуры. Все значения, которые видит udev, я привел выше. Вопрос: что из этого можно использовать для идентификации конкретной модели клавиатуры?
 

Оффлайн corner

клавиатура работает. но мне нужно назначить некоторые действия на клавиши Fn+.
Вам нужен не udev, но acpi events. Погуглите на тему "настройка функциональных клавиш linux". Еще на wiki есть статьи по установке системы на Samsung.
 

lisss

  • Гость
Простите, пожалуйста, может быть я глубоко заблуждаюсь... НО КАК ЖЕ ЗАДОЛБАЛИ УМНИКИ, КОТОРЫЕ ЗНАЮТ ВСЕ ЛУЧШЕ ДРУГИХ!
Пожалуйста, потрудитесь прочитать то, что я написал выше. Особенно уделите внимание на то, что клавиатура уже настроена и работает. И перечитайте первый вопрос. А он к работе не относится совсем. Он о том, по каким параметрам из тех, что видит udevadm, идентифицировать конкретную модель клавиатуры для udev.
 

Оффлайн corner

Извините, что потревожил ваш светлый образ.
Переосмыслил ваш вопрос, и вдруг осознал, что все по интересующему ТС вопросу решение находится быстрее, чем пишется данное сообщение. Все просто, как 2 пальца об асфальт... Все указано в документации udev и kernel.
Какие могут вопросы у гуру?
 

Оффлайн Olej

НО КАК ЖЕ ЗАДОЛБАЛИ УМНИКИ, КОТОРЫЕ ЗНАЮТ ВСЕ ЛУЧШЕ ДРУГИХ!
Пожалуйста, потрудитесь прочитать то, что я написал выше. Особенно уделите внимание на то, что клавиатура уже настроена и работает. И перечитайте первый вопрос.
... и тем паче, что написанное "в первом вопросе" - это написана Мат запрещен ;D
 
« Последнее редактирование: 03 Января 2013, 08:03:37 от Malaheenee »
 

lisss

  • Гость
... и тем паче, что написанное "в первом вопросе" - это написана Мат запрещен
загляни в папочку /lib/udev/rules.d Там этой Мат запрещен понаписано...

Все указано в документации udev и kernel
О, великий Гуру, ткни же носом ничтожного в документацию, где я могу увидеть ответ на свой вопрос. Я, глупый, лишь эту статью нашел, да оригинал на английском. Но там нет ответа на вопрос из сабжа.
« Последнее редактирование: 03 Января 2013, 08:05:01 от Malaheenee »
 

Оффлайн Olej

загляни в папочку /lib/udev/rules.d Там этой херни понаписано...
1. в /lib/udev/rules.d - грамотно сформированные правила
2. эти грамотные правила формируются из переменных, содержащихся в сообщениях, пересылаемых ядром по сокету netlink при изменениях в состояниях sysfs
3. сообщений netlink при подключении, как правило, >1 - их нужно смотреть, и по ним нужно выбирать специфические переменные
4. как смотреть сообщения я вам писал...
5 а у вас в хвалёном "1-м сообщении" написана: "Мат запрещен с апломбом"  :P
 
« Последнее редактирование: 03 Января 2013, 08:05:19 от Malaheenee »
 

lisss

  • Гость
сообщений netlink при подключении, как правило, >1 - их нужно смотреть, и по ним нужно выбирать специфические переменные
ну в принципе все ясно с вами. действительно, зачем использовать стандартные средства udevadm, которые показывают сразу все, когда есть логи при подключении? грызите дальше свой кактус и перестаньте оффтопить.

Сообщение объединено: 03 Января 2013, 00:33:13
как смотреть сообщения я вам писал...

а я читал, в отличии от вас. и вас прошу перечитать. особенно, последнее предложение.

Цитировать
Служба udevd слушает netlink-сокет в ожидании событий, генерируемых ядром при подключении или отключении устройства. Вы можете наблюдать за этими событиями при помощи команды udevmonitor - запустите ее, подключите USB-устройство, например, flash-накопитель, и отключите его (в новейших дистрибутивах может не быть программы udevmonitor - в этом случае используйте udevadm.)
« Последнее редактирование: 03 Января 2013, 00:33:13 от lisss »
 

Оффлайн Malaheenee

lisss и Olej, давайте без взаимных оскорблений.

Сообщение объединено: 03 Января 2013, 08:10:59
lisss, если честно, то в примере с HP-клавиатурой тоже вроде модели клавиатуры нет, а есть модель ноутбука. А что получается в выводе, если подрубить внешнюю клаву?
« Последнее редактирование: 03 Января 2013, 08:10:59 от Malaheenee »
Все мы где-то, когда-то и в чем-то были новичками.
 

lisss

  • Гость
lisss, если честно, то в примере с HP-клавиатурой тоже вроде модели клавиатуры нет, а есть модель ноутбука. А что получается в выводе, если подрубить внешнюю клаву?
ну так правильно, на ноутах обычно модель самого ноута и подставляется к специфичному оборудованию. Это Product_name. Серийный номер обычно пишется в serial. В моем случае там стоит noserial и product_name отсутствует :( Вот и был вопрос, что из остального можно для идентификации использовать.
На данный момент я переписал дефолтное правило для всех самсунговских клав (и оно работает), соответственно, оно тупо затрется при обновлении пакетов.

Для примера, вот вывод для внешней USB-клавы:
Spoiler: ShowHide
lisss@notebook:~> udevadm info -q all -n /dev/input/by-path/pci-0000\:00\:14.0-usb-0\:1\:1.1-event-kbd
P: /devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.1/input/input6/event6
N: input/event6
S: input/by-id/usb-A4TECH_USB_Device-event-kbd
S: input/by-id/usb-A4TECH_USB_Device-if01-event-kbd
S: input/by-path/pci-0000:00:14.0-usb-0:1:1.1-event-kbd
E: DEVLINKS=/dev/input/by-id/usb-A4TECH_USB_Device-event-kbd /dev/input/by-id/usb-A4TECH_USB_Device-if01-event-kbd /dev/input/by-path/pci-0000:00:14.0-usb-0:1:1.1-event-kbd
E: DEVNAME=/dev/input/event6
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.1/input/input6/event6
E: ID_BUS=usb
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_KEYBOARD=1
E: ID_MODEL=USB_Device
E: ID_MODEL_ENC=USB\x20Device
E: ID_MODEL_ID=90a0
E: ID_PATH=pci-0000:00:14.0-usb-0:1:1.1
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_1_1_1
E: ID_REVISION=0001
E: ID_SERIAL=A4TECH_USB_Device
E: ID_TYPE=hid
E: ID_USB_DRIVER=usbhid
E: ID_USB_INTERFACES=:030102:030101:
E: ID_USB_INTERFACE_NUM=01
E: ID_VENDOR=A4TECH
E: ID_VENDOR_ENC=A4TECH
E: ID_VENDOR_ID=09da
E: MAJOR=13
E: MINOR=70
E: SUBSYSTEM=input
E: USEC_INITIALIZED=1993916


Как видите, тут все просто: мы можем точно идентифицировать клавиатуру по VENDOR и MODEL. А вот самсунги что-то намудрили.
« Последнее редактирование: 03 Января 2013, 11:16:20 от lisss »
 

Оффлайн Malaheenee

??? Разве что Major/Minor...
Все мы где-то, когда-то и в чем-то были новичками.
 

lisss

  • Гость
Вот я и хотел точно узнать. Никак не могу нарыть, что это такое и может ли повторяться для разных устройств...

UPD: нашел про это http://lvee.org/en/reports/LVEE_2008_01

Сообщение объединено: 03 Января 2013, 20:04:38
Так, разобрался. Модель ноутбука для правила берется не из параметров клавиатуры, а из значений DMI.
Посмотреть все параметры можно в папке /sys/devices. Например, нужный нам ATTR{[dmi/id]product_name} смотреть нужно в /sys/devices/dmi/id/product_name


« Последнее редактирование: 03 Января 2013, 20:04:38 от lisss »
 

Теги: