Existe-t-il une commande que vous pouvez exécuter dans un script shell qui détecterait si le plateau du CD est ouvert ou fermé, et renverrait 1 ou 0 selon qu'il l'était (ou quelque chose de facile à interpréter) ?
Actuellement, j'exécute la commande open et je chronomètre le temps qu'il faut pour l'exécuter. S'il est presque instantané, il est ouvert. Si cela prend du temps, il était ouvert et est maintenant fermé.
Je voudrais une méthode qui n'implique pas de changer l'état actuel - juste de le détecter.
Réponse acceptée :
J'ai trouvé une petite solution sympa ici. Le code C ci-dessous, légèrement modifié depuis le site lié, renverra un code de sortie de si le bac est ouvert et
1
si ce n'est pas le cas.
Donc, enregistrez ce code sous quelque chose (par exemple foo.c
) et compilez-le avec cette commande :
gcc -o trayopen foo.c
Ensuite, copiez l'exécutable compilé, trayopen
vers /usr/bin
:
sudo cp trayopen /usr/bin
Vous ne devriez pas pouvoir faire des choses comme
trayopen /dev/sr0 && echo closed
Ou, plus complet :
#!/bin/sh
if trayopen /dev/sr0
then
echo "Tray is open."
else
echo "Tray is closed."
fi
Le code :
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/cdrom.h>
int main(int argc,char **argv) {
int cdrom;
int status=1;
if (! argv[1] ){
printf("Usage : trayopen [device]\n");
printf("Result: Returns a 0 if the tray was open and 1 if it was closed\n");
exit(2);
}
if ((cdrom = open(argv[1],O_RDONLY | O_NONBLOCK)) < 0) {
printf("Unable to open device %s. Provide a device name (/dev/sr0, /dev/cdrom) as a parameter.\n",argv[1]);
exit(2);
}
/* Check CD tray status */
if (ioctl(cdrom,CDROM_DRIVE_STATUS) == CDS_TRAY_OPEN) {
status=0;
}
close(cdrom);
exit(status);
}