chiark / gitweb /
write man page masters in DocBook XML
[elogind.git] / udev.8
diff --git a/udev.8 b/udev.8
index 1500b3b424d79a5e3f350043a269b154410bda26..9dae378086ce906d8bdf9c54c525e05449ae8000 100644 (file)
--- a/udev.8
+++ b/udev.8
 .SH NAME
 udev \- Linux configurable dynamic device naming support
 .SH SYNOPSIS
-.BI udev " hotplug-subsystem"
+.BI udev
 .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.
+provides a dynamic device directory containing only the files for actually
+present devices. It creates or removes device node files usually located in
+the /dev directory, or it renames network interfaces.
+.br
 .P
 As part of the
 .B hotplug
 subsystem,
 .B udev
 is executed if a kernel device is added or removed from the system.
-On device creation,
+A list of rules is used to match against specific device attributes.
+.br
+On device addition,
 .B udev
-reads the sysfs directory of the given device to collect device attributes
-like label, serial number or bus device number.
-These attributes are treated as a key 
-to determine a unique name for device file creation.
+matches its configured rules against the available device attributes to
+uniquely name the device.
 .B udev
-maintains a database for devices present on the system.
+maintains its own database for devices present on the system. This database
+can be queried for the relationship of the kernel device path and the
+name of the device file.
 .br
 On device removal,
 .B udev
-queries the internal database for the name of the device file to be deleted.
+queries its database for the name of the device file to be deleted.
+.br
+After the device node handling, a list of collected programs specific to this
+device is executed.
 .SH "CONFIGURATION"
+All
+.B udev
+configuration files consist of a set of lines of text. All empty
+lines or lines beginning with '#' will be ignored.
+.P
 .B udev
-expects its configuration at
-.I /etc/udev/udev.config.
-The file consists of a set of lines. All empty lines and
-lines beginning with a '#' will be ignored.
+expects its main configuration file at
+.IR /etc/udev/udev.conf .
+The file consists of a set of variables and values allowing the user to
+override default udev values. The following variables can be overridden
+in this file:
+.TP
+.B udev_root
+Indicates where to place the device nodes in the filesystem. The default
+value is
+.IR @udevdir@/ .
+.TP
+.B udev_db
+The name and location of the udev database. The default value is
+.IR @udevdir@/.udevdb .
+.TP
+.B udev_rules
+The name of the udev rules file or directory to look for files with the suffix
+.IR .rules .
+All rule files are read in lexical order. The default value is
+.IR /etc/udev/rules.d/ .
+.TP
+.B udev_log
+The logging priority which can be set to
+.IR "err " , "info "
+or the corresponding numerical
+.BR syslog (3)
+value.
+The default value is
+.IR err .
+.P
+.RI "A sample " udev.conf " file might look like this:
+.sp
+.nf
+# Where in the filesystem to place the device nodes
+udev_root="@udevdir@"
+
+# The name and location of the udev database.
+udev_db="@udevdir@/.udevdb"
+
+# The name and location of the udev rules file(s).
+udev_rules="@configdir@/rules.d"
+
+# 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
+.I /etc/udev/rules.d/
+directory, or at the location specified by the
+.I udev_rules
+value in the
+.I /etc/udev/udev.conf
+file.
+.br
+Every line in the rules file defines the mapping between device attributes
+and the device name. One or 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 to name the device file or the network interface.
 .br
-Every line defines the mapping between device attributes and the device file
-name. It starts with a keyword defining the method used to match, followed by
-one ore more keys to compare and the filename for the device. If no matching
-configuration is found, the default kernel device name is used.
+If no matching rule is found, the default kernel device name is used.
 .P
-The line format is:
-.RS
+Every rule consists of a list of comma separated key value fields:
 .sp
-.I method, key,[key,...] name
+.IR "key " ,[ "key " ,...]
+.P
+Each key has the following format:
 .sp
-.RE
-where valid methods with corresponding keys are:
+.IR "name op value"
+.P
+There are distinct key operation types, depending on the type of the key, it
+does a comparison or an assignment.
+.P
+Comparison operators are:
 .TP
-.B CALLOUT
-calling external program, that returns a string to match
-.br
-keys: \fBBUS\fP, \fBPROGRAM\fP, \fBID\fP
+.B ==
+Compare for equality.
 .TP
