Aus skript feststellen, ob CD-Tray offen ist?

  • Hallo,


    ich möchte gerne aus einem shell skript heraus feststellen, ob die CD-Schublade offen oder geschlossen ist.


    Ich weiss, daß ich mit eject die Schublade öffnen oder schließen kann, oder mit parameter -T sogar den jeweils anderen Zustand erreichen kann, aber ich möchte gerne feststellen, wie der aktuelle Zustand ist.
    Es wäre kein Problem, dazu probeweise die Schublade zu schließen, aber soweit ich das sehe gibt mir eject keine Information darüber, ob dazu etwas zu tun war oder nicht.


    Gibt es da irgendeinen versteckten Parameter oder eine andere Möglichkeit?


    Tschööö
    Robert

  • Hallo,


    Hier findest Du die verallgemeinerten Befehle, die gegen ein Laufwerk abgesetzt werden können. Wie und wo das passieren kann, müsstest Du selber mal suchen.
    Der bekannteste Ausgangspunkt dürfte wohl http://fy.chalmers.se/~appro/linux/DVD+RW/ sein.


    Ich weiß jetzt nicht, warum Du das feststellen willst - meist dürfte es doch reichen, die Lade entweder zu öffnen oder zu schließen.


    Ansonsten könntest Du es noch indirekt versuchen.

    • wenn Du z.B. nach dem Schreiben eines Rohlings prüfen willst, ob die Lade offen ist, könntest Du dvd+rw-mediainfo verwenden. Wenn das nix lesen kann, bzw. meint, dass es kein Medium finden kann, ist die Lade offen.
    • Wenn Du es dagegen vor einem Schreibvorgang prüfen willst, könntest Du die Zeit messen, die der eject-Befehl braucht.
      Lade war bereits offen
      Code
      1. time `eject -v`
      2. real 0m0.005s
      3. user 0m0.004s
      4. sys 0m0.004s


      Lade wurde geöffnet

      Code
      1. time `eject -v`
      2. real 0m6.362s
      3. user 0m0.004s
      4. sys 0m0.000s


    Der Unterschied ist so groß, dass sich ein Schwellwert festlegen läßt.


    Gruß Geronimo

  • keine Ahnung ob es was Fertiges gibt.


    Folgendes Mini-Programm liefert bei mir 'true' wenn die Lade offen ist. Ansonsten (auch bei Fehlern wie falsches Laufwerk, fehlende Berechtigung etc.) 'false'


    C
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <fcntl.h>
    4. #include <linux/cdrom.h>
    5. main()
    6. {
    7. exit (CDS_TRAY_OPEN != ioctl(open("/dev/cdrom", O_RDONLY | O_NONBLOCK), CDROM_DRIVE_STATUS, 0));
    8. }