La regla udev para Android no funciona con go-mtpfs

La regla udev para Android no funciona con go-mtpfs

En Ubuntu 12.04, mi regla activa un script que se llama motoe.shcuando un Motorola Moto E está conectado al puerto USB de la máquina. Mi regla personalizada no funciona.

La regla es:

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

motoe.shes:

#!/bin/bash

motoemount.sh & motoedesktop.sh

motoemount.shes:

#!/bin/bash

go-mtpfs /media/MyAndroid

motoedesktop.shes:

#!/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/

Todos los scripts .sh tienen el permiso de ejecución establecido.

Intenté usar SUBSISTEMA, SUBSISTEMAS, con DRIVER sin DRIVER y sin efecto.

No me imagino lo que me perdí. Si ejecuto motoe.shdesde una terminal, se ejecuta correctamente.

Respuesta1

-1- Tenga cuidado al ejecutar un programa externo ya que udevla ejecución se suspenderá durante la ejecución del programa externo. Mejor dicho, esperará hasta que el programa externo salga antes de continuar. Aún puedes ejecutar un programa largo pero debes "separarlo" inmediatamente, ejecutándolo en segundo plano. En su caso, motoe.shprobablemente debería leer:

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

lo que equivale a { motoemount.sh; motoedesktop.sh }&, es decir, ejecutarmotoedesktop.sh incondicionalmentedespués de motoemount.shhaber salido.

Tenga en cuenta que :

$ motoemount.sh &; motoedesktop.sh

significa que motoemount.shy motoedesktop.shse ejecutan de forma asincrónica, es decir, motoedesktop.shcomienzan a ejecutarse incluso antes motoemount.shde salir.

$ motoemount.sh && motoedesktop.sh

no es lo mismo. En ese caso, motoedesktop.shse ejecuta SÓLO si el valor de salida motoemount.shes "0".

[....] Si ejecuto motoe.sh desde una terminal, se ejecuta correctamente

-2- udevno ejecuta programas externos en ningún terminal activo y no los ejecuta bajo el contexto de un shell. Asegúrese de que su programa esté marcado como ejecutable; si es un script de shell, asegúrese de que comience con un shebang apropiado (por ejemplo, #!/bin/sh). El entorno que udevve no será el mismo que usted (o quien sea $USER) tiene en la consola. Así que especifica rutas absolutas para todos tus comandos:

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

Para encontrar una ruta para los cmds del sistema (como umount), puede usar el cmd which [cmd]sin corchetes, por ejemplo:

$ which umount
/bin/umount

-3- Verifique que su proceso tenga privilegios suficientes para desmontar/media/MyAndroid/

[....] Si ejecuto motoe.sh desde una terminal, se ejecuta correctamente

-4- Si imprime en la pantalla (no estoy seguro de hacerlo, ya que no estoy familiarizado con esto, gmessagepero parece que sí), asegúrese de que su variable de entorno DISPLAY esté configurada (conocida por udev) y exportada (pasada a sub- conchas). De lo contrario, no espere que aparezca ninguna salida estándar en su terminal. Para un ejemplo vereste, en particular la # set DISPLAYsección.

información relacionada