====== udev ====== * [[cdrom_id]] * [[udevadm]] ==== Howto create a udev symlink for a DVD drive === I ran into this one on an Ubuntu 12.10 desktop. I have two DVD drives and one Blu-ray ROM drive. Devices ''/dev/sr0'' and ''/dev/sr1'' were showing up with ''/dev/dvd'' and ''/dev/dvd1'' respectively, but the Blu-ray was only registering ''/dev/sr2''. I wanted to create two new symlinks for ''/dev/sr0'': ''/dev/dvd2'' and ''/dev/bluray''. First, I looked at my current udev rules for the DVD drives in ''/etc/udev/rules.d/70-persistent-cd.rules'': # Memorex_16X-DDL-IN (pci-0000:00:0f.1-scsi-0:0:0:0) SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:0f.1-scsi-0:0:0:0", SYMLINK+="cdrom", ENV{GENERATED}="1" SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:0f.1-scsi-0:0:0:0", SYMLINK+="cdrw", ENV{GENERATED}="1" SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:0f.1-scsi-0:0:0:0", SYMLINK+="dvd", ENV{GENERATED}="1" SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:0f.1-scsi-0:0:0:0", SYMLINK+="dvdrw", ENV{GENERATED}="1" # ATAPI_DVD-ROM_16X_Maximum (pci-0000:00:0f.1-scsi-0:0:1:0) SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:0f.1-scsi-0:0:1:0", SYMLINK+="cdrom1", ENV{GENERATED}="1" SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:0f.1-scsi-0:0:1:0", SYMLINK+="dvd1", ENV{GENERATED}="1" Once I figured out how to query udev for it's variables it's displaying, it all clicked into place: # udevadm info -n /dev/sr2 -q all P: /devices/pci0000:00/0000:00:0f.0/ata3/host2/target2:0:0/2:0:0:0/block/sr2 N: sr2 S: bluray S: disk/by-id/ata-ATAPI_iHOS104_3775504067_206017500 S: disk/by-path/pci-0000:00:0f.0-scsi-0:0:0:0 S: dvd2 E: DEVLINKS=/dev/bluray /dev/disk/by-id/ata-ATAPI_iHOS104_3775504067_206017500 /dev/disk/by-path/pci-0000:00:0f.0-scsi-0:0:0:0 /dev/dvd2 E: DEVNAME=/dev/sr2 E: DEVPATH=/devices/pci0000:00/0000:00:0f.0/ata3/host2/target2:0:0/2:0:0:0/block/sr2 E: DEVTYPE=disk E: GENERATED=1 E: ID_ATA=1 E: ID_ATA_SATA=1 E: ID_ATA_SATA_SIGNAL_RATE_GEN1=1 E: ID_BUS=ata E: ID_CDROM=1 E: ID_CDROM_BD=1 E: ID_CDROM_CD=1 E: ID_CDROM_DVD=1 E: ID_CDROM_MRW=1 E: ID_CDROM_MRW_W=1 E: ID_MODEL=ATAPI_iHOS104 E: ID_MODEL_ENC=ATAPI\x20\x20\x20iHOS104\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 E: ID_PATH=pci-0000:00:0f.0-scsi-0:0:0:0 E: ID_PATH_TAG=pci-0000_00_0f_0-scsi-0_0_0_0 E: ID_REVISION=WL0D E: ID_SERIAL=ATAPI_iHOS104_3775504067_206017500 E: ID_SERIAL_SHORT=3775504067_206017500 E: ID_TYPE=cd E: MAJOR=11 E: MINOR=2 E: SUBSYSTEM=block E: TAGS=:udev-acl: E: UDEV_LOG=3 E: UDISKS_PRESENTATION_NOPOLICY=0 E: USEC_INITIALIZED=1520096 Watch the udev events as the device status changes (opens, closes and loading, closed) to see how the environment variables change: udevadm monitor --environment --udev I created a new rule using those variables and put it into the cd-rules file. I chose my own variables to use as identifiers: the model ID and the firmware version. # Sony Blu-ray SUBSYSTEM=="block", ENV{ID_MODEL}=="ATAPI_iHOS104", ENV{ID_REVISION}=="WL0D", SYMLINK+="dvd2", ENV{GENERATED}="1" SUBSYSTEM=="block", ENV{ID_MODEL}=="ATAPI_iHOS104", ENV{ID_REVISION}=="WL0D", SYMLINK+="bluray", ENV{GENERATED}="1" After that, refresh udev and it worked: udevadm trigger Now I have ''/dev/dvd2'' and ''/dev/bluray''. Yay :)