Правило для udev. Как идентифицировать клавиатуру?

Автор lisss, 01 января 2013, 19:57:57

« назад - далее »

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

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

Цитата: lisss от 01 января 2013, 19:57:57
Как видите, модель отсутствует. Что из этого можно использовать для точной идентификации?
1. Ловите все события sysfs посылаемые udev (асинхронные уведомления и udev)

$ udevadm monitor --env
...

2. Потом по параметрам нужного вам события составляете правило.

lisss

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

corner

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

lisss

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

corner

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

Olej

#7
Цитата: lisss от 02 января 2013, 16:54:20
НО КАК ЖЕ ЗАДОЛБАЛИ УМНИКИ, КОТОРЫЕ ЗНАЮТ ВСЕ ЛУЧШЕ ДРУГИХ!
Пожалуйста, потрудитесь прочитать то, что я написал выше. Особенно уделите внимание на то, что клавиатура уже настроена и работает. И перечитайте первый вопрос.
... и тем паче, что написанное "в первом вопросе" - это написана Мат запрещен ;D


lisss

#8
Цитата: Olej от 02 января 2013, 19:21:10... и тем паче, что написанное "в первом вопросе" - это написана Мат запрещен
загляни в папочку /lib/udev/rules.d Там этой Мат запрещен понаписано...

Цитата: corner от 02 января 2013, 17:59:08Все указано в документации udev и kernel
О, великий Гуру, ткни же носом ничтожного в документацию, где я могу увидеть ответ на свой вопрос. Я, глупый, лишь эту статью нашел, да оригинал на английском. Но там нет ответа на вопрос из сабжа.

Olej

#9
Цитата: lisss от 02 января 2013, 21:49:14загляни в папочку /lib/udev/rules.d Там этой херни понаписано...
1. в /lib/udev/rules.d - грамотно сформированные правила
2. эти грамотные правила формируются из переменных, содержащихся в сообщениях, пересылаемых ядром по сокету netlink при изменениях в состояниях sysfs
3. сообщений netlink при подключении, как правило, >1 - их нужно смотреть, и по ним нужно выбирать специфические переменные
4. как смотреть сообщения я вам писал...
5 а у вас в хвалёном "1-м сообщении" написана: "Мат запрещен с апломбом"  :P

lisss

#10
Цитата: Olej от 02 января 2013, 23:34:29сообщений netlink при подключении, как правило, >1 - их нужно смотреть, и по ним нужно выбирать специфические переменные
ну в принципе все ясно с вами. действительно, зачем использовать стандартные средства udevadm, которые показывают сразу все, когда есть логи при подключении? грызите дальше свой кактус и перестаньте оффтопить.

Сообщение объединено: 03 января 2013, 00:33:13

Цитата: Olej от 02 января 2013, 23:34:29как смотреть сообщения я вам писал...

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

ЦитироватьСлужба udevd слушает netlink-сокет в ожидании событий, генерируемых ядром при подключении или отключении устройства. Вы можете наблюдать за этими событиями при помощи команды udevmonitor - запустите ее, подключите USB-устройство, например, flash-накопитель, и отключите его (в новейших дистрибутивах может не быть программы udevmonitor - в этом случае используйте udevadm.)

Malaheenee

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

Сообщение объединено: 03 января 2013, 08:10:59

lisss, если честно, то в примере с HP-клавиатурой тоже вроде модели клавиатуры нет, а есть модель ноутбука. А что получается в выводе, если подрубить внешнюю клаву?
Все мы где-то, когда-то и в чем-то были новичками.

lisss

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

Для примера, вот вывод для внешней USB-клавы:
Открыть содержимое (спойлер)
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. А вот самсунги что-то намудрили.

Malaheenee

Все мы где-то, когда-то и в чем-то были новичками.

lisss

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

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