Informace o libovolném blokovém zařízení získáte pomocí příkazu 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
Pokud vyjmu disk, nedostanu žádný výstup a výstupní hodnota je 2. (0 znamená úspěch. Nenulová hodnota obvykle znamená, že se stalo něco neobvyklého nebo došlo k chybě)
[[email protected] ~]# blkid /dev/sr0
[[email protected] ~]# echo $?
2
setcd -i
(v setcd
balíček, alespoň na Debianu) vám může sdělit stav disku. Na rozdíl od některých jiných přístupů (alespoň mount, pravděpodobně i blkid) to ne pokus zavřít zásobník , a to i na discích, které to umí. (Což je opravdu nepříjemné, pokud se vám pokusí zavřít, když vkládáte disk).
S otevřeným zásobníkem:
$ setcd -i /dev/sr0 /dev/sr0: CD tray is open
Hned po zavření zásobníku:
$ setcd -i /dev/sr0 /dev/sr0: Drive is not ready
Až bude připraven:
$ 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
Zavřeno, ale žádný disk:
$ setcd -i /dev/sr0 /dev/sr0: No disc is inserted
Můžete to poměrně snadno naskriptovat:
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
S Python3 a standardní knihovnou můžete provést následující:
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)