Udev-Regel für Android funktioniert nicht mit Go-MTPFS

Udev-Regel für Android funktioniert nicht mit Go-MTPFS

Unter Ubuntu 12.04 löst meine Regel ein Skript aus, das aufgerufen wird, motoe.shwenn ein Motorola Moto E an den USB-Anschluss des Computers angeschlossen wird. Meine benutzerdefinierte Regel funktioniert nicht.

Es gilt die Regel:

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e76", RUN+="/usr/local/bin/motoe.sh"

motoe.shIst:

#!/bin/bash

motoemount.sh & motoedesktop.sh

motoemount.shIst:

#!/bin/bash

go-mtpfs /media/MyAndroid

motoedesktop.shIst:

#!/bin/bash

gmessage -center -timeout 3 -buttons OK:0 "message to "

rdesktop -u username -d domain -r disk:motoe=/media/MyAndroid/Interno/Download ip_address -a 8 -k pt-br

gmessage -center -timeout 3 -buttons OK:0 "another message to the user" &
umount /media/MyAndroid/

Für alle .sh-Skripte ist die Ausführungsberechtigung festgelegt.

Ich habe versucht, SUBSYSTEM, SUBSYSTEMS, mit DRIVER ohne DRIVER zu verwenden, ohne Wirkung.

Ich weiß nicht, was ich ausgelassen habe. Wenn ich es motoe.shvon einem Terminal aus ausführe, läuft es korrekt.

Antwort1

-1- Seien Sie vorsichtig, wenn Sie ein externes Programm ausführen, da udevdie Ausführung während der Ausführung des externen Programms angehalten wird. Besser gesagt, es wird gewartet, bis das externe Programm beendet wird, bevor es fortfährt. Sie können ein langwieriges Programm immer noch ausführen, müssen es jedoch sofort „abkoppeln“, indem Sie es im Hintergrund ausführen. In diesem Fall motoe.shsollte yr wahrscheinlich lauten:

#!/bin/bash
{ 
   motoemount.sh
   motoedesktop.sh
} &

was gleichbedeutend ist mit { motoemount.sh; motoedesktop.sh }&, d. h. Ausführenmotoedesktop.sh bedingungslosnachdem motoemount.shes beendet wurde.

Beachten Sie, dass :

$ motoemount.sh &; motoedesktop.sh

bedeutet, dass motoemount.shund motoedesktop.shasynchron ausgeführt werden, d. h. motoedesktop.shdie Ausführung beginnt, bevor motoemount.shes überhaupt beendet wird.

$ motoemount.sh && motoedesktop.sh

ist nicht dasselbe. In diesem Fall motoedesktop.shwird NUR ausgeführt, wenn der Exit-Wert motoemount.sh„0“ ist.

[....] Wenn ich motoe.sh von einem Terminal aus ausführe, läuft es korrekt

-2- udevführt keine externen Programme auf einem aktiven Terminal aus und führt sie nicht im Kontext einer Shell aus. Stellen Sie sicher, dass Ihr Programm als ausführbar markiert ist. Wenn es sich um ein Shell-Skript handelt, stellen Sie sicher, dass es mit einem entsprechenden Shebang beginnt (z. B. #!/bin/sh). Die angezeigte Umgebung udevist nicht die gleiche Umgebung, die Sie (oder wer auch immer $USER ist) auf der Konsole erhalten. Geben Sie daher absolute Pfade für alle Ihre Befehle an:

motoemount.sh -> /path/to/motoemount.sh
motoedesktop.sh -> /path/to/motoedesktop.sh
go-mtpfs-> ...
gmessage-> ...
rdesktop-> ...
umount ->/bin/umount

Um einen Pfad für Systembefehle (wie umount) zu finden, können Sie den Befehl which [cmd]ohne Klammern verwenden, zB:

$ which umount
/bin/umount

-3- Überprüfen Sie, ob Ihr Prozess über ausreichende Berechtigungen zum Unmounten verfügt/media/MyAndroid/

[....] Wenn ich motoe.sh von einem Terminal aus ausführe, läuft es korrekt

-4- Wenn Sie auf dem Bildschirm drucken (ich bin mir nicht sicher, ob Sie das tun, da ich mich damit nicht auskenne, gmessageaber es sieht so aus), stellen Sie sicher, dass Ihre Umgebungsvariable DISPLAY gesetzt (von udev erkannt) und exportiert (an Sub-Shells weitergegeben) ist. Andernfalls erwarten Sie keine Standardausgabe auf Ihrem Terminal. Ein Beispiel finden Sie unterDas, insbesondere der # set DISPLAYAbschnitt.

verwandte Informationen