Inicie o script ao conectar o telefone pelo usb

5

Tentando executar um script quando meu telefone está conectado via USB. Eu fiz uma regra do udev em /etc/udev/rules.d/85-lazydroid.rule que se parece com isso:

ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="428c", RUN+="/home/joel/.lazydroid"

E o script .lazydroid tem esta aparência:

#!/bin/bash
exec adb forward tcp:8080 tcp:8080 &
exec chromium-browser 127.0.0.1:8080 --new-window &

O script em si é executado corretamente, mas o problema é que não consigo executar o script após a inserção do telefone.

Tem o ID correto de acordo com lsusb | grep Motorola

Bus 002 Device 042: ID 22b8:428c Motorola PCS

Alguma ideia?

[EDITAR] Ok, agora eu sei que a regra do udev está em execução, pois cria o symlink. Fiz algumas alterações à regra, veja abaixo:

SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="428c", SYMLINK+="phone", RUN+="/bin/sh /home/joel/.lazydroid.sh"

Mas o script ainda não será executado. E se eu corro separadamente, ainda funciona perfeitamente.

    
por choel 12.04.2012 / 10:43

3 respostas

3

Você pode testar se sua regra será atingida ou não executando

udevadm test /path/to/sysfs/dev

Você pode encontrar o nó sysfs dos dispositivos usando isto:

udevadm info -q path -n /dev/sda  #To find sysfs node for first HDD

Então, para envolver tudo isso, será:

udevadm test $(udevadm info -q path -n /dev/sda) 2>&1 | more

Use o nome do seu script ou leia-o linha por linha, se quiser. Se o seu script for chamado, mas não estiver sendo executado, lembre-se de que você não possui um ambiente típico em um script do udev e, portanto, deve chamar todos os programas pelo caminho completo ou recriar o ambiente ao seu gosto. Tente substituir adb e chromium-browser por seus caminhos absolutos ( which adb e which chromium-browser )

O segundo exec no seu script bash não será executado como esperado, já que o ambiente não especifica um sistema de janelas para o lançamento do Chromium. Acho que entendi o que você estava tentando fazer aqui, mas o udev foi projetado ser não interativo.

Em resposta ao seu comentário. Existem algumas telas abstratas em todos os sistemas unix chamados de displays. X11, que é o gerenciador de janelas (pense em explorer.exe, mais ou menos) para o Ubuntu ocupa um deles (7 ou 8 eu acho, eu trabalho via ssh principalmente). Quando você executa um programa gráfico a partir da linha de comando (digamos, gedit), ele verifica a variável de ambiente DISPLAY para determinar em qual tela será desenhada.

Tem mais a ver com isso, e eu nunca tive uma compreensão firme do que as "outras coisas" estão fazendo lá, mas eu tentaria fazer algumas coisas de diagnóstico a partir do seu script:

mkdir /tmp/udev-script
/usr/bin/printenv > /tmp/udev-script/environment.log
/bin/echo "My script was run!" > /tmp/udev-script/script.log
DISPLAY=:8      # or :7, play around with that
export DISPLAY  # Promote shell variable to environment variable
exec /path/to/chromium 2> /tmp/udev-script/chromium.log 1>&2 &
exit            # This is important for udev, see sources

source1 (udev)
source2(man udevadm)
source3 (EXEC)
source4 (DISPLAY)

    
por Huckle 14.04.2012 / 20:54
1

Acho que você está no caminho correto.

Você provavelmente deseja dividir isso em dois scripts -

Use um script básico no udev, que executa outro script e sai; a saída é importante, porque a regra do udev esperará que o script um e dois sejam concluídos antes da montagem.

Seu .lazydroid deve ser

#!bin/bash
/home/joel/auto_mount.sh & exit

Conceder direitos de execução:

chmod +x .lazydroid

Em seguida, /home/joel/auto_mount.sh deve ser o conteúdo do seu arquivo .lazydroid original

Adicione um sleep 5 para esperar 5 segundos antes de executar o restante do seu script.

Novamente, dê a ele direitos de execução:

chmod +x auto_mount.sh

crédito total

    
por fossfreedom 14.04.2012 / 12:40
0

Acho que o problema está na maneira como você especificou RUN Você deve escrever RUN+="/bin/bash /home/joel/.lazydroid.sh" Também primeiro tente executar um script simples como copiar um arquivo existente para outro local.

Espero que ajude;)

    
por Sumit Kshirsagar 07.06.2013 / 05:48

Tags