GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit, zda je v mechanice CD-ROM?

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)

Linux
  1. Jak vygenerovat náhodné heslo v linuxu pomocí /dev/random

  2. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  3. Jak přenosné jsou /dev/stdin, /dev/stdout a /dev/stderr?

  1. Jak namapovat zařízení /dev/sdX a /dev/mapper/mpathY ze zařízení /dev/dm-Z

  2. Jak kódovat base64 /dev/random nebo /dev/urandom?

  3. Jak mohu změnit množství a velikost linuxových ramdisků (/dev/ram0 - /dev/ram15)?

  1. Linux:Rozdíl mezi /dev/console , /dev/tty a /dev/tty0

  2. jádro:deaktivace /dev/kmem a /dev/mem

  3. Jak Linux používá /dev/tty a /dev/tty0