Ausführen eines Skripts beim Anschließen eines USB-Geräts


11

Bitte markieren Sie dies nicht als Duplikat, da dies eine andere Frage ist!

Ich versuche, ein Skript auszuführen, wenn ein Pendrive mit meinem System verbunden ist. Ich bin dieser und jener Frage gefolgt. Und es funktioniert, aber es gibt immer noch einige Probleme.

Dies ist meine udev-Regeldatei:

ACTION=="add", ATTRS{idVendor}=="8564", ATTRS{idProduct}=="1000", RUN+="/usr/local/my_script.sh"

und das ist mein Skript:

#!/ bin / bash

env> /tmp/env.out
cp -r / media / * Gerätename * / * ~ / test /

Ich habe 2 Fragen:

1.Wenn ich mein USB- Geräteskript anschließe, wird es ausgeführt, weil in / tmp eine Datei env.out generiert wird, aber die Daten vom USB-Gerät nicht in das Testverzeichnis kopiert werden. Wenn ich das Skript manuell ausführe, funktioniert es einwandfrei! Warum??

2.Wie kann ich meine Regeldatei allgemeiner gestalten, damit sie für jedes angeschlossene USB-Gerät funktioniert, ohne die ID zu kennen?

Meine Idee dahinter ist, alle Daten vom angeschlossenen USB-Gerät automatisch auf meinen Computer zu kopieren, wenn es angeschlossen ist.

Danke im Voraus!


versuchst du nicht nur das zu tun? askubuntu.com/questions/474/…
virtualxtc

@virtualxtc Danke für diesen Vorschlag! Aber ich möchte wissen, was an diesem Ansatz falsch ist.
Nullzeiger

Kannst du mir bitte sagen, was mit meinem Skript nicht stimmt? Warum funktioniert es nicht?
Nullzeiger

Nur ein Kopf hoch - ich habe auf die harte Tour gelernt, dass bestimmte Fragen wie diese normalerweise besser für Superuser geeignet sind als Askubuntu.
virtualxtc

Wenn dies das Problem der Berechtigungen gewesen wäre, wäre es aufgetaucht, als ich versucht habe, es manuell auszuführen, nicht wahr?
Nullzeiger

Antworten:


7

Um meine eigene Frage zu beantworten:

1.Script wurde nicht ausgeführt, da sudozum Ausführen Rechte erforderlich waren.

Lösung dafür:

Machen Sie dieses Skript sudoausführbar!

EDIT sudoers Datei mit

sudo visudo

Nach Zeile 25 (dh %sudo ALL=(ALL)) Fügen Sie dies hinzu

username ALL=(ALL) NOPASSWD: /home/username/my_script.sh

Jetzt können wir sudoin diesem Skript verwenden, ohne nach dem Sudo-Passwort gefragt zu werden

Es kann jedoch zu Sicherheitsproblemen kommen. Verweisen Sie daher auf diesen Link

2.Antwort auf meine zweite Frage:

Damit dieses Skript für jedes angeschlossene USB-Gerät funktioniert, ändern Sie die Regeldatei in diese

ACTION=="add", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/usr/local/my_script.sh"

asterik (*) gibt an, dass dies für jedes angeschlossene USB-Gerät erfolgen soll!

Das ist es! Stellen Sie sicher, dass das Skript ausführbar ist und schließen Sie Ihren USB an !!

Genießen!


0

Versuchen Sie, die Tilde durch den vollständigen Pfad zu Ihrem Home-Verzeichnis zu ersetzen. Ich weiß nicht, ob dies funktionieren wird, aber Sie sagen, dass das Skript funktioniert, wenn Sie es direkt ausführen, aber wenn es automatisch ausgeführt wird, funktioniert es nicht: Dies lässt mich denken, dass das Problem möglicherweise darin besteht, dass es von einem anderen ausgeführt wird Benutzer, wenn es automatisch ausgeführt wird und die Tilde für verschiedene Benutzer in unterschiedliche Werte aufgelöst wird.


Bitte lesen Sie die Kommentare, bevor Sie die Frage beantworten
Null Zeiger

Ich habe die Kommentare gelesen und dann die Frage beantwortet. Habe ich etwas falsch gemacht? Auf welchen Kommentar beziehen Sie sich besonders?
Toby 1 Kenobi

In Kommentaren wurden diese Vorschläge bereits gegeben und sie funktionierten nicht für mich. Deshalb sagte ich, lesen Sie die Kommentare
Nullzeiger

Oh ja, sorry, die letzten 5 Kommentare waren mir verborgen und ich habe sie nicht bemerkt. Mein Fehler!
Toby 1 Kenobi

@Nullpointer: Bitte bearbeiten Sie Ihre Frage und behalten Sie die vollständigen Informationen in der Frage, damit die Leute die Kommentare nicht lesen müssen ... Kommentare sind nicht Teil der Frage ... ;-)
Fabby

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.