[Bug 1214915] [NEW] udev doesnt execute setfacl -b %N on boot

ladiko 1214915 at bugs.launchpad.net
Wed Aug 21 14:00:28 UTC 2013


Public bug reported:

I want to remove the acls from /dev/video[0-9]* which are set by
/lib/udev/rules.d/70-udev-acl.rules.

So i created a file /etc/udev/rules.d/98_MyWebcam.rules which executes
"/bin/setfacl -b $env{DEVNAME}" when the video devices are detected.
Unfortunately this only works if i plug the device during runtime but
not when the system starts.

i set the log level in /etc/udev/udev.conf to "debug" and see that:
ladiko at machine:~$ grep "setfacl.*video1" /var/log/syslog
* boot
Aug 21 15:36:02 machine udevd[1145]: starting '/bin/setfacl -b /dev/video1'
Aug 21 15:36:02 machine udevd[1176]: starting '/bin/setfacl -b /dev/video1'
* manual unplug and replug when the machine is up and running:
Aug 21 15:44:16 machine udevd[4859]: starting '/bin/setfacl -b /dev/video1'
Aug 21 15:44:16 machine udevd[4841]: '/bin/setfacl -b /dev/video1' [4859] exit with return code 0
Aug 21 15:44:16 machine udevd[4860]: starting '/bin/setfacl -b /dev/video1'
Aug 21 15:44:16 machine udevd[4841]: '/bin/setfacl -b /dev/video1' [4860] exit with return code 0

Here is a little further testing and output:

Using username "ladiko".
ladiko at 192.168.1.2's password:
Welcome to Ubuntu 12.04.2 LTS (GNU/Linux 3.2.0-52-generic-pae i686)

 * Documentation:  https://help.ubuntu.com/

0 packages can be updated.
0 updates are security updates.

Last login: Wed Aug 21 15:17:55 2013 from 192.168.1.3
ladiko at machine:~$ dpkg-query -W udev
udev    175-0ubuntu9.4
ladiko at machine:~$ uname -a
Linux machine 3.2.0-52-generic-pae #78-Ubuntu SMP Fri Jul 26 16:43:19 UTC 2013 i686 i686 i386 GNU/Linux

ladiko at machine:~$ cat /etc/udev/rules.d/98_MyWebcam.rules
KERNEL=="video[0-9]*", SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", SYMLINK+="MY%k", OWNER="root", GROUP="root", MODE="0600", RUN+="/bin/setfacl -b %N"
KERNEL=="video[0-9]*", SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", SYMLINK+="MY%k", OWNER="root", GROUP="root", MODE="0600", RUN+="/bin/setfacl -b $env{DEVNAME}"

ladiko at machine:~$ ls -la /dev/video*
crw-rw----+ 1 root root 81, 0 Aug 21 15:36 /dev/video0
crw-rw----+ 1 root root 81, 1 Aug 21 15:36 /dev/video1
crw-rw----+ 1 root root 81, 2 Aug 21 15:36 /dev/video2
crw-rw----+ 1 root root 81, 3 Aug 21 15:36 /dev/video3
ladiko at machine:~$ getfacl /dev/video*
getfacl: Removing leading '/' from absolute path names
# file: dev/video0
# owner: root
# group: root
user::rw-
user:ladiko:rw-
group::---
mask::rw-
other::---

# file: dev/video1
# owner: root
# group: root
user::rw-
user:ladiko:rw-
group::---
mask::rw-
other::---

# file: dev/video2
# owner: root
# group: root
user::rw-
user:ladiko:rw-
group::---
mask::rw-
other::---

# file: dev/video3
# owner: root
# group: root
user::rw-
user:ladiko:rw-
group::---
mask::rw-
other::---

ladiko at machine:~$ sudo udevadm test --action=add $(udevadm info -q path -n /dev/video1)
custom logging function 0xb7f86008 registered
selinux=0
runtime dir '/run/udev'
calling: info
device 0xb7f86318 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/video4linux/video1'
custom logging function 0xb932d008 registered
selinux=0
runtime dir '/run/udev'
run_command: calling: test
adm_test: version 175
This program is for debugging only, it does not run any program,
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

