Puoi ottenere informazioni su qualsiasi dispositivo a blocchi usando il 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
Se rimuovo il disco, non ottengo alcun output e il valore di uscita è 2. (0 significa successo. Un valore diverso da zero in genere significa che è successo qualcosa di anomalo o che si è verificato un errore)
[[email protected] ~]# blkid /dev/sr0
[[email protected] ~]# echo $?
2
setcd -i
(nel setcd
pacchetto, almeno su Debian) può dirti lo stato del disco. A differenza di alcuni degli altri approcci (mount almeno, probabilmente anche blkid), questo non tenta di chiudere il vassoio , anche su unità in grado di farlo. (Il che è davvero fastidioso se cerca di chiudersi su di te mentre stai inserendo un disco).
Con il vassoio aperto:
$ setcd -i /dev/sr0 /dev/sr0: CD tray is open
Subito dopo aver chiuso il vassoio:
$ setcd -i /dev/sr0 /dev/sr0: Drive is not ready
Dopo che è pronto:
$ 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
Chiuso, ma nessun disco:
$ setcd -i /dev/sr0 /dev/sr0: No disc is inserted
Puoi scriverlo abbastanza facilmente:
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
Puoi fare quanto segue con Python3 e la libreria standard:
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)