Mit dem Befehl blkid
erhalten Sie Informationen zu jedem Blockgerät .
[[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
Wenn ich die Festplatte entferne, erhalte ich keine Ausgabe und der Exit-Wert ist 2. (0 bedeutet Erfolg. Ein Wert ungleich Null bedeutet normalerweise, dass etwas Ungewöhnliches passiert oder ein Fehler aufgetreten ist)
[[email protected] ~]# blkid /dev/sr0
[[email protected] ~]# echo $?
2
setcd -i
(im setcd
Paket, zumindest unter Debian) kann Ihnen den Zustand des Laufwerks mitteilen. Im Gegensatz zu einigen anderen Ansätzen (zumindest mounten, wahrscheinlich auch blkid) wird dies nicht versuchen, das Fach zu schließen , sogar auf Laufwerken, die dazu in der Lage sind. (Was wirklich ärgerlich ist, wenn es versucht, sich dir zu nähern, während du eine Disc einlegst).
Bei geöffnetem Fach:
$ setcd -i /dev/sr0 /dev/sr0: CD tray is open
Gleich nach dem Schließen des Fachs:
$ setcd -i /dev/sr0 /dev/sr0: Drive is not ready
Nachdem es fertig ist:
$ 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
Geschlossen, aber keine Disc:
$ setcd -i /dev/sr0 /dev/sr0: No disc is inserted
Sie können es ziemlich einfach skripten:
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
Mit Python3 und der Standardbibliothek können Sie Folgendes tun:
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)