Vous pouvez obtenir des informations sur n'importe quel périphérique de bloc à l'aide de la commande 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 je retire le disque, je n'obtiens aucune sortie et la valeur de sortie est 2. (0 signifie succès. Une valeur différente de zéro signifie généralement qu'un événement anormal s'est produit ou qu'une erreur s'est produite)
[[email protected] ~]# blkid /dev/sr0
[[email protected] ~]# echo $?
2
setcd -i
(dans le setcd
package, au moins sur Debian) peut vous indiquer l'état du lecteur. Contrairement à certaines des autres approches (mount au moins, probablement blkid aussi), cela ne sera pas essayer de fermer le bac , même sur les disques capables de cela. (Ce qui est vraiment ennuyeux s'il essaie de se refermer sur vous pendant que vous insérez un disque).
Avec le bac ouvert :
$ setcd -i /dev/sr0 /dev/sr0: CD tray is open
Juste après avoir fermé le bac :
$ setcd -i /dev/sr0 /dev/sr0: Drive is not ready
Une fois prêt :
$ 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
Fermé, mais pas de disque :
$ setcd -i /dev/sr0 /dev/sr0: No disc is inserted
Vous pouvez le scripter assez facilement :
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
Vous pouvez effectuer les opérations suivantes avec Python3 et la bibliothèque 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)