GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo detectar si hay un CD-ROM en la unidad?

Puede obtener información sobre cualquier dispositivo de bloque usando el 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

Si elimino el disco, no obtengo ningún resultado y el valor de salida es 2. (0 significa éxito. Un valor distinto de cero generalmente significa que sucedió algo anormal o que ocurrió un error)

[[email protected] ~]# blkid /dev/sr0
[[email protected] ~]# echo $?
2

setcd -i (en el setcd paquete, al menos en Debian) puede decirle el estado de la unidad. A diferencia de algunos de los otros enfoques (mount al menos, probablemente blkid también), esto no intente cerrar la bandeja , incluso en unidades capaces de eso. (Lo cual es realmente molesto si intenta cerrarse mientras colocas un disco).

Con la bandeja abierta:

$ setcd -i /dev/sr0
/dev/sr0:
  CD tray is open

Justo después de cerrar la bandeja:

$ setcd -i /dev/sr0
/dev/sr0:
  Drive is not ready

Después de que esté listo:

$ 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

Cerrado, pero sin disco:

$ setcd -i /dev/sr0
/dev/sr0:
  No disc is inserted

Puede escribirlo con bastante facilidad:

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

Puede hacer lo siguiente con Python3 y la biblioteca estándar:

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. Cómo generar una contraseña aleatoria en Linux usando /dev/random

  2. Linux:¿Diferencia entre /dev/console, /dev/tty y /dev/tty0?

  3. ¿Cuándo usar /dev/random Vs /dev/urandom?

  4. Cómo silenciar completamente un cronjob a /dev/null/?

  5. Linux:¿Qué significa la letra 'u' en /dev/urandom?

¿Qué tan portátiles son /dev/stdin, /dev/stdout y /dev/stderr?

¿Cómo se intercambia /dev/sda con /dev/sdb?

¿Cuándo debo usar /dev/shm/ y cuándo debo usar /tmp/?

kernel:deshabilitar /dev/kmem y /dev/mem

hacer eco o imprimir /dev/stdin /dev/stdout /dev/stderr

¿Por qué se requieren < o > para usar /dev/tcp?