parse_file: reading '/lib/udev/rules.d/40-crda.rules' as rules file
parse_file: reading '/lib/udev/rules.d/40-fuse.rules' as rules file
parse_file: reading '/lib/udev/rules.d/40-gnupg.rules' as rules file
parse_file: reading '/lib/udev/rules.d/40-ia64.rules' as rules file
parse_file: reading '/lib/udev/rules.d/40-libgphoto2-2.rules' as rules file
parse_file: reading '/lib/udev/rules.d/40-libsane.rules' as rules file
parse_file: reading '/lib/udev/rules.d/40-ppc.rules' as rules file
parse_file: reading '/lib/udev/rules.d/40-usb_modeswitch.rules' as rules file
parse_file: reading '/lib/udev/rules.d/40-xserver-xorg-video-intel.rules' as rules file
parse_file: reading '/etc/udev/rules.d/40_bill.rules' as rules file
parse_file: reading '/etc/udev/rules.d/40_coin.rules' as rules file
parse_file: reading '/etc/udev/rules.d/40_video.rules' as rules file
parse_file: reading '/etc/udev/rules.d/40_watchdog.rules' as rules file
parse_file: reading '/lib/udev/rules.d/42-qemu-usb.rules' as rules file
parse_file: reading '/lib/udev/rules.d/50-firmware.rules' as rules file
parse_file: reading '/lib/udev/rules.d/50-udev-default.rules' as rules file
parse_file: reading '/lib/udev/rules.d/55-dm.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-cdrom_id.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-alsa.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-input.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-serial.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-storage-dm.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-storage-tape.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-storage.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-v4l.rules' as rules file
parse_file: reading '/lib/udev/rules.d/61-accelerometer.rules' as rules file
parse_file: reading '/lib/udev/rules.d/64-xorg-xkb.rules' as rules file
parse_file: reading '/lib/udev/rules.d/66-xorg-synaptics-quirks.rules' as rules file
parse_file: reading '/lib/udev/rules.d/69-cd-sensors.rules' as rules file
add_rule: IMPORT found builtin 'usb_id', replacing /lib/udev/rules.d/69-cd-sensors.rules:76
parse_file: reading '/etc/udev/rules.d/69-touchscreen.rules' as rules file
parse_file: reading '/lib/udev/rules.d/69-xorg-vmmouse.rules' as rules file
parse_file: reading '/lib/udev/rules.d/69-xserver-xorg-input-wacom.rules' as rules file
parse_file: reading '/etc/udev/rules.d/70-persistent-cd.rules' as rules file
parse_file: reading '/etc/udev/rules.d/70-persistent-net.rules' as rules file
parse_file: reading '/lib/udev/rules.d/70-udev-acl.rules' as rules file
parse_file: reading '/etc/udev/rules.d/70_cc_update-device.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-cd-aliases-generator.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-net-description.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-persistent-net-generator.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-probe_mtd.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-tty-description.rules' as rules file
parse_file: reading '/lib/udev/rules.d/77-mm-ericsson-mbm.rules' as rules file
parse_file: reading '/lib/udev/rules.d/77-mm-longcheer-port-types.rules' as rules file
parse_file: reading '/lib/udev/rules.d/77-mm-nokia-port-types.rules' as rules file
parse_file: reading '/lib/udev/rules.d/77-mm-pcmcia-device-blacklist.rules' as rules file
parse_file: reading '/lib/udev/rules.d/77-mm-platform-serial-whitelist.rules' as rules file
parse_file: reading '/lib/udev/rules.d/77-mm-qdl-device-blacklist.rules' as rules file
parse_file: reading '/lib/udev/rules.d/77-mm-simtech-port-types.rules' as rules file
parse_file: reading '/lib/udev/rules.d/77-mm-usb-device-blacklist.rules' as rules file
parse_file: reading '/lib/udev/rules.d/77-mm-x22x-port-types.rules' as rules file
parse_file: reading '/lib/udev/rules.d/77-mm-zte-port-types.rules' as rules file
parse_file: reading '/lib/udev/rules.d/77-nm-olpc-mesh.rules' as rules file
parse_file: reading '/lib/udev/rules.d/78-graphics-card.rules' as rules file
parse_file: reading '/lib/udev/rules.d/78-sound-card.rules' as rules file
parse_file: reading '/lib/udev/rules.d/80-drivers.rules' as rules file
parse_file: reading '/lib/udev/rules.d/80-mm-candidate.rules' as rules file
parse_file: reading '/lib/udev/rules.d/80-udisks.rules' as rules file
parse_file: reading '/lib/udev/rules.d/85-hdparm.rules' as rules file
parse_file: reading '/lib/udev/rules.d/85-keyboard-configuration.rules' as rules file
parse_file: reading '/lib/udev/rules.d/85-regulatory.rules' as rules file
parse_file: reading '/lib/udev/rules.d/85-usbmuxd.rules' as rules file
parse_file: reading '/lib/udev/rules.d/90-alsa-restore.rules' as rules file
parse_file: reading '/lib/udev/rules.d/90-alsa-ucm.rules' as rules file
parse_file: reading '/lib/udev/rules.d/90-pulseaudio.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-cd-devices.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-keyboard-force-release.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-keymap.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-udev-late.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-upower-battery-recall-dell.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-upower-battery-recall-fujitsu.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-upower-battery-recall-gateway.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-upower-battery-recall-ibm.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-upower-battery-recall-lenovo.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-upower-battery-recall-toshiba.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-upower-csr.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-upower-hid.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-upower-wup.rules' as rules file
parse_file: reading '/etc/udev/rules.d/98_MyWebcam.rules' as rules file
udev_rules_new: rules use 211932 bytes tokens (17661 * 12 bytes), 36672 bytes buffer
udev_rules_new: temporary index used 65060 bytes (3253 * 20 bytes)
udev_device_new_from_syspath: device 0xb933dc48 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/video4linux/video1'
udev_device_new_from_syspath: device 0xb932d520 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/video4linux/video1'
udev_device_read_db: device 0xb932d520 filled with db file data
udev_device_new_from_syspath: device 0xb932dbe8 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0'
udev_device_new_from_syspath: device 0xb932e950 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1'
udev_device_new_from_syspath: device 0xb932ecc8 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2'
udev_device_new_from_syspath: device 0xb932f030 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1'
udev_device_new_from_syspath: device 0xb932f390 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1'
udev_device_new_from_syspath: device 0xb932f928 has devpath '/devices/pci0000:00/0000:00:1a.0'
udev_device_new_from_syspath: device 0xb932fc80 has devpath '/devices/pci0000:00'
udev_rules_apply_to_event: GROUP 44 /lib/udev/rules.d/50-udev-default.rules:29
udev_rules_apply_to_event: IMPORT 'v4l_id /dev/video1' /lib/udev/rules.d/60-persistent-v4l.rules:7
udev_event_spawn: starting 'v4l_id /dev/video1'
spawn_read: 'v4l_id /dev/video1'(out) 'ID_V4L_VERSION=2'
spawn_read: 'v4l_id /dev/video1'(out) 'ID_V4L_PRODUCT=Vega USB 2.0 Camera.'
spawn_read: 'v4l_id /dev/video1'(out) 'ID_V4L_CAPABILITIES=:capture:'
spawn_wait: 'v4l_id /dev/video1' [4401] exit with return code 0
udev_rules_apply_to_event: IMPORT builtin 'usb_id' /lib/udev/rules.d/60-persistent-v4l.rules:9
builtin_usb_id: /sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0: if_class 14 protocol 0
udev_builtin_add_property: ID_VENDOR=Vimicro_Corp.
udev_builtin_add_property: ID_VENDOR_ENC=Vimicro\x20Corp.
udev_builtin_add_property: ID_VENDOR_ID=0ac8
udev_builtin_add_property: ID_MODEL=Vega_USB_2.0_Camera.
udev_builtin_add_property: ID_MODEL_ENC=Vega\x20USB\x202.0\x20Camera.
udev_builtin_add_property: ID_MODEL_ID=332d
udev_builtin_add_property: ID_REVISION=0100
udev_builtin_add_property: ID_SERIAL=Vimicro_Corp._Vega_USB_2.0_Camera.
udev_builtin_add_property: ID_TYPE=video
udev_builtin_add_property: ID_BUS=usb
udev_builtin_add_property: ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
udev_builtin_add_property: ID_USB_INTERFACE_NUM=00
udev_builtin_add_property: ID_USB_DRIVER=uvcvideo
udev_rules_apply_to_event: LINK 'v4l/by-id/usb-Vimicro_Corp._Vega_USB_2.0_Camera.-video-index0' /lib/udev/rules.d/60-persistent-v4l.rules:10
udev_rules_apply_to_event: IMPORT builtin 'path_id' /lib/udev/rules.d/60-persistent-v4l.rules:16
udev_builtin_add_property: ID_PATH=pci-0000:00:1a.0-usb-0:1.2.1:1.0
udev_builtin_add_property: ID_PATH_TAG=pci-0000_00_1a_0-usb-0_1_2_1_1_0
udev_rules_apply_to_event: LINK 'v4l/by-path/pci-0000:00:1a.0-usb-0:1.2.1:1.0-video-index0' /lib/udev/rules.d/60-persistent-v4l.rules:17
udev_rules_apply_to_event: RUN 'udev-acl --action=$env{ACTION} --device=$env{DEVNAME}' /lib/udev/rules.d/70-udev-acl.rules:74
udev_rules_apply_to_event: OWNER 0 /etc/udev/rules.d/98_MyWebcam.rules:1
udev_rules_apply_to_event: GROUP 0 /etc/udev/rules.d/98_MyWebcam.rules:1
udev_rules_apply_to_event: MODE 0600 /etc/udev/rules.d/98_MyWebcam.rules:1
udev_rules_apply_to_event: LINK 'MYvideo1' /etc/udev/rules.d/98_MyWebcam.rules:1
udev_rules_apply_to_event: RUN '/bin/setfacl -b %N' /etc/udev/rules.d/98_MyWebcam.rules:1
udev_rules_apply_to_event: OWNER 0 /etc/udev/rules.d/98_MyWebcam.rules:2
udev_rules_apply_to_event: GROUP 0 /etc/udev/rules.d/98_MyWebcam.rules:2
udev_rules_apply_to_event: MODE 0600 /etc/udev/rules.d/98_MyWebcam.rules:2
udev_rules_apply_to_event: LINK 'MYvideo1' /etc/udev/rules.d/98_MyWebcam.rules:2
udev_rules_apply_to_event: RUN '/bin/setfacl -b $env{DEVNAME}' /etc/udev/rules.d/98_MyWebcam.rules:2
udev_event_execute_rules: no node name set, will use kernel supplied name 'video1'
udev_node_update_old_links: update old name, '/dev/CC_TV3' no longer belonging to '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/video4linux/video1'
link_update: no reference left, remove '/dev/CC_TV3'
udev_node_add: creating device node '/dev/video1', devnum=81:1, mode=0600, uid=0, gid=0
udev_node_mknod: preserve file '/dev/video1', because it has correct dev_t
udev_node_mknod: preserve permissions /dev/video1, 020600, uid=0, gid=0
node_symlink: preserve already existing symlink '/dev/char/81:1' to '../video1'
link_find_prioritized: found 'c81:1' claiming '/run/udev/links/MYvideo1'
link_update: creating link '/dev/MYvideo1' to '/dev/video1'
node_symlink: preserve already existing symlink '/dev/MYvideo1' to 'video1'
link_find_prioritized: found 'c81:1' claiming '/run/udev/links/v4l\x2fby-id\x2fusb-Vimicro_Corp._Vega_USB_2.0_Camera.-video-index0'
link_update: creating link '/dev/v4l/by-id/usb-Vimicro_Corp._Vega_USB_2.0_Camera.-video-index0' to '/dev/video1'
node_symlink: preserve already existing symlink '/dev/v4l/by-id/usb-Vimicro_Corp._Vega_USB_2.0_Camera.-video-index0' to '../../video1'
link_find_prioritized: found 'c81:1' claiming '/run/udev/links/v4l\x2fby-path\x2fpci-0000:00:1a.0-usb-0:1.2.1:1.0-video-index0'
link_update: creating link '/dev/v4l/by-path/pci-0000:00:1a.0-usb-0:1.2.1:1.0-video-index0' to '/dev/video1'
node_symlink: preserve already existing symlink '/dev/v4l/by-path/pci-0000:00:1a.0-usb-0:1.2.1:1.0-video-index0' to '../../video1'
udev_device_update_db: created db file '/run/udev/data/c81:1' for '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/video4linux/video1'
ACTION=add
COLORD_DEVICE=1
COLORD_KIND=camera
DEVLINKS=/dev/MYvideo1 /dev/v4l/by-id/usb-Vimicro_Corp._Vega_USB_2.0_Camera.-video-index0 /dev/v4l/by-path/pci-0000:00:1a.0-usb-0:1.2.1:1.0-video-index0
DEVNAME=/dev/video1
DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/video4linux/video1
ID_BUS=usb
ID_MODEL=Vega_USB_2.0_Camera.
ID_MODEL_ENC=Vega\x20USB\x202.0\x20Camera.
ID_MODEL_ID=332d
ID_PATH=pci-0000:00:1a.0-usb-0:1.2.1:1.0
ID_PATH_TAG=pci-0000_00_1a_0-usb-0_1_2_1_1_0
ID_REVISION=0100
ID_SERIAL=Vimicro_Corp._Vega_USB_2.0_Camera.
ID_TYPE=video
ID_USB_DRIVER=uvcvideo
ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
ID_USB_INTERFACE_NUM=00
ID_V4L_CAPABILITIES=:capture:
ID_V4L_PRODUCT=Vega USB 2.0 Camera.
ID_V4L_VERSION=2
ID_VENDOR=Vimicro_Corp.
ID_VENDOR_ENC=Vimicro\x20Corp.
ID_VENDOR_ID=0ac8
MAJOR=81
MINOR=1
SUBSYSTEM=video4linux
TAGS=:udev-acl:
UDEV_LOG=7
USEC_INITIALIZED=4745996
run: 'udev-acl --action=add --device=/dev/video1'
run: '/bin/setfacl -b /dev/video1'
run: '/bin/setfacl -b /dev/video1'
ladiko at machine:~$ ls -la /dev/*vid*
lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo0 -> video0
lrwxrwxrwx  1 root root     6 Aug 21 15:39 /dev/MYvideo1 -> video1
lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo2 -> video2
lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo3 -> video3
crw-rw----+ 1 root root 81, 0 Aug 21 15:36 /dev/video0
crw-rw----+ 1 root root 81, 1 Aug 21 15:39 /dev/video1
crw-rw----+ 1 root root 81, 2 Aug 21 15:36 /dev/video2
crw-rw----+ 1 root root 81, 3 Aug 21 15:36 /dev/video3
* unplugged one of the cameras *
ladiko at machine:~$ ls -la /dev/*vid*
lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo0 -> video0
lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo2 -> video2
lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo3 -> video3
crw-rw----+ 1 root root 81, 0 Aug 21 15:36 /dev/video0
crw-rw----+ 1 root root 81, 2 Aug 21 15:36 /dev/video2
crw-rw----+ 1 root root 81, 3 Aug 21 15:36 /dev/video3
* replugged one of the cameras *
ladiko at machine:~$ ls -la /dev/*vid*
lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo0 -> video0
lrwxrwxrwx  1 root root     6 Aug 21 15:44 /dev/MYvideo1 -> video1
lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo2 -> video2
lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo3 -> video3
crw-rw----+ 1 root root 81, 0 Aug 21 15:36 /dev/video0
crw-------  1 root root 81, 1 Aug 21 15:44 /dev/video1
crw-rw----+ 1 root root 81, 2 Aug 21 15:36 /dev/video2
crw-rw----+ 1 root root 81, 3 Aug 21 15:36 /dev/video3
ladiko at machine:~$ getfacl /dev/video1
getfacl: Removing leading '/' from absolute path names
# file: dev/video1
# owner: root
# group: root
user::rw-
group::---
other::---
ladiko at machine:~$

** Affects: udev (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: acl setfacl udev usb

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to udev in Ubuntu.
https://bugs.launchpad.net/bugs/1214915

Title:
  udev doesnt execute setfacl -b %N on boot

Status in “udev” package in Ubuntu:
  New

Bug description:
  I want to remove the acls from /dev/video[0-9]* which are set by
  /lib/udev/rules.d/70-udev-acl.rules.

  So i created a file /etc/udev/rules.d/98_MyWebcam.rules which executes
  "/bin/setfacl -b $env{DEVNAME}" when the video devices are detected.
  Unfortunately this only works if i plug the device during runtime but
  not when the system starts.

  i set the log level in /etc/udev/udev.conf to "debug" and see that:
  ladiko at machine:~$ grep "setfacl.*video1" /var/log/syslog
  * boot
  Aug 21 15:36:02 machine udevd[1145]: starting '/bin/setfacl -b /dev/video1'
  Aug 21 15:36:02 machine udevd[1176]: starting '/bin/setfacl -b /dev/video1'
  * manual unplug and replug when the machine is up and running:
  Aug 21 15:44:16 machine udevd[4859]: starting '/bin/setfacl -b /dev/video1'
  Aug 21 15:44:16 machine udevd[4841]: '/bin/setfacl -b /dev/video1' [4859] exit with return code 0
  Aug 21 15:44:16 machine udevd[4860]: starting '/bin/setfacl -b /dev/video1'
  Aug 21 15:44:16 machine udevd[4841]: '/bin/setfacl -b /dev/video1' [4860] exit with return code 0

  Here is a little further testing and output:

  Using username "ladiko".
  ladiko at 192.168.1.2's password:
  Welcome to Ubuntu 12.04.2 LTS (GNU/Linux 3.2.0-52-generic-pae i686)

   * Documentation:  https://help.ubuntu.com/

  0 packages can be updated.
  0 updates are security updates.

  Last login: Wed Aug 21 15:17:55 2013 from 192.168.1.3
  ladiko at machine:~$ dpkg-query -W udev
  udev    175-0ubuntu9.4
  ladiko at machine:~$ uname -a
  Linux machine 3.2.0-52-generic-pae #78-Ubuntu SMP Fri Jul 26 16:43:19 UTC 2013 i686 i686 i386 GNU/Linux

  ladiko at machine:~$ cat /etc/udev/rules.d/98_MyWebcam.rules
  KERNEL=="video[0-9]*", SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", SYMLINK+="MY%k", OWNER="root", GROUP="root", MODE="0600", RUN+="/bin/setfacl -b %N"
  KERNEL=="video[0-9]*", SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", SYMLINK+="MY%k", OWNER="root", GROUP="root", MODE="0600", RUN+="/bin/setfacl -b $env{DEVNAME}"

  ladiko at machine:~$ ls -la /dev/video*
  crw-rw----+ 1 root root 81, 0 Aug 21 15:36 /dev/video0
  crw-rw----+ 1 root root 81, 1 Aug 21 15:36 /dev/video1
  crw-rw----+ 1 root root 81, 2 Aug 21 15:36 /dev/video2
  crw-rw----+ 1 root root 81, 3 Aug 21 15:36 /dev/video3
  ladiko at machine:~$ getfacl /dev/video*
  getfacl: Removing leading '/' from absolute path names
  # file: dev/video0
  # owner: root
  # group: root
  user::rw-
  user:ladiko:rw-
  group::---
  mask::rw-
  other::---

  # file: dev/video1
  # owner: root
  # group: root
  user::rw-
  user:ladiko:rw-
  group::---
  mask::rw-
  other::---

  # file: dev/video2
  # owner: root
  # group: root
  user::rw-
  user:ladiko:rw-
  group::---
  mask::rw-
  other::---

  # file: dev/video3
  # owner: root
  # group: root
  user::rw-
  user:ladiko:rw-
  group::---
  mask::rw-
  other::---

  ladiko at machine:~$ sudo udevadm test --action=add $(udevadm info -q path -n /dev/video1)
  custom logging function 0xb7f86008 registered
  selinux=0
  runtime dir '/run/udev'
  calling: info
  device 0xb7f86318 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/video4linux/video1'
  custom logging function 0xb932d008 registered
  selinux=0
  runtime dir '/run/udev'
  run_command: calling: test
  adm_test: version 175
  This program is for debugging only, it does not run any program,
  specified by a RUN key. It may show incorrect results, because
  some values may be different, or not available at a simulation run.

  parse_file: reading '/lib/udev/rules.d/40-crda.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/40-fuse.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/40-gnupg.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/40-ia64.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/40-libgphoto2-2.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/40-libsane.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/40-ppc.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/40-usb_modeswitch.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/40-xserver-xorg-video-intel.rules' as rules file
  parse_file: reading '/etc/udev/rules.d/40_bill.rules' as rules file
  parse_file: reading '/etc/udev/rules.d/40_coin.rules' as rules file
  parse_file: reading '/etc/udev/rules.d/40_video.rules' as rules file
  parse_file: reading '/etc/udev/rules.d/40_watchdog.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/42-qemu-usb.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/50-firmware.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/50-udev-default.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/55-dm.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/60-cdrom_id.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/60-persistent-alsa.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/60-persistent-input.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/60-persistent-serial.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/60-persistent-storage-dm.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/60-persistent-storage-tape.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/60-persistent-storage.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/60-persistent-v4l.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/61-accelerometer.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/64-xorg-xkb.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/66-xorg-synaptics-quirks.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/69-cd-sensors.rules' as rules file
  add_rule: IMPORT found builtin 'usb_id', replacing /lib/udev/rules.d/69-cd-sensors.rules:76
  parse_file: reading '/etc/udev/rules.d/69-touchscreen.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/69-xorg-vmmouse.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/69-xserver-xorg-input-wacom.rules' as rules file
  parse_file: reading '/etc/udev/rules.d/70-persistent-cd.rules' as rules file
  parse_file: reading '/etc/udev/rules.d/70-persistent-net.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/70-udev-acl.rules' as rules file
  parse_file: reading '/etc/udev/rules.d/70_cc_update-device.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/75-cd-aliases-generator.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/75-net-description.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/75-persistent-net-generator.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/75-probe_mtd.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/75-tty-description.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/77-mm-ericsson-mbm.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/77-mm-longcheer-port-types.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/77-mm-nokia-port-types.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/77-mm-pcmcia-device-blacklist.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/77-mm-platform-serial-whitelist.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/77-mm-qdl-device-blacklist.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/77-mm-simtech-port-types.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/77-mm-usb-device-blacklist.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/77-mm-x22x-port-types.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/77-mm-zte-port-types.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/77-nm-olpc-mesh.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/78-graphics-card.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/78-sound-card.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/80-drivers.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/80-mm-candidate.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/80-udisks.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/85-hdparm.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/85-keyboard-configuration.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/85-regulatory.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/85-usbmuxd.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/90-alsa-restore.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/90-alsa-ucm.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/90-pulseaudio.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-cd-devices.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-keyboard-force-release.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-keymap.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-udev-late.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-upower-battery-recall-dell.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-upower-battery-recall-fujitsu.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-upower-battery-recall-gateway.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-upower-battery-recall-ibm.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-upower-battery-recall-lenovo.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-upower-battery-recall-toshiba.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-upower-csr.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-upower-hid.rules' as rules file
  parse_file: reading '/lib/udev/rules.d/95-upower-wup.rules' as rules file
  parse_file: reading '/etc/udev/rules.d/98_MyWebcam.rules' as rules file
  udev_rules_new: rules use 211932 bytes tokens (17661 * 12 bytes), 36672 bytes buffer
  udev_rules_new: temporary index used 65060 bytes (3253 * 20 bytes)
  udev_device_new_from_syspath: device 0xb933dc48 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/video4linux/video1'
  udev_device_new_from_syspath: device 0xb932d520 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/video4linux/video1'
  udev_device_read_db: device 0xb932d520 filled with db file data
  udev_device_new_from_syspath: device 0xb932dbe8 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0'
  udev_device_new_from_syspath: device 0xb932e950 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1'
  udev_device_new_from_syspath: device 0xb932ecc8 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2'
  udev_device_new_from_syspath: device 0xb932f030 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1/1-1'
  udev_device_new_from_syspath: device 0xb932f390 has devpath '/devices/pci0000:00/0000:00:1a.0/usb1'
  udev_device_new_from_syspath: device 0xb932f928 has devpath '/devices/pci0000:00/0000:00:1a.0'
  udev_device_new_from_syspath: device 0xb932fc80 has devpath '/devices/pci0000:00'
  udev_rules_apply_to_event: GROUP 44 /lib/udev/rules.d/50-udev-default.rules:29
  udev_rules_apply_to_event: IMPORT 'v4l_id /dev/video1' /lib/udev/rules.d/60-persistent-v4l.rules:7
  udev_event_spawn: starting 'v4l_id /dev/video1'
  spawn_read: 'v4l_id /dev/video1'(out) 'ID_V4L_VERSION=2'
  spawn_read: 'v4l_id /dev/video1'(out) 'ID_V4L_PRODUCT=Vega USB 2.0 Camera.'
  spawn_read: 'v4l_id /dev/video1'(out) 'ID_V4L_CAPABILITIES=:capture:'
  spawn_wait: 'v4l_id /dev/video1' [4401] exit with return code 0
  udev_rules_apply_to_event: IMPORT builtin 'usb_id' /lib/udev/rules.d/60-persistent-v4l.rules:9
  builtin_usb_id: /sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0: if_class 14 protocol 0
  udev_builtin_add_property: ID_VENDOR=Vimicro_Corp.
  udev_builtin_add_property: ID_VENDOR_ENC=Vimicro\x20Corp.
  udev_builtin_add_property: ID_VENDOR_ID=0ac8
  udev_builtin_add_property: ID_MODEL=Vega_USB_2.0_Camera.
  udev_builtin_add_property: ID_MODEL_ENC=Vega\x20USB\x202.0\x20Camera.
  udev_builtin_add_property: ID_MODEL_ID=332d
  udev_builtin_add_property: ID_REVISION=0100
  udev_builtin_add_property: ID_SERIAL=Vimicro_Corp._Vega_USB_2.0_Camera.
  udev_builtin_add_property: ID_TYPE=video
  udev_builtin_add_property: ID_BUS=usb
  udev_builtin_add_property: ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
  udev_builtin_add_property: ID_USB_INTERFACE_NUM=00
  udev_builtin_add_property: ID_USB_DRIVER=uvcvideo
  udev_rules_apply_to_event: LINK 'v4l/by-id/usb-Vimicro_Corp._Vega_USB_2.0_Camera.-video-index0' /lib/udev/rules.d/60-persistent-v4l.rules:10
  udev_rules_apply_to_event: IMPORT builtin 'path_id' /lib/udev/rules.d/60-persistent-v4l.rules:16
  udev_builtin_add_property: ID_PATH=pci-0000:00:1a.0-usb-0:1.2.1:1.0
  udev_builtin_add_property: ID_PATH_TAG=pci-0000_00_1a_0-usb-0_1_2_1_1_0
  udev_rules_apply_to_event: LINK 'v4l/by-path/pci-0000:00:1a.0-usb-0:1.2.1:1.0-video-index0' /lib/udev/rules.d/60-persistent-v4l.rules:17
  udev_rules_apply_to_event: RUN 'udev-acl --action=$env{ACTION} --device=$env{DEVNAME}' /lib/udev/rules.d/70-udev-acl.rules:74
  udev_rules_apply_to_event: OWNER 0 /etc/udev/rules.d/98_MyWebcam.rules:1
  udev_rules_apply_to_event: GROUP 0 /etc/udev/rules.d/98_MyWebcam.rules:1
  udev_rules_apply_to_event: MODE 0600 /etc/udev/rules.d/98_MyWebcam.rules:1
  udev_rules_apply_to_event: LINK 'MYvideo1' /etc/udev/rules.d/98_MyWebcam.rules:1
  udev_rules_apply_to_event: RUN '/bin/setfacl -b %N' /etc/udev/rules.d/98_MyWebcam.rules:1
  udev_rules_apply_to_event: OWNER 0 /etc/udev/rules.d/98_MyWebcam.rules:2
  udev_rules_apply_to_event: GROUP 0 /etc/udev/rules.d/98_MyWebcam.rules:2
  udev_rules_apply_to_event: MODE 0600 /etc/udev/rules.d/98_MyWebcam.rules:2
  udev_rules_apply_to_event: LINK 'MYvideo1' /etc/udev/rules.d/98_MyWebcam.rules:2
  udev_rules_apply_to_event: RUN '/bin/setfacl -b $env{DEVNAME}' /etc/udev/rules.d/98_MyWebcam.rules:2
  udev_event_execute_rules: no node name set, will use kernel supplied name 'video1'
  udev_node_update_old_links: update old name, '/dev/CC_TV3' no longer belonging to '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/video4linux/video1'
  link_update: no reference left, remove '/dev/CC_TV3'
  udev_node_add: creating device node '/dev/video1', devnum=81:1, mode=0600, uid=0, gid=0
  udev_node_mknod: preserve file '/dev/video1', because it has correct dev_t
  udev_node_mknod: preserve permissions /dev/video1, 020600, uid=0, gid=0
  node_symlink: preserve already existing symlink '/dev/char/81:1' to '../video1'
  link_find_prioritized: found 'c81:1' claiming '/run/udev/links/MYvideo1'
  link_update: creating link '/dev/MYvideo1' to '/dev/video1'
  node_symlink: preserve already existing symlink '/dev/MYvideo1' to 'video1'
  link_find_prioritized: found 'c81:1' claiming '/run/udev/links/v4l\x2fby-id\x2fusb-Vimicro_Corp._Vega_USB_2.0_Camera.-video-index0'
  link_update: creating link '/dev/v4l/by-id/usb-Vimicro_Corp._Vega_USB_2.0_Camera.-video-index0' to '/dev/video1'
  node_symlink: preserve already existing symlink '/dev/v4l/by-id/usb-Vimicro_Corp._Vega_USB_2.0_Camera.-video-index0' to '../../video1'
  link_find_prioritized: found 'c81:1' claiming '/run/udev/links/v4l\x2fby-path\x2fpci-0000:00:1a.0-usb-0:1.2.1:1.0-video-index0'
  link_update: creating link '/dev/v4l/by-path/pci-0000:00:1a.0-usb-0:1.2.1:1.0-video-index0' to '/dev/video1'
  node_symlink: preserve already existing symlink '/dev/v4l/by-path/pci-0000:00:1a.0-usb-0:1.2.1:1.0-video-index0' to '../../video1'
  udev_device_update_db: created db file '/run/udev/data/c81:1' for '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/video4linux/video1'
  ACTION=add
  COLORD_DEVICE=1
  COLORD_KIND=camera
  DEVLINKS=/dev/MYvideo1 /dev/v4l/by-id/usb-Vimicro_Corp._Vega_USB_2.0_Camera.-video-index0 /dev/v4l/by-path/pci-0000:00:1a.0-usb-0:1.2.1:1.0-video-index0
  DEVNAME=/dev/video1
  DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/video4linux/video1
  ID_BUS=usb
  ID_MODEL=Vega_USB_2.0_Camera.
  ID_MODEL_ENC=Vega\x20USB\x202.0\x20Camera.
  ID_MODEL_ID=332d
  ID_PATH=pci-0000:00:1a.0-usb-0:1.2.1:1.0
  ID_PATH_TAG=pci-0000_00_1a_0-usb-0_1_2_1_1_0
  ID_REVISION=0100
  ID_SERIAL=Vimicro_Corp._Vega_USB_2.0_Camera.
  ID_TYPE=video
  ID_USB_DRIVER=uvcvideo
  ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
  ID_USB_INTERFACE_NUM=00
  ID_V4L_CAPABILITIES=:capture:
  ID_V4L_PRODUCT=Vega USB 2.0 Camera.
  ID_V4L_VERSION=2
  ID_VENDOR=Vimicro_Corp.
  ID_VENDOR_ENC=Vimicro\x20Corp.
  ID_VENDOR_ID=0ac8
  MAJOR=81
  MINOR=1
  SUBSYSTEM=video4linux
  TAGS=:udev-acl:
  UDEV_LOG=7
  USEC_INITIALIZED=4745996
  run: 'udev-acl --action=add --device=/dev/video1'
  run: '/bin/setfacl -b /dev/video1'
  run: '/bin/setfacl -b /dev/video1'
  ladiko at machine:~$ ls -la /dev/*vid*
  lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo0 -> video0
  lrwxrwxrwx  1 root root     6 Aug 21 15:39 /dev/MYvideo1 -> video1
  lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo2 -> video2
  lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo3 -> video3
  crw-rw----+ 1 root root 81, 0 Aug 21 15:36 /dev/video0
  crw-rw----+ 1 root root 81, 1 Aug 21 15:39 /dev/video1
  crw-rw----+ 1 root root 81, 2 Aug 21 15:36 /dev/video2
  crw-rw----+ 1 root root 81, 3 Aug 21 15:36 /dev/video3
  * unplugged one of the cameras *
  ladiko at machine:~$ ls -la /dev/*vid*
  lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo0 -> video0
  lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo2 -> video2
  lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo3 -> video3
  crw-rw----+ 1 root root 81, 0 Aug 21 15:36 /dev/video0
  crw-rw----+ 1 root root 81, 2 Aug 21 15:36 /dev/video2
  crw-rw----+ 1 root root 81, 3 Aug 21 15:36 /dev/video3
  * replugged one of the cameras *
  ladiko at machine:~$ ls -la /dev/*vid*
  lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo0 -> video0
  lrwxrwxrwx  1 root root     6 Aug 21 15:44 /dev/MYvideo1 -> video1
  lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo2 -> video2
  lrwxrwxrwx  1 root root     6 Aug 21 15:36 /dev/MYvideo3 -> video3
  crw-rw----+ 1 root root 81, 0 Aug 21 15:36 /dev/video0
  crw-------  1 root root 81, 1 Aug 21 15:44 /dev/video1
  crw-rw----+ 1 root root 81, 2 Aug 21 15:36 /dev/video2
  crw-rw----+ 1 root root 81, 3 Aug 21 15:36 /dev/video3
  ladiko at machine:~$ getfacl /dev/video1
  getfacl: Removing leading '/' from absolute path names
  # file: dev/video1
  # owner: root
  # group: root
  user::rw-
  group::---
  other::---
  ladiko at machine:~$

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/udev/+bug/1214915/+subscriptions




More information about the foundations-bugs mailing list