Risposte:
Questo è gestito da udev
moderni sistemi Linux. Il udev
demone di iniziare con il sistema cercherà in /etc/udev/rules.d
e /lib/udev/rules.d
, e si svolgerà regole di corrispondenza per gli eventi del kernel. L'inserimento di un'unità USB attiverà un evento, udev
cercherà una regola corrispondente e la eseguirà.
Le regole stesse determineranno ciò che fa il tuo sistema. Negli ultimi anni, udev
ha comunicato ad HAL, che avvisa applicazioni tramite DBUS. Questo approccio è ormai obsoleto a favore di una udev
soluzione unificata , che presumo implicherà la udevd
comunicazione dbus
diretta o tramite dbus-send .
È possibile monitorare le attività di udev
via udevadm monitor
.
Non sono ancora completamente sicuro di questo, quindi prendilo con un granello di sale e più ricerca.
Inizia con il sottosistema hotplug del kernel. Dopo aver configurato un dispositivo, chiama qualsiasi programma di userspace sia configurato per gestire gli eventi hotplug (se ne è stato impostato uno echo hotplug_handler > /proc/sys/kernel/hotplug
) o invia un pacchetto di dati sul socket netlink kobject_uevent. Quando il kernel avvia il gestore hotplug, imposta alcune variabili di ambiente. Quando il kernel invia un datapacket, include coppie chiave = valore. Se lo desideri, puoi impostare uno script che registra semplicemente l'ambiente e configurarlo come gestore (non sul tuo sistema di produzione, ovviamente - un'installazione di prova).
Di solito, udev è impostato come gestore e disporrà di diverse regole su come gestire gli eventi. Da lì, può avviare altri programmi che fanno altre cose (come emettere messaggi dbus). Queste regole udev dipendono fortemente dalla particolare distribuzione degli interessi.
Ci sono molte informazioni in questo thread in cui qualcuno sta cercando di scrivere della documentazione - nota che il primo messaggio non è accurato; continua a leggere.
udev
ascolta gli eventi su un socket netlink. (Il vecchio modo aveva problemi di serializzazione / concorrenza.)