1# There are a number of modifiers that are allowed to be used in some of the
2# fields.  See the udev man page for a full description of them.
3#
4# default is OWNER="root" GROUP="root", MODE="0600"
5#
6
7KERNEL=="*", OWNER="root" GROUP="root", MODE="0600"
8
9# all block devices
10SUBSYSTEM=="block",		GROUP="disk", MODE="0640"
11KERNEL=="root",			GROUP="disk", MODE="0640"
12
13# console devices
14KERNEL=="tty",			NAME="%k", GROUP="tty", MODE="0666", OPTIONS="last_rule"
15KERNEL=="console",              NAME="%k", MODE="0600", OPTIONS="last_rule"
16KERNEL=="tty[0-9]*",            NAME="%k", GROUP="tty", MODE="0660", OPTIONS="last_rule"
17KERNEL=="vc/[0-9]*",		NAME="%k", GROUP="tty", MODE="0660", OPTIONS="last_rule"
18
19# pty devices
20#  Set this to 0660 if you only want users belonging to tty group
21#  to be able to allocate PTYs
22KERNEL=="ptmx",                 NAME="%k", GROUP="tty", MODE="666", OPTIONS="last_rule"
23KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", NAME="%k", GROUP="tty", MODE="660", OPTIONS="last_rule"
24KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", NAME="%k", GROUP="tty", MODE="660", OPTIONS="last_rule"
25KERNEL=="pty/m*",		NAME="%k", GROUP="tty", MODE="0660", OPTIONS="last_rule"
26
27# serial+dialup devices
28KERNEL=="ippp*",		NAME="%k", MODE="0660"
29KERNEL=="isdn*",		NAME="%k", MODE="0660"
30KERNEL=="isdnctrl*",		NAME="%k", MODE="0660"
31KERNEL=="capi",                 NAME="capi20", GROUP="uucp", MODE="0660"
32KERNEL=="capi*",                NAME="capi/%n", GROUP="uucp", MODE="0660"
33KERNEL=="dcbri*",		NAME="%k", MODE="0660"
34KERNEL=="ircomm*",		NAME="%k", GROUP="uucp", MODE="0660"
35KERNEL=="tts/[0-9]*",		NAME="%k", GROUP="uucp", MODE="0660"
36KERNEL=="tts/USB[0-9]*",	NAME="%k", GROUP="uucp", MODE="0660"
37KERNEL=="tty[A-Z]*",            NAME="%k", GROUP="uucp", MODE="0660"
38KERNEL=="pppox*",               NAME="%k", GROUP="uucp", MODE="0660"
39KERNEL=="ircomm*",              NAME="%k", GROUP="uucp", MODE="0660"
40KERNEL=="modems/mwave*",        NAME="%k", GROUP="uucp", MODE="0660"
41KERNEL=="hvc*",                 NAME="%k", GROUP="uucp", MODE="0660"
42KERNEL=="hvsi*",                NAME="%k", GROUP="uucp", MODE="0660"
43KERNEL=="iseries/vtty*",        NAME="%k", GROUP="uucp", MODE="0660"
44
45# vc devices
46KERNEL=="vcs",			NAME="%k", OWNER="vcsa", GROUP="tty", OPTIONS="last_rule"
47KERNEL=="vcs[0-9]*",		NAME="%k", OWNER="vcsa", GROUP="tty", OPTIONS="last_rule"
48KERNEL=="vcsa",			NAME="%k", OWNER="vcsa", GROUP="tty", OPTIONS="last_rule"
49KERNEL=="vcsa[0-9]*",		NAME="%k", OWNER="vcsa", GROUP="tty", OPTIONS="last_rule"
50KERNEL=="vcc/*",		NAME="%k", OWNER="vcsa", GROUP="tty", OPTIONS="last_rule"
51
52# memory devices
53KERNEL=="random",		MODE="0666", OPTIONS="last_rule"
54KERNEL=="urandom",		MODE="0444", OPTIONS="last_rule"
55KERNEL=="mem",			GROUP="kmem", MODE="0640", OPTIONS="last_rule"
56KERNEL=="kmem",			GROUP="kmem", MODE="0640", OPTIONS="last_rule"
57KERNEL=="port",			GROUP="kmem", MODE="0640", OPTIONS="last_rule"
58KERNEL=="full",			MODE="0666", OPTIONS="last_rule"
59KERNEL=="null",			MODE="0666", OPTIONS="last_rule"
60KERNEL=="zero",			MODE="0666", OPTIONS="last_rule"
61# 183 = /dev/hwrng        Generic random number generator
62KERNEL=="hw_random",            NAME="hwrng", SYMLINK+="%k"
63
64# misc devices
65KERNEL=="nvram",		MODE="0660"
66KERNEL=="rtc",			MODE="0644"
67
68# floppy devices
69KERNEL=="fd[01]*",		GROUP="floppy", MODE="0660"
70# fix floppy devices
71KERNEL=="nvram", ACTION=="add", RUN+="load_floppy_module.sh"
72KERNEL=="fd[0-9]*", ACTION=="add", ATTRS{cmos}=="*", RUN+="create_floppy_devices -c -t $attr{cmos} -m %M /dev/%k"
73KERNEL=="fd[0-9]*", ACTION=="remove", RUN+="/bin/sh -c 'rm -f /dev/%k*'"
74
75BUS=="usb", KERNEL=="sd*", SYSFS{bInterfaceClass}=="08", SYSFS{bInterfaceSubClass}=="04", GROUP="floppy", MODE="0660", SYMLINK+="floppy floppy-%k"
76
77# audio devices
78KERNEL=="dsp*",			MODE="0660"
79KERNEL=="audio*",		MODE="0660"
80KERNEL=="midi*",		MODE="0660"
81KERNEL=="mixer*",		MODE="0660"
82KERNEL=="sequencer*",		MODE="0660"
83KERNEL=="sound/*",		MODE="0660"
84KERNEL=="snd/*",		MODE="0660"
85KERNEL=="beep",			MODE="0660"
86KERNEL=="admm*",		MODE="0660"
87KERNEL=="adsp*",		MODE="0660"
88KERNEL=="aload*",		MODE="0660"
89KERNEL=="amidi*",		MODE="0660"
90KERNEL=="dmfm*",		MODE="0660"
91KERNEL=="dmmidi*",		MODE="0660"
92KERNEL=="sndstat",		MODE="0660"
93
94# lp devices
95KERNEL=="lp*",			GROUP="lp", MODE="0660"
96KERNEL=="parport*",		GROUP="lp", MODE="0660"
97KERNEL=="irlpt*",		GROUP="lp", MODE="0660"
98KERNEL=="usblp*",		GROUP="lp", MODE="0660"
99KERNEL=="usb/lp*",		GROUP="lp", MODE="0660"
100
101# tape devices
102SUBSYSTEM=="ide", SYSFS{media}=="tape", ACTION=="add", \
103		RUN+="modprobe ide-scsi idescsi_nocd=1"
104KERNEL=="ht*",			GROUP="disk", MODE="0660"
105KERNEL=="nht*",			GROUP="disk", MODE="0660"
106KERNEL=="pt[0-9]*",		GROUP="disk", MODE="0660"
107KERNEL=="npt*",			GROUP="disk", MODE="0660"
108KERNEL=="st*",			GROUP="disk", MODE="0660"
109KERNEL=="nst*",			GROUP="disk", MODE="0660"
110KERNEL=="osst*",		GROUP="disk", MODE="0660"
111KERNEL=="nosst*",		GROUP="disk", MODE="0660"
112
113# diskonkey devices
114KERNEL=="diskonkey*",		GROUP="disk", MODE="0640"
115
116# rem_ide devices
117KERNEL=="microdrive*",		GROUP="disk", MODE="0640"
118
119# kbd devices
120KERNEL=="kbd",			MODE="0644"
121
122# joystick devices
123KERNEL=="js[0-9]*",		MODE="0644"
124KERNEL=="djs[0-9]*",		MODE="0644"
125
126# v4l devices
127KERNEL=="video*",		MODE="0660"
128KERNEL=="radio*",		MODE="0660"
129KERNEL=="winradio*",		MODE="0660"
130KERNEL=="vtx*",			MODE="0660"
131KERNEL=="vbi*",			MODE="0660"
132KERNEL=="video/*",		MODE="0660"
133KERNEL=="vttuner",		MODE="0660"
134KERNEL=="v4l/*",		MODE="0660"
135
136# input devices
137KERNEL=="input/*",		MODE="0660"
138
139# gpm devices
140KERNEL=="gpmctl",		MODE="0700"
141
142# dri devices
143KERNEL=="nvidia*",		MODE="0660"
144KERNEL=="3dfx*",		MODE="0660"
145KERNEL=="card[0-9]*",		NAME="dri/%k", MODE="0666"
146
147# usb devices
148KERNEL=="usb/dabusb*",		MODE="0660"
149KERNEL=="usb/mdc800*",		MODE="0660"
150KERNEL=="usb/rio500",		MODE="0660"
151
152# s390 devices
153KERNEL=="z90crypt",		MODE="0666"
154KERNEL=="slram[0-9]*", 		SYMLINK+="xpram%n"
155
156# DVB
157KERNEL=="dvb",			MODE="0660"
158SUBSYSTEM=="dvb", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}'", \
159	NAME="%c", MODE="0660"
160
161KERNEL=="dm-[0-9]*", ACTION=="add",           OPTIONS+="ignore_device"
162
163# alsa devices
164KERNEL=="controlC[0-9]*",	NAME="snd/%k"
165KERNEL=="hw[CD0-9]*",		NAME="snd/%k"
166KERNEL=="pcm[CD0-9cp]*",	NAME="snd/%k"
167KERNEL=="midi[CD0-9]*",		NAME="snd/%k"
168KERNEL=="timer",		NAME="snd/%k"
169KERNEL=="seq",			NAME="snd/%k"
170
171# input devices
172KERNEL=="mice",			NAME="input/%k"
173KERNEL=="mouse*",		NAME="input/%k"
174KERNEL=="event*",		NAME="input/%k"
175KERNEL=="js*",			NAME="input/%k", SYMLINK+="%k"
176KERNEL=="ts*",			NAME="input/%k"
177KERNEL=="uinput",          	NAME="input/%k"
178
179# IEEE1394 (firewire) devices (must be before raw devices below)
180KERNEL=="raw1394",      	NAME="%k"
181KERNEL=="dv1394*",      	NAME="dv1394/%n"
182KERNEL=="video1394*",   	NAME="video1394/%n"
183
184KERNEL=="raw[0-9]*",		NAME="raw/%k"
185
186KERNEL=="lp[0-9]*",		SYMLINK+="par%n"
187BUS=="usb", KERNEL=="lp[0-9]*",	NAME="usb/%k"
188
189KERNEL=="microcode",		NAME="cpu/%k"
190KERNEL=="msr[0-9]*",     	NAME="cpu/%n/msr"
191KERNEL=="cpu[0-9]*",     	NAME="cpu/%n/cpuid"
192
193KERNEL=="ram1",			SYMLINK+="ram"
194KERNEL=="video0",		SYMLINK+="video"
195KERNEL=="radio0",		SYMLINK+="radio"
196KERNEL=="audio0",		SYMLINK+="audio"
197KERNEL=="dsp0",			SYMLINK+="dsp"
198KERNEL=="fb0",			SYMLINK+="fb"
199KERNEL=="qft0",			SYMLINK+="ftape"
200KERNEL=="isdnctrl0",		SYMLINK+="isdnctrl"
201KERNEL=="mixer0",		SYMLINK+="mixer"
202KERNEL=="ram0",			SYMLINK+="ramdisk"
203KERNEL=="sbpcd0",		SYMLINK+="sbpcd"
204KERNEL=="radio0",		SYMLINK+="radio"
205KERNEL=="tty0",			SYMLINK+="systty"
206KERNEL=="vbi0",			SYMLINK+="vbi"
207KERNEL=="null",			SYMLINK+="XOR"
208
209KERNEL=="tun",			NAME="net/%k", MODE="0666"
210
211KERNEL=="device-mapper",	NAME="mapper/control"
212
213# old compat symlinks with enumeration
214KERNEL=="sr[0-9]*",		SYMLINK+="cdrom cdrom-%k"
215KERNEL=="scd[0-9]*",		SYMLINK+="cdrom cdrom-%k"
216KERNEL=="pcd[0-9]*",		SYMLINK+="cdrom cdrom-%k"
217KERNEL=="fd[0-9]*",		SYMLINK+="floppy floppy-%k"
218KERNEL=="nst[0-9]", BUS=="scsi", 	SYMLINK+="tape tape-%k", MODE="0660"
219KERNEL=="nosst[0-9]", BUS=="scsi", 	SYMLINK+="tape tape-%k", MODE="0660"
220
221# Section for zaptel device
222KERNEL=="zapctl",     		NAME="zap/ctl"
223KERNEL=="zaptimer",   		NAME="zap/timer"
224KERNEL=="zapchannel", 		NAME="zap/channel"
225KERNEL=="zappseudo",  		NAME="zap/pseudo"
226KERNEL=="zap[0-9]*",  		NAME="zap/%n"
227
228KERNEL=="pktcdvd", NAME="%k/control"
229
230
231KERNEL=="hd*[!0-9]", ATTR{removable}=="1", \
232	ATTR{media}=="floppy", \
233	SYMLINK+="floppy floppy-%k", OPTIONS+="ignore_remove, all_partitions"
234KERNEL=="hd*[0-9]", ATTRS{media}=="floppy", ATTRS{removable}=="1", SYMLINK+="floppy-%k"
235
236KERNEL=="hd[a-z]", BUS=="ide", ATTRS{removable}=="1", ATTRS{media}=="cdrom", SYMLINK+="cdrom cdrom-%k"
237
238KERNEL=="hd[a-z]", BUS=="ide", ATTRS{removable}=="1", PROGRAM=="check-cdrom.sh %k DVD", SYMLINK+="dvd dvd-%k"
239KERNEL=="sr[0-9]*", BUS=="scsi", PROGRAM=="check-cdrom.sh %k DVD", SYMLINK+="dvd dvd-%k"
240
241KERNEL=="hd[a-z]", BUS=="ide", ATTRS{removable}=="1", PROGRAM=="check-cdrom.sh %k CD-R", SYMLINK+="cdwriter cdwriter-%k cdrw cdrw-%k"
242KERNEL=="sr[0-9]*", BUS=="scsi", PROGRAM=="check-cdrom.sh %k CD-R", SYMLINK+="cdwriter cdwriter-%k cdrw cdrw-%k"
243
244KERNEL=="hd[a-z]", BUS=="ide", ATTRS{removable}=="1", PROGRAM="check-cdrom.sh %k DVD-R", SYMLINK+="dvdwriter dvdwriter-%k dvdrw dvdrw-%k"
245KERNEL=="sr[0-9]*", BUS=="scsi", PROGRAM=="check-cdrom.sh %k DVD-R", SYMLINK+="dvdwriter dvdwriter-%k dvdrw dvdrw-%k"
246
247# rename sr* to scd*
248KERNEL=="sr[0-9]*", BUS=="scsi", NAME="scd%n"
249KERNEL=="hd*[0-9]", BUS=="ide", ATTRS{removable}=="1", \
250	OPTIONS+="ignore_remove"
251
252
253
254#######################################
255# Persistent block device stuff - begin
256#######################################
257# persistent disk links: /dev/disk/{by-id,by-uuid,by-label,by-path}
258# scheme based on "Linux persistent device names", 2004, Hannes Reinecke <hare@suse.de>
259
260ACTION!="add", GOTO="persistent_end"
261SUBSYSTEM!="block", GOTO="persistent_end"
262
263# skip rules for inappropriate block devices
264KERNEL=="ram*|loop*|fd*|nbd*|gnbd*", GOTO="persistent_end"
265
266# never access removable ide devices, the drivers are causing event loops on open()
267KERNEL=="hd*[!0-9]", ATTR{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_end"
268KERNEL=="hd*[0-9]", ATTRS{removable}=="1", GOTO="persistent_end"
269
270# by-id (hardware serial number)
271KERNEL=="hd*[!0-9]", IMPORT{program}="/lib/udev/ata_id --export $tempnode"
272KERNEL=="hd*[!0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL}"
273KERNEL=="hd*[0-9]", IMPORT{parent}=="ID_*", SYMLINK+="disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL}-part%n"
274
275KERNEL=="sd*[!0-9]|sr*", ATTRS{ieee1394_id}=="*", ENV{ID_SERIAL}="$attr{ieee1394_id}", ENV{ID_BUS}="ieee1394"
276KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/usb_id -x"
277KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/scsi_id -g -x -s %p -d $tempnode"
278KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/scsi_id -g -x -a -s %p -d $tempnode"
279KERNEL=="sd*[!0-9]|sr*|dasd*[!0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
280
281# for partitions import parent information
282KERNEL=="sd*[0-9]|dasd*[0-9]", IMPORT{parent}=="ID_*"
283KERNEL=="sd*[0-9]|dasd*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
284
285# by-path (shortest physical path)
286KERNEL=="*[!0-9]|sr*", ENV{ID_TYPE}=="?*", IMPORT{program}="/lib/udev/path_id %p", SYMLINK+="disk/by-path/$env{ID_PATH}"
287KERNEL=="sr*", GOTO="persistent_end"
288KERNEL=="*[0-9]", IMPORT{parent}=="ID_*"
289KERNEL=="*[0-9]", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n"
290
291# by-label/by-uuid (filesystem properties)
292KERNEL=="*[!0-9]", ATTRS{removable}=="1", GOTO="persistent_end"
293IMPORT{program}="/lib/udev/vol_id --export $tempnode"
294ENV{ID_FS_UUID}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID}"
295ENV{ID_FS_LABEL_SAFE}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_SAFE}"
296
297# BIOS Enhanced Disk Device
298KERNEL=="*[!0-9]", IMPORT{program}="/lib/udev/edd_id --export $tempnode"
299KERNEL=="*[!0-9]", ENV{ID_EDD}=="?*", SYMLINK+="disk/by-id/edd-$env{ID_EDD}"
300KERNEL=="*[0-9]", ENV{ID_EDD}=="?*", SYMLINK+="disk/by-id/edd-$env{ID_EDD}-part%n"
301
302LABEL="persistent_end"
303
304#####################################
305# Persistent block device stuff - end
306#####################################
307
308
309ACTION=="add", SUBSYSTEM=="usb_device", \
310	PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", \
311	NAME="%c", MODE="0644"
312
313
314# sd:           0 TYPE_DISK, 7 TYPE_MOD, 14 TYPE_RBC
315# sr:           4 TYPE_WORM, 5 TYPE_ROM
316# st/osst:      1 TYPE_TAPE
317# sg: 		8 changer, [36] scanner
318ACTION=="add", SUBSYSTEM=="scsi" , ATTRS{type}=="0|7|14", \
319	RUN+="/bin/sh -c 'echo 60 > /sys$$DEVPATH/timeout'"
320ACTION=="add", SUBSYSTEM=="scsi" , ATTRS{type}=="1", \
321	RUN+="/bin/sh -c 'echo 900 > /sys$$DEVPATH/timeout'"
322
323
324ACTION=="add", SUBSYSTEM=="scsi_device"	RUN+="modprobe sg"
325ACTION=="add", SUBSYSTEM=="scsi_device", ATTRS{type}=="0|7|14", \
326	RUN+="modprobe sd_mod"
327ACTION=="add", SUBSYSTEM=="scsi_device", ATTRS{type}=="[45]", \
328	RUN+="modprobe sr_mod"
329
330ACTION=="add", KERNEL=="sg[0-9]*", BUS=="scsi", ATTRS{type}=="[36]", \
331	SYMLINK+="scanner scanner-%k", MODE="0660"
332
333ACTION=="add", KERNEL=="sg[0-9]*", BUS=="scsi", ATTRS{type}=="8", \
334	SYMLINK+="changer changer-%k", MODE="0660", GROUP="disk"
335
336ACTION=="add", SUBSYSTEM=="scsi_device", ATTRS{type}=="1", ATTRS{vendor}=="On[sS]tream", \
337	ATTRS{model}!="ADR*", RUN+="modprobe osst"
338ACTION=="add", SUBSYSTEM=="scsi_device", ATTRS{type}=="1", ATTRS{vendor}=="On[sS]tream", \
339	ATTRS{model}=="ADR*", RUN+="modprobe st"
340ACTION=="add", SUBSYSTEM=="scsi_device", ATTRS{type}=="1", ATTRS{vendor}!="On[sS]tream", \
341	RUN+="modprobe st"
342
343# mmc block devices
344ACTION=="add", SUBSYSTEM=="mmc", RUN+="modprobe mmc_block"
345
346
347RUN+="socket:/org/kernel/udev/monitor"
348