udev \- Linux configurable dynamic device naming support
.SH SYNOPSIS
.BI udev " hotplug-subsystem"
+.P
+The environment must provide the following variables:
+.TP
+.B ACTION
+.IR add " or " remove
+signifies the connection or disconnection of a device.
+.TP
+.B DEVPATH
+The sysfs devpath of the device without the mountpoint but a leading slash.
+.P
+Additional optional environment variables are:
+.TP
+.B UDEV_CONFIG_FILE
+Overrides the default location of the
+.B udev
+config file.
+.TP
+.B UDEV_NO_SLEEP
+The default behavior of
+.B udev
+is to wait until all the sysfs files of the device chain are populated. If set
+.B udev
+will continue, regardless of the state of the device representation.
.SH "DESCRIPTION"
.B udev
creates or removes device node files usually located in the /dev directory.
-Its goal is to provide a dynamic device directory that contains only the files
-for devices that are actually present.
+It provides a dynamic device directory that contains only the files for
+devices that are actually present.
.P
As part of the
.B hotplug
.B udev
expects its main configuration file at
-.I /etc/udev/udev.conf.
+.IR /etc/udev/udev.conf .
The file consists of a set of variables and values that allow the user to
override default udev values. The current set of variables that can be
overridden in this file is:
.B udev_root
This is the where in the filesystem to place the device nodes. The default
value for this is
-.I /udev/
+.IR /udev/ .
.TP
.B udev_db
The name and location of the udev database. The default value for this is
-.I /udev/.udev.tdb
+.IR /udev/.udev.tdb .
.TP
.B udev_rules
This is the location of the udev rules file. The default value for this is
-.I /etc/udev/udev.rules
+.IR /etc/udev/udev.rules .
+If a directory is specified, the whole directory is
+scanned for files ending with
+.I .rules
+and all rule files are read in lexical order.
.TP
.B udev_permissions
-This is the location of the udev permission file. The default value for this is
-.I /etc/udev/udev.permissions
+This is the location of the udev permission file. The default value for this is
+.IR /etc/udev/udev.permissions .
+If a directory is specified, the whole directory is scanned for files ending with
+.I .permissions
+and all permission files are read in lexical order.
.TP
.B udev_log
If you want udev to log some information to the syslog for every node created or
removed. The default value for this is
-.I yes
+.IR yes .
.TP
.B default_mode
This is the default mode for all nodes that have no explicit match in the
permissions file. The default value for this is
-.I 0666
+.IR 0666 .
.TP
.B default_owner
This is the default owner for all nodes that have no explicit match in the
permissions file. The default value for this is
-.I root
+.IR root .
.TP
.B default_group
This is the default group for all nodes that have no explicit match in the
permissions file. The default value for this is
-.I root
+.IR root .
.br
.P
.RI "A sample " udev.conf " might look like this:
# udev_db - The name and location of the udev database.
udev_db="/udev/.udev.tdb"
-# udev_rules - The name and location of the udev rules file
-udev_rules="/etc/udev/udev.rules"
+# udev_rules - The location of the directory where to look for files
+ which names ending with .rules
+udev_rules="/etc/udev/"
# udev_permissions - The name and location of the udev permission file
udev_permissions="/etc/udev/udev.permissions"
Every line in the rules file defines the mapping between device attributes
and the device file name. One ore more keys are specified to match a rule
with the current device. If all keys are matching, the rule will be applied
-and the name is used for the device node. One or more optional symlinks
-targeting the node may be specified.
+and the name is used for the device node.
.br
If no matching rule is found, the default kernel device name is used.
.P
-The line format is:
+Every rule consists of a list a comma separated fields:
.sp
-.I key,[key,...] name [, symlink]
+.IR "key " ,[ "key " ,...] " name " [, " symlink" ]
.sp
-where keys are:
+where possible fields are:
.TP
.B BUS
Match the bus type of the device.
.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.
+.br
The string returned by the program may additionally matched with the
.B RESULT
key.
call. This key may used in any following rule after a
.B PROGRAM
call.
-.P
-The
+.TP
.B NAME
-field given with the attribute
+The name of the node to be created. If the name field is omitted or its
+value is empty, the device will be ignored and no node will be created.
+.br
+If given with the attribute
.BR NAME{ all_partitions }
-will create all 15 partitions of a blockdevice.
+it will create all 15 partitions of a blockdevice.
This may be useful for removable media devices.
+.TP
+.B SYMLINK
+The name of a symlink targeting the node. Multiple symlinks may be
+specified by separating the names by the space character.
.P
.RB "The " NAME " ," SYMLINK " and " PROGRAM
fields support simple printf-like string substitution:
.TP
.B %n
The "kernel number" of the device.
-for example, 'sda3' has a "kernel number" of '3'
+For example, 'sda3' has a "kernel number" of '3'.
.TP
.B %k
The "kernel name" for the device.
(This does not work within the
.B PROGRAM
field for the obvious reason.)
+.br
+A single part of the string, separated by the space character
+my be selected by specifying the part number as a attribute:
+.BI %c{ part }
+.TP
+.BI %s{ filename }
+The content of a sysfs attribute.
.TP
.B %%
-The '%' char itself.
+The '%' character itself.
+.P
+The count of charcters to insert may be limited by specifying
+the format length value. For example, '%3s{file}' will only insert
+the first three characters of the sysfs attribute.
.P
.RI "A sample " udev.rules " might look like this:"
.sp
Every line lists a device name followed by owner, group and permission
mode. All values are separated by colons. The name field may contain a
pattern to apply the values to a whole class of devices.
-.br
-If
-.B udev
-was built using klibc or is used before the user database is accessible (e.g.
-.BR initrd "(4)), only numeric owner and group values may be used."
.sp
.RI "A sample " udev.permissions " might look like this:"
.sp
dsp1:::0666
.fi
.P
+The value
+.I $local
+can be substituted for a specific username. In that case, udev will determine
+the current local user at the time of device node creation and substitute
+that username as the owner of the new device node. This is useful, for
+example, to let hot-plugged devices, such as cameras, be owned by the user at
+the current console. Note that if no user is currently logged in, or if udev
+otherwise fails to determine a current user, the
+.I default_owner
+value is used in lieu.
+.P
A number of different fields in the above configuration files support a simple
form of shell style pattern matching. It supports the following pattern characters:
.TP
.B [ ]
Matches any single character specified within the brackets. For example, the
pattern string "tty[SR]" would match either "ttyS" or "ttyR". Ranges are also
-supported within this match with the '-' character. For example, to match on
-the range of all digits, the pattern [0-9] would be used. If the first character
+supported within this match with the '\-' character. For example, to match on
+the range of all digits, the pattern [0\-9] would be used. If the first character
following the '[' is a '!' then any character not enclosed is matched.
.SH "FILES"
.nf
.LP
.SH "SEE ALSO"
.BR udevinfo (8),
+.BR udevd (8),
.BR hotplug (8)
.PP
The
-.I http://linux-hotplug.sourceforge.net/
+.I http://linux\-hotplug.sourceforge.net/
web site.
.SH AUTHORS
.B udev