-.B LABEL
-device label or serial number, like USB serial number, SCSI UUID or
-file system label
-.br
-keys: \fBBUS\fP, \fIsysfs_attribute\fP
+.B !=
+Compare for non-equality.
+.P
+Assignment operators are:
 .TP
-.B NUMBER
-device number on the bus, like PCI bus id
-.br
-keys: \fBBUS\fP, \fBID\fP
+.B +=
+Add the value to a key that holds a list of entries.
+.TP
+.B :=
+Assign a value to a key finally; disallow any later changes, which
+is useful to prevent changes by any later rules.
+.TP
+.B =
+Asign a value to a key. Keys that represent a list, are reset and only this
+single value is assigned.  While this operator still works inplicitely as
+comparison on keys that can't get a value assigned, its usage as an comparison
+operator is deprecated.
+.P
+The following key names can be used to match against device properties:
+.TP
+.B BUS
+Match the bus type of the device.
+(The sysfs device bus must be able to be determined by a "device" symlink.)
+.TP
+.B KERNEL
+Match the kernel device name.
 .TP
-.B TOPOLOGY
-device position on bus, like physical port of USB device
+.B SUBSYSTEM
+Match the kernel subsystem name.
+.TP
+.B ACTION
+Match the kernel action name.
+.TP
+.B DRIVER
+Match the kernel driver name.
+.TP
+.B ID
+Match the device number on the bus, like PCI bus id.
+.TP
+.BI SYSFS{ filename }
+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
-keys: \fBBUS\fP, \fBPLACE\fP
+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 REPLACE
-string replacement of the kernel device name
+.B PROGRAM
+Call external program. This key is valid if the program returns successful.
+The environment variables of
+.B udev
+are also available to the program.
 .br
-key: \fBKERNEL_NAME\fP
-.P
-The methods are applied in the following order:
-.B CALLOUT
-,
-.B LABEL
-,
-.B NUMBER
-,
-.B TOPOLOGY
-,
-.B REPLACE
-.P
-The 
-.B NAME 
-and 
-.B PROGRAM 
-fields support simple printf-like string subtitution:
-.RS
+The string returned by the program may be additionally matched with the
+.B RESULT
+key in the same or any later rule.
+.TP
+.B RESULT
+Match the returned string of the last
+.B PROGRAM
+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. Only one rule can set the a name, all later rules
+with a NAME key will be ignored.
+.TP
+.B SYMLINK
+The name of a symlink targeting the node. Every matching rule can add
+this value to the list of symlinks to be created along with the device node.
+Multiple symlinks may be specified by separating the names by the space
+character.
+.TP
+.B OWNER, GROUP, MODE
+The permissions for the device node. Every specified value overwrites the
+compiled-in default value.
+.TP
+.B RUN
+Add a program to the list of programs to be executed for a specific device.
+.TP
+.B OPTIONS
+.B last_rule
+stops further rules application. No later rules will have any effect.
+.sp
+.B ignore_device
+will ignore this device. No node will be created or program executed.
+.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:
 .TP
 .B %n
-the "kernel number" of the device
-for example, 'sda3' has a "kernel number" of '3'
+The "kernel number" of the device.
+For example, 'sda3' has a "kernel number" of '3'.
+.TP
+.B %k
+The "kernel name" for the device.
+.TP
+.B %p
+The devpath for the device.
 .TP
 .B %M
-the kernel major number for the device
+The kernel major number for the device.
 .TP
 .B %m
-the kernel minor number for the device
+The kernel minor number for the device.
 .TP
 .B %b
-the bus id for the device
+The bus id for the device.
 .TP
 .B %c
-the CALLOUT program returned string
-(this does not work within the PROGRAM field for the obvious reason.)
-.RE
+The string returned by the external program, specified in
+.B PROGRAM
+(This does not work within the
+.B PROGRAM
+field for the obvious reason.)
+.br
+A single part of the string, separated by a space character
+may be selected by specifying the part number as an attribute:
+.BI %c{ N }
+If the number is followed by the + char this part plus
+all remaining parts of the result string are substituted:
+.BI %c{ N+ }
+.TP
+.B %N
+The name of a created temporary device node to provide access to the
+device from a external program.
+.TP
+.B %P
+The node name of the parent device.
+.TP
+.BI %s{ filename }
+The content of a sysfs attribute.
+.TP
+.B %r
+The udev_root value.
+.TP
+.B %e
+If a device node already exists with the name, the smallest positive
+decimal integer N is substituted such that the resulting name doesn't
+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.
 .P
