Puede obtener información sobre cualquier dispositivo de bloque usando el comando blkid
.
[[email protected] ~]# blkid /dev/sr0
/dev/sr0: UUID="2013-05-31-23-04-19-00" LABEL="ARCH_201306" TYPE="iso9660" PTTYPE="dos"
[[email protected] ~]# echo $?
0
Si elimino el disco, no obtengo ningún resultado y el valor de salida es 2. (0 significa éxito. Un valor distinto de cero generalmente significa que sucedió algo anormal o que ocurrió un error)
[[email protected] ~]# blkid /dev/sr0
[[email protected] ~]# echo $?
2
setcd -i
(en el setcd
paquete, al menos en Debian) puede decirle el estado de la unidad. A diferencia de algunos de los otros enfoques (mount al menos, probablemente blkid también), esto no intente cerrar la bandeja , incluso en unidades capaces de eso. (Lo cual es realmente molesto si intenta cerrarse mientras colocas un disco).
Con la bandeja abierta:
$ setcd -i /dev/sr0 /dev/sr0: CD tray is open
Justo después de cerrar la bandeja:
$ setcd -i /dev/sr0 /dev/sr0: Drive is not ready
Después de que esté listo:
$ setcd -i /dev/sr0 /dev/sr0: Disc found in drive: data disc type 1 Volume name: «name» Publisher: MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING 2005030913034700�2005030913034700�0000000000000000 Data preparer: MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING 2005030913034700�2005030913034700�0000000000000000
Cerrado, pero sin disco:
$ setcd -i /dev/sr0 /dev/sr0: No disc is inserted
Puede escribirlo con bastante facilidad:
while true; do
cdinfo=$(setcd -i "$dev")
case "$cdinfo" in
*'Disc found'*)
break;
;;
*'not ready'*)
echo '(waiting for drive to be ready)' >&2;
sleep 3;
;;
*'is open'*)
echo '(drive is open)' >&2;
sleep 5;
;;
*)
printf 'Confused by setcd -i, bailing out:\n%s\n' "$cdinfo" &2
exit 1
esac
done
Puede hacer lo siguiente con Python3 y la biblioteca estándar:
import fcntl
import os
CDROM_DRIVE = '/dev/sr0'
def detect_tray(CDROM_DRIVE):
"""detect_tray reads status of the CDROM_DRIVE.
Statuses:
1 = no disk in tray
2 = tray open
3 = reading tray
4 = disk in tray
"""
fd = os.open(CDROM_DRIVE, os.O_RDONLY | os.O_NONBLOCK)
rv = fcntl.ioctl(fd, 0x5326)
os.close(fd)
print(rv)