Si quieres todo en tu proceso individual, tendrás que usar libudev para obtener eventos del udevd
o directamente del kernel.
Viendo que podría ser un problema para usar libudev en su aplicación (? Falta de documentación), una alternativa es utilizar el programa udevadm, lo que puede:
- eventos del dispositivo informe después de haber sido procesado por
udevd
(udevadm monitor --udev --property
),
- informe de eventos devive directamente desde el núcleo (
udevadm monitor --kernel --property
), y la base de datos
- volcado de udevd de los dispositivos actuales (pero no los del núcleo!) (
udevadm info --query all --export-db
)
udevadm
es parte del paquete udev, pero no debería necesitar udevd
si solo lo usa para informar eventos del kernel. Puede usarlo haciendo que su proceso lo genere y analice su salida estándar (pero deberá iniciarlo a través del stdbuf-o L
).
De cualquier manera, probablemente será mucho trabajo. Ya he implementado mucho de esto en mi NCD programming language, incluida la supervisión de dispositivos USB. Es posible que desee echar un vistazo a NCD; es útil para muchas tareas de configuración y maneja bien la conexión en caliente. Por ejemplo, este programa NCD imprimirá los eventos del dispositivo USB a la salida estándar:
process main {
sys.watch_usb() watcher;
println(watcher.event_type, " ", watcher.devname, " ", watcher.vendor_id, ":", watcher.model_id);
watcher->nextevent();
}
Esto hará que algo de impresión NCD así (con un added
evento inicial para cualquier dispositivo USB que ya estaba enchufado):
added /dev/bus/usb/002/045 0409:0059
added /dev/bus/usb/002/046 046d:c313
added /dev/bus/usb/002/047 046d:c03e
added /dev/bus/usb/002/048 0557:2008
removed /dev/bus/usb/002/048 0557:2008
También puede usar NCD solo para esto, y analizar esta salida estándar, que es mucho más fácil de trabajar que jugar directamente con udevadm.
Tenga en cuenta que el propio NCD usa udevadm
, y hace requiere udevd para ejecutarse; pero ¿por qué es eso un problema? (con algún trabajo, esta dependencia podría eliminarse)
¿Se tienen al menos udev? – Keith
Desafortunadamente no lo hago. ¿Es imposible escuchar este tipo de evento en modo de usuario sin udev? –
Creo que esa es la mejor manera de obtener eventos kernel. Una alternativa es el usbd anterior en [linux-hotplug] (http://linux-hotplug.sourceforge.net/). – Keith