Nach USB anstecken script ausführen
Nach USB anstecken script ausführen
Hallo
Ich hatte zwar schon mal ein wenig die Suchfunktion bemüht, aber das richtige war da glaube ich nicht dabei.
Ich möchte eigentlich nur ein Script starten sobald ich meinen USB-Stick einstecke. Es soll nicht permanent geschaut worden ob ein Stick eingesteckt ist und dann das SCript ausgeführt werden. Wie gesagt, Stick rein, Script los.
Ich hatte zwar schon mal ein wenig die Suchfunktion bemüht, aber das richtige war da glaube ich nicht dabei.
Ich möchte eigentlich nur ein Script starten sobald ich meinen USB-Stick einstecke. Es soll nicht permanent geschaut worden ob ein Stick eingesteckt ist und dann das SCript ausgeführt werden. Wie gesagt, Stick rein, Script los.
- puntarenas
- Beiträge: 712
- Registriert: 28.05.2005 15:07:05
Geht mit hotplug und udev. Konkret heißt das, daß du eine udev-rule schreibst, die beim anstecken deines USB-Sticks ein Script ausführt.
Folgender Artikel enthält weiter unten ein auf CD-Roms bezogenes Beispiel:
http://www.linuxjournal.com/article/7316
Zum Schreiben von udev-rules dürfte dieser Link hilfreich sein:
http://www.reactivated.net/writing_udev_rules.html
HTH
puntarenas
Folgender Artikel enthält weiter unten ein auf CD-Roms bezogenes Beispiel:
http://www.linuxjournal.com/article/7316
Zum Schreiben von udev-rules dürfte dieser Link hilfreich sein:
http://www.reactivated.net/writing_udev_rules.html
HTH
puntarenas
Vielen Dank schon mal für deine Hilfe. Ich hab es nun gschafft, dass ich dem USB STick einen anderne Device Namen geben kann. Also immer den gleichen. In meinem Fall /dev/stick. Mit der folgenden udev-rule habe ich es versucht:
Allerdings schlägt die Ausführung meines Programms fehl und dadurch wird dann auch /dev/stick nicht mehr angelegt. Das Problem liegt denke ich darin, dass ich in meinem Stick versuche einen Song auf den USB Stick zu kopiere:
Die udev-rule schlägt denke ich fehl, weil das Programm ausgeführt wird, aber noch gar kein /dev/stick vorhanden ist. DA beisst sich die Katze aber in den SChwanz...
Wie erreiche ich es, dass das Programm erst ausgeführt wird, wenn /dev/stick beriets existiert? Würde es vielleicht etwas bringen wenn ich nicht das Script mounten lassen würde sondern das mounten bereits durch udev mache irgendwie?
Er braucht wohl den absoluten Pfad. Das bringt aber auch noch nicht wirklich viel.
Code: Alles auswählen
BUS="scsi", SYSFS{vendor}="SigmaTel", NAME="stick", PROGRAM="copycurrent.pl"
Code: Alles auswählen
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
use File::Copy;
my $musicdir = "/usr/share/mpd/music/";
die("MPD.pm not found!\n") unless -f "/usr/local/bin/MPD.pm";
require("/usr/local/bin/MPD.pm");
my $mpd = MPD->new();
my %currentsong = $mpd->get_current_song_info;
my $file = $musicdir.$currentsong{file};
#die("/dev/stick not present!\n") unless -f "/dev/stick";
system("mount", "/media/stick");
#system("cp", $absolutedir, "/media/stick/");
copy($file, "/media/stick") or die "Copy failed: $!";
system("umount", "/media/stick");
Wie erreiche ich es, dass das Programm erst ausgeführt wird, wenn /dev/stick beriets existiert? Würde es vielleicht etwas bringen wenn ich nicht das Script mounten lassen würde sondern das mounten bereits durch udev mache irgendwie?
Er braucht wohl den absoluten Pfad. Das bringt aber auch noch nicht wirklich viel.
- puntarenas
- Beiträge: 712
- Registriert: 28.05.2005 15:07:05
Sorry, vielleicht habe ich dich mit dem Beispiel im Link auf die falsche Fährte geschickt. Ich hatte selbst noch keinen Bedarf, ein eigenes Script auszuführen und dadurch kann das schonmal passieren.
Wenn die Umgebungsvariable UDEV_NO_DEVD nicht gesetzt ist, werden standardmäßig nach dem Anlegen der Gerätedateien Programme im Verzeichnis /etc/dev.d/ ausgeführt.
Näheres gibt es hier:
http://kernel.org/pub/linux/utils/kerne ... /RFC-dev.d
Gruß
puntarenas
Wenn die Umgebungsvariable UDEV_NO_DEVD nicht gesetzt ist, werden standardmäßig nach dem Anlegen der Gerätedateien Programme im Verzeichnis /etc/dev.d/ ausgeführt.
Näheres gibt es hier:
http://kernel.org/pub/linux/utils/kerne ... /RFC-dev.d
Gruß
puntarenas
Vielen Dank!!
Das war das letzte kleine bisschen welches mir auf meinem langen Weg noch gefehlt hatte.
Unter /etc/dev.d hatte ich mein device eingefügt. Aufgrund von /dev/stick lautet dies /etc/dev.d/stick. Darin konnte ich dann einen symlink zu meinem copryscript anlegen. Ich hätte natürlich auch direkt mein Script reinlegen können. Aber es funktioniert nun!!
Meine Fresse! Aber Ende gut alles gut!


