Created attachment 388416 [details] 75-dvd-links.rules Long ago, before systemd, in the time about ~171 version udev, it provided rules for creating 4 symlinks (/dev/cdrom, /dev/cdrw, /dev/dvd and /dev/dvdrw, that commonly is not correct, /dev/dvdrw symlink for drive, doesn't supports writing DVDs may confuse). Now I use sys-fs/eudev as dynamic namespace backend. It creates only /dev/cdrom symbolic link. Missing /dev/dvd breaks many things relating with playing video DVDs. For example, on my box Parole video player fails to play DVD, echoing the following error message to stderr: $ parole libdvdread: Can't stat /dev/dvd No such file or directory libdvdread: Could not open /dev/dvd Adding rules to create this symlink (simplest example /etc/udev/rules.d/75-dvd-links.rules in attached file) fixes issue, Parole successfully read and play the video DVD. To my mind, eudev should create all standard symlinks, depending on hardware's faclilities, i.e. (for simplest case, only one CD-drive attached) only /dev/cdrom for basic drive, /dev/cdrom and /dev/cdrw for drive, which supports writinig CDRs, /dev/cdrom, /dev/cdrw and /dev/dvd for drive, which supports writing CDRs and reading DVDs and so long). Maybe, rules to create proper rules sets could be generated by a speclially developed eselect module. $ einfo Portage 2.2.8-r2 (default/linux/amd64/13.0, gcc-4.7.3, glibc-2.19-r1, 3.12.21-aufs-r1 x86_64) ================================================================= System uname: Linux-3.12.21-aufs-r1-x86_64-Intel-R-_Core-TM-_i5_CPU_661_@_3.33GHz-with-gentoo-2.2 KiB Mem: 7977808 total, 5195140 free KiB Swap: 4024240 total, 4024240 free Timestamp of tree: Sat, 01 Nov 2014 06:15:01 +0000 ld GNU ld (Gentoo 2.24 p1.4) 2.24 app-shells/bash: 4.2_p53 dev-java/java-config: 2.2.0 dev-lang/perl: 5.18.2-r2 dev-lang/python: 2.7.7, 3.3.5-r1, 3.4.1 dev-util/cmake: 2.8.12.2-r1 dev-util/pkgconfig: 0.28-r1 sys-apps/baselayout: 2.2 sys-apps/openrc: 0.12.4 sys-apps/sandbox: 2.6-r1 sys-devel/autoconf: 2.13, 2.69 sys-devel/automake: 1.11.6, 1.12.6, 1.13.4 sys-devel/binutils: 2.24-r3 sys-devel/gcc: 4.7.3-r1 sys-devel/gcc-config: 1.7.3 sys-devel/libtool: 2.4.2-r1 sys-devel/make: 4.0-r1 sys-kernel/linux-headers: 3.13 (virtual/os-headers) sys-libs/glibc: 2.19-r1 Repositories: gentoo rion mva local_home ACCEPT_KEYWORDS="amd64" ACCEPT_LICENSE="* -@EULA GPL*" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-march=native -O2 -pipe" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /etc/conf.d/clock /etc/rc.conf /usr/share/gnupg/qualified.txt /var/bind" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php5.5/ext-active/ /etc/php/cgi-php5.5/ext-active/ /etc/php/cli-php5.5/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c" CXXFLAGS="-march=native -O2 -pipe" DISTDIR="/usr/portage/distfiles/" EMERGE_DEFAULT_OPTS="--ask=y --verbose --autounmask=n" FCFLAGS="-O2 -pipe" FEATURES="assume-digests binpkg-logs buildsyspkg config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync" FFLAGS="-O2 -pipe" GENTOO_MIRRORS="ftp://xeon.gentoo.ru/mirrors/gentoo/distfiles/ ftp://mirror2.corbina.ru/gentoo-distfiles/ http://mirror2.corbina.ru/gentoo-distfiles/ http://mirror.yandex.ru/gentoo-distfiles/ ftp://mirror.yandex.ru/gentoo-distfiles/ http://gentoo.bloodhost.ru/ ftp://gentoo.bloodhost.ru/ distfiles.gentoo.org" LANG="ru_RU.UTF8" LDFLAGS="-Wl,-O1 -Wl,--as-needed" MAKEOPTS="-j2" PKGDIR="/usr/portage/packages/" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage/gentoo" PORTDIR_OVERLAY="/usr/portage/layman/rion /usr/portage/layman/mva /usr/portage/local" SYNC="rsync://mirror.yandex.ru/gentoo-portage/" USE="X a52 acl alsa amd64 berkdb bzip2 cairo cdr cli consolekit cracklib crypt cups cxx dbus djvu dri dv dvd ffmpeg flac fortran gdbm gif gtk iconv icu jpeg jpeg2k kpathsea mac mmx modules mp3 mpeg multilib ncurses nls nptl ogg openmp pam pcre pdf png policykit qt3support readline session sse sse2 ssl tcpd tiff truetype unicode utf8 v4l v4l2 vorbis zlib" ABI_X86="64" ALSA_CARDS="hda-intel" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" FOO2ZJS_DEVICES="hp1018" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ublox ubx" INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="ru" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_3" QEMU_SOFTMMU_TARGETS="i386" QEMU_USER_TARGETS="i386" RUBY_TARGETS="ruby19 ruby20" SANE_BACKENDS="genesys" USERLAND="GNU" VIDEO_CARDS="intel" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account" Unset: CPPFLAGS, CTARGET, INSTALL_MASK, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, USE_PYTHON
(In reply to Sergey S. Starikoff from comment #0) > Created attachment 388416 [details] > 75-dvd-links.rules > Looks good to me, but I think I want to add them to 60-cdrom_id.rules rather than making it a separate file. I haven't decided yet. > $ parole > libdvdread: Can't stat /dev/dvd > No such file or directory > libdvdread: Could not open /dev/dvd > > Adding rules to create this symlink (simplest example > /etc/udev/rules.d/75-dvd-links.rules in attached file) fixes issue, Parole > successfully read and play the video DVD. This is not a regression, and I am following upstream on this, but I agree with you that it makes no sense to exclude the dvd and dvdrw sym links. I see nothing dangerous about putting those in. > > To my mind, eudev should create all standard symlinks, depending on > hardware's faclilities, i.e. (for simplest case, only one CD-drive attached) > only /dev/cdrom for basic drive, /dev/cdrom and /dev/cdrw for drive, which > supports writinig CDRs, /dev/cdrom, /dev/cdrw and /dev/dvd for drive, which > supports writing CDRs and reading DVDs and so long). This sounds like a question for upstream. I'll try asking but you may want to poke around too to see why they were dropped. > > Maybe, rules to create proper rules sets could be generated by a speclially > developed eselect module. > No. This is an unnecessary layer. These rules are easy enough to just write by hand. We could add a simple howto to the rather bare eduev wiki page. Arch Linux has some nice stuff. If we add an eselect module then users would just have to learn one more layer of abstraction which would be no easier than the layer we're trying to abstract.
Actually, the standard now is that all software is supposed to be using /dev/cdrom now. These rules were actually removed, so the thing to do is open bugs against packages using /dev/cdrw, /dev/dvd and /dev/dvdrw.