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@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@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@machine:~$ dpkg-query -W udev udev 175-0ubuntu9.4 ladiko@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@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@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@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@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@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@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@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@machine:~$ getfacl /dev/video1 getfacl: Removing leading '/' from absolute path names # file: dev/video1 # owner: root # group: root user::rw- group::--- other::--- ladiko@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 Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1214915 Title: udev doesnt execute setfacl -b %N on boot To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/udev/+bug/1214915/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs