Eu preciso da sua ajuda. :-)
Primeiro quero desculpar meu inglês, sou da Alemanha.
Eu tenho um script Bash que deve ser executado toda vez que um Android Phone estiver conectado via USB. Isso é feito pela minha regra do udev. Funciona, mas existe um grande problema.
Um pouco mais de fundo.
Meu script Bash deve instalar aplicativos em todos os telefones Android conectados separadamente. Para conseguir isso eu uso o Android Debug Bridge (ADB) e o modo de depuração USB no dispositivo Android. Toda vez que você conecta um telefone à porta USB, primeiro é necessário permitir a conexão USB-Debugging no telefone para acessá-lo através do ADB.
Como eu disse, funciona, mas ao conectar o dispositivo é montado e pedir para permitir a depuração USB. Em seguida, o script é iniciado e imediatamente para e aguarda porque o dispositivo é desmontado. Em seguida, o dispositivo se monta novamente, pede novamente para permitir a depuração USB e uma segunda instância do script bash é chamada e ambas as instâncias do script agora são executadas.
Isso é pior e ineficiente.
Espero que alguém possa me ajudar.
Aqui está um código.
Regra UDEV
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="12d1", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="24e3", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="17ef", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="1004", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="22b8", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="10a9", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="1d4d", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="054c", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="0fce", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="091e", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev" RUN+="/usr/local/bin/tmp.sh $attr{serial}"
tmp.sh chamado por meio da regra UDEV
#!/bin/bash
echo /usr/local/bin/installApps.sh $1 | at now
installApps.sh chamado por meio do tmp.sh
#!/bin/bash
cd /home/android/Schreibtisch/Apps
adb -s $1 wait-for-device
for APK in $(ls *.apk);
do
adb -s $1 install $APK
done
Editar 1:
Aqui está minha saída de udevadm monitor
KERNEL[384.540419] add /devices/pci0000:00/0000:00:1d.7/usb1/1-2 (usb)
KERNEL[384.659326] add /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0 (usb)
KERNEL[384.660123] add /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.1 (usb)
KERNEL[384.660969] add /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.1/tty/ttyACM0 (tty)
KERNEL[384.663343] add /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.2 (usb)
UDEV [384.663375] add /devices/pci0000:00/0000:00:1d.7/usb1/1-2 (usb)
KERNEL[384.663386] add /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.3 (usb)
UDEV [384.669236] add /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0 (usb)
UDEV [384.670955] add /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.3 (usb)
UDEV [384.672776] add /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.1 (usb)
UDEV [384.674355] add /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.2 (usb)
UDEV [384.690927] add /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.1/tty/ttyACM0 (tty)
A saída dele não difere de forma alguma na minha segunda porta USB.
Editar 2:
De alguma forma, consegui reduzir os erros.
Mas agora há um problema ligeiramente diferente e não sei se um arquivo de bloqueio ajudará.
Agora, em quase todos os 10 dispositivos, nem todos os aplicativos estão instalados. Eu verifiquei através de um arquivo de log qual é o problema.
A Mensagem Permitir Depuração USB mostra apenas uma vez, mas a regra do udev é executada duas vezes no mesmo momento no mesmo segundo. Mas isso acontece como dito apenas para cada 10º dispositivo.
Qual poderia ser a razão para isso e como eu poderia evitar isso?