Обнаружить воткнутый девайс и xinput его
Привет.
Может, кто тут разбирается, и даст умный совет?
Есть девайс. Мышка (надевается на палец, но это не суть) с двумя
кнопками. USB, ноутбук, т.е. она в него воткнута существенно не всегда.
Я хочу на ней (и именно на ней, и без залезания в отсутствующий у меня в
системе за ненадобностью xorg.conf) при ее втыкании включать эмуляцию
средней кнопки.
Я умею: сказать
$ xinput --list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]
⎜ ↳ USB OPTICAL MOUSE id=10 [slave pointer (2)]
...
(ну, клавиатура неинтересна)
и на основании этой информации
$ xinput --set-prop 10 'Evdev Middle Button Emulation' 1
и мне не сложно заскриптовать комбинацию. Хотя называется она, конечно,
офигительно информативно, блин. Но хочется это делать при втыкании, а
не непонятно когда. А вот как правильно обнаружить втыкание?
Предупреждаю сразу: исходя из того, что оно мне надо в иксах, вариант
udev-правила получается кривым, поскольку xinput запускается, вообще
говоря, на одном хосте, а мышка втыкается в другой. Впрочем, если в
этой ситуации Xinput extension отваливается сам по себе, то этот вопрос
отпадает. Но чисто по логике-то не с чего, это все же не shared memory.
Раз сам X-сервер втыкание определяет, то где-то оно у него должно бы
появляться-то...
Но на худой конец сойдет и решение, где терминал и сессия на одном
хосте. Нет, я даже могу придумать схему в духе "udev кидает событие в
dbus, скрипт его ждет, и если видит, то дергает xinput", но как-то это
кривовато, очень хочется верить, что существует какой-то более прямой
путь получить нужную информацию, непосредственно из X-сервера. Однако,
сходу не удалось задать гуглу правильный вопрос.
Я даже выяснил методом Мана и Тыка, что можно попросить xinput слушать
Core Pointer, и из его вывода отфильтровать добавление девайса, но более
избирательно в нем не предусмотрено, а вывода там - на каждое движение
мышки. Это, прямо скажем, перебор. И кроме того, xinput для этого окно
создает, хотя, в отличие от xev, реагирует на движения мышки и вне этого
окна.
Нет, опять же, отсюда понятно, что можно взять библиотеку, почитать
хедера, документацию на расширение я как раз сумел нагуглить, и вперед.
Но может, этот велосипед уже изобрели?
Reply to: