ForumCDs automatisch rippen
Peter Flicker – Donnerstag, 15. April 2010 10:05 Uhr

Hallo community. Ich arbeite mit abcde unter Ubuntu. Das funktioniert auch ziemlich gut. jetzt möchte ich aber den Vorgang automatisieren. Also wenn ich eine Audio-CD einlege, soll die automatisch mit abcde gerippt werden und nachher wieder ausgeworfen.

Die Audio-CD zu erkennen sollte kein Problem sein, kann ja Gnome auch. Vermutlich muss ich irgendwas mit Hal und Udev machen, soweit bin ich schon, aber was?

3 Antworten
DieterD – Donnerstag, 15. April 2010 19:23 Uhr

Denke das ist etwas für ein Skript auf der Konsole.

Ob ein neues Medium eingelegt wurde bzw. gemountet wurde, kann ausgewertetet werden. Dann eines der Programme gestartet mit den passenden Parametern und gewartet bis der Job fertig ist. Und dann folgt unmounten des Mediums. Und in einer Schleife geht das beliebig oft.

http://forums.freebsd.org/showthread.php?t=1195

So ungefähr könnte das Skript aussehen:

# do it 100 times
for i in $(seq 1 100) ; do
aa=$(mount | grep cdrom | wc -c)
sleep 15
if [ “$aa” -gt “1” ] ; do sleep 10 ; cdparanoia DeineOptionen ; fi
sleep 10
sudo umount $(mount | grep cdrom)
sleep 10
eject
sleep5
done

Hoffe Dir hilft das etwas weiter.

Peter Flicker – Donnerstag, 15. April 2010 19:38 Uhr

Hallo Dieter,
danke für den Tipp. Leider funktioniert das mit Audio-CDs nicht, weil

mount | grep cdrom | wc -c

immer 0 zurückgibt, da die Audio-CDs ja nicht im mount-Befehl auftauchen . Kann man irgendwo in /proc oder /sys auslesen, ob eine Audio-CD eingelegt ist?

René Franke – Donnerstag, 15. April 2010 20:35 Uhr

Wenn Du unter Ubuntu eine Audio-CD einlegst erscheint doch ein Fenster der Marke “Womit öffnen?”. Dort könnte man dann doch ein Ripper-Skript als Standardanwendung festlegen.

René

Peter Flicker – Donnerstag, 15. April 2010 21:34 Uhr

Danke für den Tipp, aber es soll ohne GUI funktionieren. Der Rechner soll einfach in der Ecke stehen, ich lege eine CD ein und er macht die Arbeit. Fertig.

René Franke – Freitag, 16. April 2010 00:59 Uhr

So hatte ich das auch verstanden.
Wenn Du nun aber dasjenige Skript, das das Rippen erledigt zum Standard (sinngemäß “Immer mit dieser Anwendung ausführen”) für Audio-CDs erklärst, sollte doch der gewünschte Effekt eintreten.

René

Peter Flicker – Freitag, 16. April 2010 11:26 Uhr

Stimmt, daran hatte ich nicht gedacht. Der Rechner soll aber nach Möglichkeit ohne GUI auskommen.

René Franke – Freitag, 16. April 2010 21:08 Uhr

Und ich hatte nicht daran gedacht, dass “ohne GUI” im Sinne von ohne X-Server/Window-Manager gemeint war. Ist ja unter Ubuntu auch eher ungewöhnlich.
Einigen wir uns auf Unentschieden?

Frank – Donnerstag, 15. April 2010 21:02 Uhr
Peter Flicker – Donnerstag, 15. April 2010 21:39 Uhr

Hallo Frank,
leider bringt mich Udev nicht weiter, da das nur die Hardware erkennt, nicht was drin ist. D.h. ich könnte zwar ein externes CD-Laufwerk anschließen und dann eine Udev-Regel schreiben, aber mit dem internen scheint das nicht zu funktionieren, zumindest gibt

udevadm info –query=all –name=/dev/sr0