Das war das letzte kleine bisschen welches mir auf meinem langen Weg noch gefehlt hatte.
Unter /etc/dev.d hatte ich mein device eingefügt. Aufgrund von /dev/stick lautet dies /etc/dev.d/stick. Darin konnte ich dann einen symlink zu meinem copryscript anlegen. Ich hätte natürlich auch direkt mein Script reinlegen können. Aber es funktioniert nun!!
Meine Fresse! Aber Ende gut alles gut!

- puntarenas
- Beiträge: 712
- Registriert: 28.05.2005 15:07:05
Aus "man hotplug":
Sag Bescheid, wenn es geklappt hat. Die Erfahrungen, die du hier mühevoll sammelst, werden mir sicherlich einmal nützlich sein
Gruß
puntarenas
Von Perl habe ich leider keine Ahnung, aber in einem Bashscript würde das dann etwa so aussehenInformation about an event is passed in the form of environment vari‐
ables. Most agents accept a "ACTION" variable that describes the type
of the event. It is set to "add" or "remove" to signify that some
device has just been connected to or disconnected from the system.
Code: Alles auswählen
if [ $ACTION = "add" ]
Code: Alles auswählen
if [ $ACTION = "remove" ]

Gruß
puntarenas
- ZOiD
- Beiträge: 219
- Registriert: 13.07.2003 15:20:04
- Lizenz eigener Beiträge: GNU General Public License
Moin,
dazu hätte ich noch ne Frage.
Ich habe mir das per udev auch so anelegt, dass ein bestimmter USB Stick nach /dev/stick gemappt wird. Dazu habe ich ein Script :
damit der Stick auch gleich gemountet wird, als /etc/dev.d/stick/stick.dev abgelegt.
Allerdings funktioniert das nicht, ich weiss aber nicht woran das liegt, also ob das script nicht ausgeführt wird oder an was anderem.
Jemand nen Rat?
Danke
ZOiD
dazu hätte ich noch ne Frage.
Ich habe mir das per udev auch so anelegt, dass ein bestimmter USB Stick nach /dev/stick gemappt wird. Dazu habe ich ein Script :
Code: Alles auswählen
#!/bin/sh
if [ $ACTION = "add" ];
then
# usb-stick einhängen
mount /dev/stick /mnt/stick
fi;
Allerdings funktioniert das nicht, ich weiss aber nicht woran das liegt, also ob das script nicht ausgeführt wird oder an was anderem.
Jemand nen Rat?
Danke
ZOiD
@puntarenas
Das ganze hat übrignes wunderbar geklappt und leistet mir schon längere Zeit treue Dienste.
@ZOid
Ich habe mein Script damals mit Tönen fehlerfrei bekommen. Also immer wenn etwas entscheidendes kam hab ich mit mpg321 eine Melodie oder dergleichen abspielen lassen. Somit konnte ich dann sehen woran es hakt. Geht sicher auch anders, aber so klappte es bei mir.
Bei dir könntest du es folgendermaßen probieren:
Allerdings garantiere ich nicht für die Richtigkeit der codeschnipsel. Meine Fertigkeiten im Bashscripten sind nämlich mehr als mies.
Das ganze hat übrignes wunderbar geklappt und leistet mir schon längere Zeit treue Dienste.
@ZOid
Ich habe mein Script damals mit Tönen fehlerfrei bekommen. Also immer wenn etwas entscheidendes kam hab ich mit mpg321 eine Melodie oder dergleichen abspielen lassen. Somit konnte ich dann sehen woran es hakt. Geht sicher auch anders, aber so klappte es bei mir.
Bei dir könntest du es folgendermaßen probieren:
Code: Alles auswählen
#!/bin/sh
if [ $ACTION = "add" ];
mpg321 soundfile.wav
then
# usb-stick einhängen
mount /dev/stick /mnt/stick
fi;