-A sample \fIudev.conf\fP might look like this:
+The count of characters 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 " file might look like this:"
 .sp
 .nf
-# if /sbin/scsi_id returns "OEM 0815" device will be called disk1
-CALLOUT, BUS="scsi", PROGRAM="/sbin/scsi_id", ID="OEM 0815", NAME="disk1"
+# if /sbin/scsi_id returns "OEM 0815", the device will be called disk1
+BUS=="scsi", PROGRAM=="/sbin/scsi_id", RESULT=="OEM 0815", NAME="disk1"
 
 # USB printer to be called lp_color
-LABEL, BUS="usb", 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"
 
 # sound card with PCI bus id 00:0b.0 to be called dsp
-NUMBER, 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
-TOPOLOGY, BUS="usb", PLACE="2.3", NAME="mouse1"
+BUS=="usb", ID=="2.3", NAME="mouse1"
 
-# ttyUSB1 should always be called pda
-REPLACE, KERNEL="ttyUSB1", NAME="pda"
+# ttyUSB1 should always be called pda with two additional symlinks
+KERNEL=="ttyUSB1", NAME="pda", SYMLINK="palmtop handheld"
 
-# USB webcams to be called webcam0, webcam1, ...
-LABEL, BUS="usb", model="WebCam Version 3", NAME="webcam%n"
+# multiple USB webcams with symlinks to be called webcam0, webcam1, ...
+BUS=="usb", SYSFS{model}=="XV3", NAME=="video%n", SYMLINK="webcam%n"
 .fi
 .P
-Permissions and ownership for the created device files may specified at
-.I /etc/udev/udev.permissions.
-The file consists of a set of lines. All empty lines and
-lines beginning with a '#' will be ignored.
-.br
-Every line lists a device name followed by owner, group and permission
-mode. All values are separated by colons. The name field may end with a
-wildcard to apply the values to a whole class of devices.
+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 zero, one, or more characters.
+.TP
+.B ?
+Matches any single character, but does not match zero 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
+following the '[' is a '!', any characters not enclosed are matched.
+.P
+After device node creation, removal, or network device renaming,
+.B udev
+executes the programs specified by the
+.B RUN
+key.
 .br
-If
+In addition to the kernel provided hotplug environment variables,
+.B UDEV_LOG
+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 programs.
+.SH "ENVIRONMENT"
+.P
+The following variables are read from the environment:
+.TP
+.B ACTION
+.IR add " or " remove
+signifies the addition or the removal of a device.
+.TP
+.B DEVPATH
+The sysfs devpath of the device without the mountpoint but a leading slash.
+.TP
+.B SUBSYSTEM
+The subsystem the device belongs to. Alternatively the subsystem may
+be passed as the first argument.
+.TP
+.B UDEV_CONFIG_FILE
+Overrides the default location of the
 .B udev
-was built using klibc or is used before the user database is accessible (e.g.
-.B initrd
-), only numeric owner and group values may be used.
-.sp
-A sample \fIudev.permissions\fP might look like this:
-.sp
-.nf
-#name:user:group:mode
-input/*:root:root:644
-ttyUSB1:0:8:0660
-video*:root:video:0660
-dsp1:::0666
-.fi
+config file.
+.TP
+.B UDEV_LOG
+Overrides the log priority specified in the config file.
+.TP
+.B UDEV_RUN
+If set to "0", it disables the execution of programs added by rules.
 .SH "FILES"
 .nf
-.ft B
-.ft
 /sbin/udev                           udev program
-/etc/udev/*                          udev config and database files
-/etc/hotplug.d/default/udev.hotplug  hotplug symlink to udev program
+/etc/udev/*                          udev config files
 .fi
-.LP
 .SH "SEE ALSO"
-.BR hotplug (8)
+.BR udevinfo (8),
+.BR udevd (8),
 .PP
-The
-.I http://linux-hotplug.sourceforge.net/
-web site.
+.B Web resources:
+.nf
+.I http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html
+.I http://linux\-hotplug.sourceforge.net/
+.fi
 .SH AUTHORS
 .B udev
 was developed by Greg Kroah-Hartman <greg@kroah.com> with much help from
-Dan Stekloff <dsteklof@us.ibm.com> and many others.
+Dan Stekloff <dsteklof@us.ibm.com>, Kay Sievers <kay.sievers@vrfy.org>, and
+many others.