mit oder ohne Audio-CD den gleichen Output :-(

Frank – Donnerstag, 15. April 2010 23:07 Uhr

das ist doch schon mal gut. Ein Script brauchst Du sowieso, also in der udev-Regel Run=DeinSkript.

Und mit der Auswertung von

cdinfo | grep “disc status”

erfährt du, ob es eine audio-cd ist.

Peter Flicker – Freitag, 16. April 2010 11:22 Uhr

Hallo Frank,
danke für den Hinweis. cdinfo gibt es bei mir unter Ubuntu nicht. Ich habe jetzt aber einen Weg gefunden:

udisks –show-info /dev/cdrom | grep audio

Zeigt bei Audio-CDs die Anzahl Tracks an. Wenn keine Audio-CD eingelegt ist, dann ist die Ausgabe leer.

Jetzt könnte ich damit ein eigenes Skript schreiben, das in einem bestimmten Abstand diesen Befehl aufruft, aber über Udev wäre das eleganter.

Die einzige Frage bleibt somit, wie erstelle ich eine Udev-Regel, die dann in Kraft tritt, wenn ich eine Audio-CD einlege? Hier habe ich irgendetwas dazu gefunden, aber ich verstehe das nicht:

http://mailman.videolan.org/pipermail/vlc-commits/2010-March/000112.html
http://bbs.archlinux.org/viewtopic.php?id=89871

Oder ist Udev der falsche Weg?

Frank – Freitag, 16. April 2010 12:23 Uhr

> Oder ist Udev der falsche Weg?

Finde ich nicht. Du erstellst oder kopierst eine schon vorhandene udev-Regel und fügst noch ein Run+=”DeinScript” ein. Im Script wertest Du udisks aus. Von dieser Auswertung hängt es dann ab, ob das Script gleich wieder beendet wird, wenn es keine Audio-CD ist oder ob ein Ripper-Programm gestartet wird. Natürlich wird dieses Script immer dann gestartet, wenn Du eine CD einlegst. Das macht aber nichts. Gerippt wird nur, wenn es eine Audio-CD ist.

Bei mir sieht eine schon vorhandene udev-Regel für ein CDROM so aus:

ACTION==”add|change”, SUBSYSTEM==”block”, ENV{DEVTYPE}==”disk”, \
KERNEL==”sr[0-9]*|hd[a-z]|pcd[0-9]|xvd*”, IMPORT{program}=”cdrom_id –export $tempnode”

Da würde jetzt nur noch ein Run+=” ” fehlen.

Probiere das Ganze einfach mal aus.

peterf – Freitag, 16. April 2010 19:22 Uhr

Also ich habe jetzt einen Haufen ausprobiert, aber ich glaube diese Sch.. Udev-Regeln reagieren einfach nicht darauf, ob eine CD im Laufwerk liegt oder nicht. ich habe extra KERNEL==”sr0″ geschrieben, das sollte doch eigentlich auf alles im Syslog, wo sr0 drin steht reagieren, aber nichts tut sich :-(

Die Lösung mit dem Gnome-Teil, das beim einlegen einer CD erscheint funktioniert hingegen, das habe ich mit einem Testscript ausprobiert. Aber ich möchte es halt auf einem Rechner ohne Gnome oder KDE nutzen…

Also: wie bringe ich udev oder ein anderes Subsystem dazu, darauf zu reagieren, dass eine CD eingelegt wurde???

DieterD – Freitag, 16. April 2010 20:15 Uhr

Mit den udev-Regeln hat den Nachtei, dass Du diese wieder zurückändern mußt, wenn die Funktion nicht mehr erwünscht ist. Ein Skript ist da praktischer. In deinen .profiles kannst Du ein solches Skript auch automatisch starten.

1) Wenn bei einlegen der CD nichts gemountet wurde (die Ausgabe von mount vorher oder nachher zeigt nichts an), könntst Du suchen gehen, wo die CD in /dev/* zu finden ist. Mit “dd -if=/dev/…. -count= ” könnte über Umwege festgestellt werden, dass ewas eingelegt wurde.

2) Du könntest aber auch eines der Programmen, wie in dem kleinen Listiing angegeben, benützen zum Testen. Wenn Du dem Befehlchen sagst, konvertiere den ersten Track, davon nur ein paar Sekunden in eine Dummy-Datei, dann gibt die Konsolenanwendung einen Fehlercode zurück, wenn keine Audio eingelegt ist. Wenn eine Audio eingelegt ist eine Null für erfolgreich. Fallunterscheidung, und dann den Befehl mit den entsprechenden Optionen aufrufen.