Udev
Thanks to HotPlug and /proc it has never been easier for software to determine the state of devices plugged into the system.
Contents
USB
USB devices live at /proc/bus/usb. When a device is plugged this file is updated. Here is an example of the file:
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 2.06 S: Manufacturer=Linux 2.6.8-2-386 uhci_hcd S: Product=Intel Corp. 82801AA USB S: SerialNumber=0000:00:1f.2 C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 6 Spd=12 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=0d7d ProdID=1300 Rev= 0.50 S: Product=USB2.0 FlashDisk S: SerialNumber=1D4402000054 C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=200mA I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
So pretty much everything you would ever want to know about your hotplugged device is here.
Firewire and others
These all work in a similar way. It is a simple matter to parse the /proc files to extract whatever relevant data is needed to feed into the UI.
Events
Hotpug also includes a very useful feature that allows you to bind a program to a specific hotplug event. This means the OS can be notified when something happens (eg you plug in your USB memory stick).
In the directory /etc/hotplug.d is a buch of directories that represent all the kinds of devices that may be hotplugged.
drwxr-xr-x 2 root root 4096 2004-09-04 06:15 chandev drwxr-xr-x 2 root root 4096 2005-05-11 04:39 default drwxr-xr-x 2 root root 4096 2004-09-04 06:15 dock drwxr-xr-x 2 root root 4096 2004-09-04 06:15 ieee1394 drwxr-xr-x 2 root root 4096 2004-09-04 06:15 input drwxr-xr-x 2 root root 4096 2004-09-04 06:15 net drwxr-xr-x 2 root root 4096 2004-09-04 06:15 pci drwxr-xr-x 2 root root 4096 2004-09-04 06:15 scsi drwxr-xr-x 2 root root 4096 2005-05-27 05:59 usb
Example: I want to run a script when the USB device is plugged in. So I put some kind of executable in the usb directory and suffix it with .hotplug.