.SH NAME
udev \- Linux configurable dynamic device naming support
.SH SYNOPSIS
-.BI udev " hotplug-subsystem"
+.BI udev
.SH "DESCRIPTION"
.B udev
provides a dynamic device directory containing only the files for actually
.IR /etc/udev/rules.d/ .
.TP
.B udev_log
-The switch to enable/disable logging of udev information
+The logging priority which can be set to
+.IR "err " , "info "
+or the corresponding numerical
+.BR syslog (3)
+value.
The default value is
-.IR yes .
+.IR err .
.P
.RI "A sample " udev.conf " file might look like this:
.sp
.nf
-# udev_root - where to place the device nodes in the filesystem
-udev_root="/udev"
+# Where in the filesystem to place the device nodes
+udev_root="@udevdir@"
-# udev_db - The name and location of the udev database
-udev_db="/udev/.udevdb"
+# The name and location of the udev database.
+udev_db="@udevdir@/.udevdb"
-# udev_rules - The name of the udev rules file or directory to look
- for files with the suffix .rules
-udev_rules="/etc/udev/rules.d/"
+# The name and location of the udev rules file(s).
+udev_rules="@configdir@/rules.d"
-# udev_log - set to "yes" if you want logging, else "no"
-udev_log="yes"
+# The syslog(3) priority: "err", "info", or the numerical value.
+udev_log="err"
.fi
.P
The rules for device naming are read from the files located in the
.br
If no matching rule is found, the default kernel device name is used.
.P
-Every rule consists of a list of comma separated fields:
+Every rule consists of a list of comma separated key value fields:
.sp
-.IR "key " ,[ "key " ,...] " name " [, " symlink" ]
-.sp
-where fields are:
+.IR "key " ,[ "key " ,...]
+.P
+The following key names can be used to match against device properties:
.TP
.B BUS
Match the bus type of the device.
.B ID
Match the device number on the bus, like PCI bus id.
.TP
-.B PLACE
-Match the topological position on bus, like physical port of USB device
-.TP
.BI SYSFS{ filename }
-Match sysfs device attribute like label, vendor, USB serial number, SCSI UUID
-or file system label. Up to 5 different sysfs files can be checked, with
-all of the values being required to match the rule.
+Match sysfs device attribute like vendor and product id's, USB serial number
+or the SCSI disk model number. Up to 5 different sysfs files can be checked,
+with all of the values being required to match the rule.
.br
Trailing whitespace characters in the sysfs attribute value are ignored, if
the key doesn't have any trailing whitespace characters by itself.
.TP
+.BI ENV{ variable }
+Match an environment variable. Up to 5 different environment variables can be
+checked, with all of the values being required to match the rule.
+.TP
.B PROGRAM
Call external program. This key is valid if the program returns successful.
The environment variables of
.B udev
-are also available for the program.
+are also available to the program.
.br
The string returned by the program may be additionally matched with the
.B RESULT
-key.
+key in the same or any later rule.
.TP
.B RESULT
Match the returned string of the last
.B PROGRAM
-call. This key may be used in any following rule after a
+call. This key can be used in the same or in any later rule after a
.B PROGRAM
call.
+.P
+The following keys can get values assigned:
.TP
.B NAME
The name of the node to be created, or the name, the network interface
should be renamed to.
-.br
-If given with the attribute
-.BR NAME{ all_partitions }
-.B udev
-will create device nodes for all 15 partitions of a blockdevice.
-This may be useful for removable media devices.
-.br
-If given with the attribute
-.BR NAME{ ignore_remove }
-.B udev
-will ignore any later remove event for this device.
-This may be useful as a workaround for broken device drivers.
-.sp
-Multiple attributes may be separated by comma.
.TP
.B SYMLINK
The name of a symlink targeting the node. Multiple symlinks may be
.B OWNER, GROUP, MODE
The permissions for the device node. Every specified value overwrites the
compiled-in default value.
+.TP
+.B OPTIONS
+.B last_rule
+will be the last rule applied. No later rules will have any effect.
+.sp
+.B ignore_device
+will ignore this device. No node will be created.
+.sp
+.B ignore_remove
+will ignore any later remove event for this device.
+This may be useful as a workaround for broken device drivers.
+.sp
+.B all_partitions
+will create device nodes for all available partitions of a blockdevice.
+This may be useful for removable media devices which do not detect a media
+change.
+.sp
+Multiple attributes may be separated by comma.
.P
.RB "The " NAME ", " SYMLINK ", " PROGRAM ", " OWNER " and " GROUP
fields support simple printf-like string substitutions:
match an existing device node. Otherwise nothing is substituted. This
can be used to create compatibility symlinks and enumerate devices of
the same type originating from different kernel subsystems.
+.sp
+Note: The use of the enumeration facility is unreliable outside of
+udevstart where the node creation is serialized and predictable.
+The returned numbers rely on the order devices are probed on the
+system. If more than one device requests an enumeration for the same
+name at the same time, it may be possible that both requests receive the
+same name back from the database. The use of enumerations in todays setups
+where device can come and go at any time is not recomended.
.TP
.B %%
The '%' character itself.
.sp
.nf
# if /sbin/scsi_id returns "OEM 0815", the device will be called disk1
-BUS="scsi", PROGRAM="/sbin/scsi_id", RESULT="OEM 0815", NAME="disk1"
+BUS=="scsi", PROGRAM=="/sbin/scsi_id", RESULT=="OEM 0815", NAME="disk1"
# USB printer to be called lp_color
-BUS="usb", SYSFS{serial}="W09090207101241330", NAME="lp_color"
+BUS=="usb", SYSFS{serial}=="W09090207101241330", NAME="lp_color"
# SCSI disk with a specific vendor and model number will be called boot
-BUS="scsi", SYSFS{vendor}="IBM", SYSFS{model}="ST336", NAME="boot%n"
+BUS=="scsi", SYSFS{vendor}=="IBM", SYSFS{model}=="ST336", NAME="boot%n"
# sound card with PCI bus id 00:0b.0 to be called dsp
-BUS="pci", ID="00:0b.0", NAME="dsp"
+BUS=="pci", ID=="00:0b.0", NAME="dsp"
# USB mouse at third port of the second hub to be called mouse1
-BUS="usb", PLACE="2.3", NAME="mouse1"
+BUS=="usb", ID=="2.3", NAME="mouse1"
# ttyUSB1 should always be called pda with two additional symlinks
-KERNEL="ttyUSB1", NAME="pda", SYMLINK="palmtop handheld"
+KERNEL=="ttyUSB1", NAME="pda", SYMLINK="palmtop handheld"
# multiple USB webcams with symlinks to be called webcam0, webcam1, ...
-BUS="usb", SYSFS{model}="XV3", NAME="video%n", SYMLINK="webcam%n"
-
-# grouping of optical drives from multiple kernel subsystems
-KERNEL="sr*", NAME="%k", SYMLINK="cdrom%e"
-KERNEL="scd*", NAME="%k", SYMLINK="cdrom%e"
-KERNEL="pcd*", NAME="%k", SYMLINK="cdrom%e"
-KERNEL="hd[a-z]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="cdrom",
- NAME="%k", SYMLINK="cdrom%e"
+BUS=="usb", SYSFS{model}=="XV3", NAME=="video%n", SYMLINK="webcam%n"
.fi
.P
A number of different fields in the above configuration files support a simple
.br
In addition to the hotplug environment variables,
.B UDEV_LOG
-is set if udev is configured to use the syslog facility. Executed programs may
-want to follow that setting.
+is set and contains the numerical priority value, if udev is configured to use
+.BR syslog (3).
+Executed programs may want to follow that setting.
.B DEVNAME
is exported to make the name of the created node, or the name the network
device is renamed to, available to the executed program. The programs in every
.B udev
config file.
.TP
+.B UDEV_LOG
+Overrides the log priority specified in the config file.
+.TP
.B UDEV_NO_DEVD
The default behavior of
.B udev
.PP
.B Web resources:
.nf
-.I http://linux\-hotplug.sourceforge.net/
.I http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html
+.I http://linux\-hotplug.sourceforge.net/
.fi
.SH AUTHORS
.B udev