# There are a number of modifiers that are allowed to be used in the NAME or PROGRAM fields. # They provide the following subsitutions: # %n - the "kernel number" of the device. # for example, 'sda3' has a "kernel number" of '3' # %k - the kernel name for the device. # %M - the kernel major number for the device # %m - the kernel minor number for the device # %b - the bus id for the device # %c - the return value for the CALLOUT program (note, this doesn't work within # the PROGRAM field for the obvious reason.) # %s{filename} the content of a sysfs attribute # $env{variable} the content of an environment variable # %D - use the devfs style disk name for this device. # For partitions, this will result in 'part%n' # If this is not a partition, it will result in 'disc' # %% the '%' char itself # # we provide both old & LSB device nodes: #------------------------------------------------- # CPU devices: KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid", SYMLINK="cpu/%k" KERNEL=="msr[0-9]*", NAME="cpu/%n/msr", SYMLINK="cpu/%k", SYMLINK="%k" KERNEL=="microcode", NAME="cpu/microcode" #------------------------------------------------- # infiniband devices: KERNEL=="umad*", NAME="infiniband/%k" KERNEL=="issm*", NAME="infiniband/%k" #------------------------------------------------- # Block Devices: # all block devices SUBSYSTEM=="block", GROUP="disk" SUBSYSTEM=="block", SYSFS{removable}=="1", GROUP="floppy" # USB ZIP/JAZ KERNEL=="sd*", SYSFS{vendor}=="IOMEGA", SYSFS{model}=="ZIP*", SYMLINK+="zip%n", OPTIONS+="all_partitions" KERNEL=="sd*", SYSFS{vendor}=="IOMEGA", SYSFS{model}=="jaz*", SYMLINK+="jaz%n", OPTIONS+="all_partitions" # IEEE1394 (firewire) devices (must be before raw devices below): KERNEL=="raw1394", NAME="%k", GROUP="video" KERNEL=="dv1394*", NAME="dv1394/%n", GROUP="video" KERNEL=="video1394*", NAME="video1394/%n", GROUP="video" # disk devices KERNEL=="sd*", NAME="%k", GROUP="disk", KERNEL=="dasd*", NAME="%k", GROUP="disk" KERNEL=="ataraid*", NAME="%k", GROUP="disk" BUS=="scsi", KERNEL=="sg*", NAME="%k", MODE="0660", GROUP="cdwriter" # device mapper creates its own device nodes, so ignore these: KERNEL=="dm-[0-9]*", OPTIONS="ignore_device" KERNEL=="device-mapper", NAME="mapper/control" # raw: KERNEL=="raw[0-9]*", NAME="raw/%k", SYMLINK+="%k", GROUP="disk" KERNEL=="rawctl", SYMLINK+="raw/%k", GROUP="disk" KERNEL=="tun[0-9]*", NAME="raw/%k" # misc: BUS=="ide", KERNEL=="hd*", NAME="%k", GROUP="%c{3}" KERNEL=="md[0-9]*", SYMLINK+="md/%n", GROUP="disk" KERNEL=="md_d[0-9]*", SYMLINK+="md/d%n", GROUP="disk" KERNEL=="loop[0-9]*", GROUP="disk" KERNEL=="cloop[0-9]*", SYMLINK+="cloop/%n", GROUP="disk" KERNEL=="fd[0-9]*", SYMLINK+="floppy/%n", GROUP="floppy", RUN+="/etc/udev/scripts/floppy-extra-devs.sh %k %b %n" KERNEL=="pktcdvd", NAME="pktcdvd/control", GROUP="cdrom", MODE="0660" KERNEL=="pktcdvd[0-9]*", SYMLINK+="pktcdvd/%n", GROUP="disk" KERNEL=="ram[0-9]*", GROUP="disk" # cdrom symlinks and other good cdrom naming BUS=="ide", KERNEL=="hd[a-z]", ACTION=="add", IMPORT="cdrom_id --export $tempnode" BUS=="scsi", KERNEL=="sr[0-9]*", ACTION=="add", IMPORT="cdrom_id --export $tempnode" BUS=="scsi", KERNEL=="scd[a-z]", ACTION=="add", IMPORT="cdrom_id --export $tempnode" # workaround for devices which do not report media changes: BUS=="ide", KERNEL=="hd[a-z][0-9]*", SYSFS{removable}=="1", \ PROGRAM="/etc/udev/scripts/ide-model.sh %k", RESULT=="IOMEGA ZIP *", \ OPTIONS=all_partitions, NAME="%k", GROUP="floppy" # IDE devices BUS=="ide", KERNEL=="hd[a-z]", SYSFS{removable}=="1", \ PROGRAM="/bin/cat /proc/ide/%k/media", RESULT=="cdrom*", \ GROUP="cdrom" BUS=="ide", KERNEL=="hd[a-z]", SYSFS{removable}=="1", \ PROGRAM="/bin/cat /proc/ide/%k/media", RESULT=="floppy*", \ GROUP="floppy" # permissions for SCSI CD devices BUS=="scsi", KERNEL=="s[grt][0-9]*", SYSFS{type}=="5", NAME="%k", MODE="0660", GROUP="cdrom" # SCSI block devices BUS=="scsi", KERNEL=="sd[a-i][a-z][0-9]*", NAME="%k" BUS=="scsi", KERNEL=="s[grt][0-9]*", NAME="%k" BUS=="scsi", KERNEL=="scd[0-9]*", NAME="%k" BUS=="scsi", KERNEL=="st[0-9]*", NAME="%k" BUS=="scsi", KERNEL=="nst[0-9]*", NAME="%k" #------------------------------------------------- # Multimedia # DRI: KERNEL=="card[0-9]*", NAME="dri/card%n", GROUP="video" KERNEL=="nvidia*", NAME="%k", GROUP="video" KERNEL=="3dfx*", NAME="%k", GROUP="video" # DVB: # kernel up to 2.6.8: KERNEL=="dvb*", PROGRAM="/etc/udev/scripts/dvb.sh %k", NAME="%c", GROUP="video" # kernel-2.6.9+ : KERNEL=="dvb[0-9].dvr*", NAME="dvb/adapter%n/dvr%n", GROUP="video" KERNEL=="dvb[0-9].demux*", NAME="dvb/adapter%n/demux%n", GROUP="video" KERNEL=="dvb[0-9].frontend*", NAME="dvb/adapter%n/frontend%n", GROUP="video" KERNEL=="dvb[0-9].audio*", NAME="dvb/adapter%n/audio%n", GROUP="video" KERNEL=="dvb[0-9].ca*", NAME="dvb/adapter%n/ca%n", GROUP="video" KERNEL=="dvb[0-9].osd*", NAME="dvb/adapter%n/osd%n", GROUP="video" KERNEL=="dvb[0-9].net*", NAME="dvb/adapter%n/net%n", GROUP="video" KERNEL=="dvb[0-9].video*", NAME="dvb/adapter%n/video%n", GROUP="video" # v4l devices SUBSYSTEM=="video4linux", GROUP="video" KERNEL=="video0", SYMLINK+="video", GROUP="video" KERNEL=="video[0-9]*", NAME="v4l/video%n", SYMLINK+="video%n", GROUP="video" KERNEL=="radio0", SYMLINK+="radio", GROUP="video" KERNEL=="radio[0-9]", SYMLINK+="v4l/radio%n", GROUP="video" KERNEL=="vbi0", SYMLINK+="vbi", GROUP="video" #KERNEL=="vbi[0-9]", SYMLINK+="v4l/vbi%n", GROUP="video" KERNEL=="vbi[0-9]*", NAME="v4l/vbi%n", SYMLINK+="vbi%n", GROUP="video" KERNEL=="vtx0", SYMLINK+="vtx", GROUP="video" KERNEL=="vtx[0-9]", SYMLINK+="v4l/vtx%n", GROUP="video" KERNEL=="em8300", NAME="video/%k" KERNEL=="em8300_ma", NAME="video/%k" KERNEL=="em8300_mv", NAME="video/%k" KERNEL=="em8300_sp", NAME="video/%k" #------------------------------------------------- # Input # legacy devices: KERNEL=="psaux", SYMLINK+="misc/%k" KERNEL=="psaux", SYMLINK+="psmouse" KERNEL=="mice", NAME="input/%k", SYMLINK+="usbmouse", MODE="0644" KERNEL=="mouse[0-9]*", NAME="input/%k", MODE="0644" # security => input: 644 => 600 # else anybody logged on could read my password directly from the event device # associated with the keyboard... KERNEL=="event[0-9]*", NAME="input/%k", MODE="0600" KERNEL=="js0", NAME="input/%k", SYMLINK+="js js0", MODE="0664" KERNEL=="js[1-9]", NAME="input/%k", SYMLINK+="js%n", MODE="0664" KERNEL=="ts*", NAME="input/%k", MODE="0600" # usb devices: KERNEL=="hiddev", NAME="usb/%k" KERNEL=="auer*", NAME="usb/%k" KERNEL=="dabusb*", NAME="usb/%k" KERNEL=="legousbtower*", NAME="usb/%k", GROUP="usb" BUS=="usb", KERNEL=="cpad[0-9]*", NAME="usb/%k" #------------------------------------------------- # Char devices # tty devices KERNEL=="console", NAME="%k", GROUP="tty", MODE="0600", OPTIONS+="last_rule" KERNEL=="tty", NAME="%k", SYMLINK+="tty0", GROUP="tty", MODE="0666", OPTIONS="last_rule" KERNEL=="tty[0-9]*", NAME="%k", GROUP="tty", OPTIONS="last_rule" KERNEL=="dcbri*", NAME="%k", GROUP="tty" KERNEL=="ircomm*", NAME="%k", GROUP="tty" # vc devices KERNEL=="vcs", SYMLINK+="vcc/0", GROUP="tty", OPTIONS="last_rule" KERNEL=="vcs[1-9]*", SYMLINK+="vcc/%n", GROUP="tty", OPTIONS="last_rule" KERNEL=="vcsa", NAME="%k", SYMLINK+="vcc/a0 vcsa0", GROUP="tty", OPTIONS="last_rule" KERNEL=="vcsa[0-9]*", SYMLINK+="vcc/a%n", GROUP="tty", OPTIONS="last_rule" # ignore the events generated by virtual consoles: SUBSYSTEM=="vc", OPTIONS+="last_rule" # pty devices: KERNEL=="tty[p-za-e][0-9a-f]*", NAME="%k", GROUP="tty", OPTIONS="last_rule" KERNEL=="pty[p-za-e][0-9a-f]*", NAME="%k", GROUP="tty", OPTIONS="last_rule" KERNEL=="ptmx", NAME="%k", GROUP="tty", MODE="0666", OPTIONS="last_rule" KERNEL=="ttyS[0-9]*", GROUP="uucp", OPTIONS="last_rule" KERNEL=="ttyUSB[0-9]*", GROUP="tty", MODE="0600" KERNEL=="ttyUSB[0-9]*", SYMLINK+="usb/tts/%n" # aoe char devices, SUBSYSTEM=="aoe", KERNEL=="discover", NAME="etherd/%k", GROUP="disk", MODE="0220" SUBSYSTEM=="aoe", KERNEL=="err", NAME="etherd/%k", GROUP="disk", MODE="0440" SUBSYSTEM=="aoe", KERNEL=="interfaces", NAME="etherd/%k", GROUP="disk", MODE="0220" # memory devices KERNEL=="random", NAME="%k", MODE="0666" KERNEL=="urandom", NAME="%k", MODE="0444" KERNEL=="mem", NAME="%k", MODE="0640" KERNEL=="kmem", NAME="%k", MODE="0640" KERNEL=="port", NAME="%k", MODE="0640" KERNEL=="full", NAME="%k", MODE="0666" KERNEL=="null", NAME="%k", MODE="0666" KERNEL=="zero", NAME="%k", MODE="0666" # /misc devices: KERNEL=="agpgart", SYMLINK+="misc/agpgart", GROUP="video" KERNEL=="apm_bios", SYMLINK+="misc/apm_bios" KERNEL=="rtc", SYMLINK+="misc/rtc", MODE="0664" KERNEL=="dmapi", SYMLINK+="misc/%k" KERNEL=="dac960_gam", SYMLINK+="misc/%k" KERNEL=="vmmon", SYMLINK+="misc/%k" KERNEL=="inotify", NAME="misc/%k", SYMLINK+="%k", MODE="0666" KERNEL=="i2c-[0-9]*", SYMLINK+="i2c/%n" KERNEL=="lirc", SYMLINK+="lirc/lirc%n" KERNEL=="lirc[1-9]", SYMLINK+="lirc/%k" KERNEL=="fb[1-9]*", SYMLINK+="fb/%n", GROUP="video" #------------------------------------------------- # Sound devices SUBSYSTEM=="sound", GROUP="audio" KERNEL=="admmidi", SYMLINK+="sound/admmidi", GROUP="audio" KERNEL=="admmidi[1-9]", SYMLINK+="sound/admmidi%n", GROUP="audio" KERNEL=="adsp", SYMLINK+="sound/adsp", GROUP="audio" KERNEL=="adsp[1-9]", SYMLINK+="sound/adsp%n", GROUP="audio" KERNEL=="amidi", SYMLINK+="sound/amidi", GROUP="audio" KERNEL=="amidi[1-9]", SYMLINK+="sound/amidi%n", GROUP="audio" KERNEL=="amixer", SYMLINK+="sound/amixer", GROUP="audio" KERNEL=="amixer[1-9]", SYMLINK+="sound/amixer%n", GROUP="audio" KERNEL=="audio", SYMLINK+="sound/audio", GROUP="audio" KERNEL=="audio[1-9]", SYMLINK+="sound/audio%n", GROUP="audio" KERNEL=="dmmidi", SYMLINK+="sound/dmmidi", GROUP="audio" KERNEL=="dmmidi[1-9]", SYMLINK+="sound/dmmidi%n", GROUP="audio" KERNEL=="dsp", SYMLINK+="sound/dsp", GROUP="audio" KERNEL=="dsp[1-9]", SYMLINK+="sound/dsp%n", GROUP="audio" KERNEL=="dmfm", SYMLINK+="sound/dmfm", GROUP="audio" KERNEL=="dmfm[1-9]", SYMLINK+="sound/dmfm%n", GROUP="audio" KERNEL=="midi", SYMLINK+="sound/midi", GROUP="audio" KERNEL=="midi[1-9]", SYMLINK+="sound/midi%n", GROUP="audio" KERNEL=="mixer", SYMLINK+="sound/mixer", GROUP="audio" KERNEL=="mixer[1-9]", SYMLINK+="sound/mixer%n", GROUP="audio" KERNEL=="music", SYMLINK+="sound/music", GROUP="audio" KERNEL=="music[1-9]", SYMLINK+="sound/music%n", GROUP="audio" KERNEL=="sequencer", SYMLINK+="sound/sequencer", GROUP="audio" KERNEL=="sequencer[1-9]", SYMLINK+="sound/%k", GROUP="audio" KERNEL=="controlC[0-9]", NAME="snd/%k", GROUP="audio" KERNEL=="hwC[0-9]D[0-9]", NAME="snd/%k", GROUP="audio" KERNEL=="midiC[0-9]D[0-9]", NAME="snd/%k", GROUP="audio" KERNEL=="pcmC[0-9]D[0-9]c", NAME="snd/%k", GROUP="audio" KERNEL=="pcmC[0-9]D[0-9]p", NAME="snd/%k", GROUP="audio" KERNEL=="timer", NAME="snd/%k", GROUP="audio" KERNEL=="seq", NAME="snd/%k", GROUP="audio" #------------------------------------------------- # Network devices KERNEL=="tun", SYMLINK+="net/%k" # netlink devices: KERNEL=="route", SYMLINK+="netlink/%k" KERNEL=="skip", SYMLINK+="netlink/%k" KERNEL=="usersock", SYMLINK+="netlink/%k" KERNEL=="fwmonitor", SYMLINK+="netlink/%k" KERNEL=="tcpdiag", SYMLINK+="netlink/%k" KERNEL=="nflog", SYMLINK+="netlink/%k" KERNEL=="xfrm", SYMLINK+="netlink/%k" KERNEL=="arpd", SYMLINK+="netlink/%k" KERNEL=="route6", SYMLINK+="netlink/%k" KERNEL=="ip6_fw", SYMLINK+="netlink/%k" KERNEL=="dnrtmsg", SYMLINK+="netlink/%k" KERNEL=="tap*", SYMLINK+="netlink/%k" # ISDN devices KERNEL=="ippp0", NAME="%k", GROUP="tty" KERNEL=="ippp0", NAME="%k", GROUP="tty" # CAPI devices KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20" KERNEL=="capi*", NAME="capi/%n" #------------------------------------------------- # Misc permissions: # pilot/palm devices KERNEL=="pilot", NAME="%k", GROUP="uucp" # jaz devices KERNEL=="jaz*", NAME="%k", GROUP="disk" # zip devices KERNEL=="pocketzip*", NAME="%k", GROUP="disk" KERNEL=="zip*", NAME="%k", GROUP="disk" # ls120 devices KERNEL=="ls120", NAME="%k", GROUP="disk" # lp devices SUBSYSTEM=="printer", GROUP="lp" KERNEL=="irlpt", NAME="%k", GROUP="lp" KERNEL=="usblp", NAME="%k", GROUP="lp" BUS=="usb", KERNEL=="lp[0-9]*", NAME="usb/%k", GROUP="lp" KERNEL=="lp[0-9]*", NAME="%k", SYMLINK+="printers/%n par%n", GROUP="lp" # tape devices KERNEL=="ht*", NAME="%k", GROUP="tape" KERNEL=="nht*", NAME="%k", GROUP="tape" KERNEL=="pt*", NAME="%k", GROUP="tape" KERNEL=="npt*", NAME="%k", GROUP="tape" KERNEL=="st*", NAME="%k", GROUP="tape" KERNEL=="nst*", NAME="%k", GROUP="tape" KERNEL=="osst*", NAME="%k", GROUP="tape" KERNEL=="nosst*", NAME="%k", GROUP="tape" # diskonkey devices KERNEL=="diskonkey*", NAME="%k", GROUP="disk" # rem_ide devices KERNEL=="microdrive*", NAME="%k", GROUP="disk" # kbd devices KERNEL=="kbd", NAME="%k", MODE="0664" # Sony Vaio Jogdial sonypi device KERNEL=="sonypi", NAME="%k", MODE="0666" # allow pci cold plug for firewire and usb controllers only # alias pci:v*d*sv*sd*bc0Csc00i10* ohci1394 # alias pci:v*d*sv*sd*bc0Csc03i10* ohci-hcd # alias pci:v*d*sv*sd*bc0Csc03i20* ehci-hcd # alias pci:v*d*sv*sd*bc0Csc03i00* uhci-hcd ACTION=="add", SUBSYSTEM=="pci", ENV{UDEV_START}=="1", SYSFS{modalias}=="?*", \ SYSFS{class}=="0x0c0010|0x0c0300|0x0c0310|0x0c0320", \ RUN+="/sbin/modprobe %s{modalias}" # modprobe pci devices on hot plug ACTION=="add", SUBSYSTEM=="pci", ENV{UDEV_START}!="1", SYSFS{modalias}=="?*", \ RUN+="/sbin/modprobe %s{modalias}" # usbfs-like devices SUBSYSTEM=="usb_device", PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", NAME="%c" # libusb device access (mount usbfs or usbdev nodes) DEVPATH=="/module/usbcore", ACTION=="add", \ RUN+="/bin/sh -c 'sleep 1; /bin/mount -t usbfs -o devmode=0664,devgid=43 none /proc/bus/usb'" # usbhid should be loaded before usbmouse, or else some Microsoft mice move vertically only ACTION=="add", SYSFS{modalias}=="usb:v*p*d*dc*dsc*dp*ic03isc01ip02*", RUN+="/sbin/modprobe usbhid" # modprobe on hot plug (and cold plug, which is processed by udevstart) ACTION=="add", SUBSYSTEM=="usb", SYSFS{modalias}=="?*", RUN+="/sbin/modprobe %s{modalias}" ACTION=="add", SUBSYSTEM=="ieee1394", SYSFS{modalias}=="?*", RUN+="/sbin/modprobe %s{modalias}" ACTION=="add", SUBSYSTEM=="input", SYSFS{modalias}=="?*", RUN+="/sbin/modprobe %s{modalias}" ACTION=="add", SUBSYSTEM=="ide", SYSFS{modalias}=="?*", RUN+="/sbin/modprobe %s{modalias}" # disks & magneto-optical disk: ACTION=="add", SUBSYSTEM=="scsi", SYSFS{type}=="[07]", \ RUN+="/sbin/modprobe sd_mod" # enclosure: ACTION=="add", SUBSYSTEM=="scsi", SYSFS{type}=="14", \ RUN+="/sbin/modprobe sd_mod" # WORM & ROM: ACTION=="add", SUBSYSTEM=="scsi", SYSFS{type}=="[45]", \ RUN+="/sbin/modprobe sr_mod" # Tape: ACTION=="add", SUBSYSTEM=="scsi", SYSFS{type}=="1", SYSFS{vendor}=="Onstream", \ SYSFS{model}!="ADR*", RUN+="/sbin/modprobe osst" ACTION=="add", SUBSYSTEM=="scsi", SYSFS{type}=="1", SYSFS{vendor}=="Onstream", \ SYSFS{model}=="ADR*", RUN+="/sbin/modprobe st" ACTION=="add", SUBSYSTEM=="scsi", SYSFS{type}=="1", SYSFS{vendor}!="Onstream", \ RUN+="/sbin/modprobe st" # printer, scanner (hp & all), changer & comm : ACTION=="add", SUBSYSTEM=="scsi", SYSFS{type}=="[23689]", \ RUN+="/sbin/modprobe sg" SUBSYSTEM=="scsi_device", ACTION=="add", RUN+="/sbin/modprobe sg" ACTION=="add", SUBSYSTEM=="firmware", ENV{FIRMWARE}=="?*", \ RUN+="firmware.sh" SUBSYSTEM!="drivers", SUBSYSTEM!="module", ACTION=="add", SYSFS{dev}=="?*", RUN+="/sbin/pam_console_apply $env{DEVNAME} $env{DEVLINKS}" SUBSYSTEM=="usb", ACTION=="add", ENV{DEVICE}=="?*", RUN+="/sbin/pam_console_apply $env{DEVICE}"