Detectar o driver USB conectado e executar um determinado arquivo nele

1

Eu tenho um tipo de quiosque instalado no Ubuntu baseado no Ubuntu Server 14.0.2 que executa um aplicativo no Chrome. O quiosque não tem conexão com a Internet, portanto, as atualizações para o aplicativo devem ser feitas manualmente. Eu quero que o processo de atualização seja o mais fácil possível, então o que eu quero apresentar ao usuário final é a capacidade de simplesmente conectar ao PC uma unidade USB e a unidade USB será automaticamente detectada e tentará executar um determinado arquivo. . Por exemplo, eu plugue uma unidade USB e o Ubuntu Server tenta encontrar um arquivo update-2.3.sh e executá-lo. Esse arquivo update-2.3.sh é apenas um arquivo que executará alguns comandos e trocará arquivos do USB para o Disco Rígido, resultando em um novo código. Eu acho que isso deve ser executado com privilégios de administrador ou talvez apenas definir o diretório de código para 777 deve ser suficiente?

Um exemplo de arquivos na unidade USB:

├───update-2.3.sh
├───/updates
|   └───file1.php
|   └───file2.php
    └───/sub
        └───another.php

Agora que o arquivo update-2.3.sh executará determinados comandos, como mv , para substituir arquivos existentes (há uma pasta '~ / code / app / updates) e alguns comandos como admin:

sudo stop kiosk
(sudo?) mv updates ~/code/app/
sudo start kiosk

* não testei esse comando mv , espero que funcione

Isso é possível fazer uma coisa dessas?

    
por kfirba 04.09.2015 / 10:04

1 resposta

1

@ drifter104 está correto, você pode conseguir isso com as regras do udev. Eu tinha uma configuração semelhante em que queria conectar um pen drive criptografado e fazer com que ele automaticamente executasse um script de backup para fazer backup de alguns arquivos importantes do meu computador de trabalho.

Vou dar o exemplo do que fiz para que o meu funcionasse.

De acordo com o README do udev, /etc/udev/rules.d/README:

If the ordering of files in this directory are not important to you, it's recommended that you simply name your files "descriptive-name.rules" such that they are processed AFTER all numbered rules in both this directory and /lib/udev/rules.d and thus override anything set there.

Portanto, eu chamei meu arquivo de regras:

/etc/udev/rules.d/encrypted-backup.rules

Outras guias por aí terão os conjuntos para capturar o número do modelo do thumb e / ou seu número de série, mas não posso usá-lo. Eu não queria que meus scripts de backup fossem executados até que o volume criptografado fosse montado e descriptografado. Portanto, eu estou fazendo isso de / sys / block / dm-3 (o volume criptografado), em oposição ao próprio dispositivo de hardware (/ sys / block / sdb). Uma vez que eu tenha inserido minha senha para descriptografar a unidade, ENTÃO deixe o script de volta fazer a coisa certa. Eu imagino que você queira disparar a partir do próprio dispositivo de hardware.

Portanto, crie a regra do udev que é acionada para 'dm-3' ser descriptografada e adicionada com sucesso. Nesse arquivo de regras acima, eu farei estas linhas:

KERNEL=="dm-3", ACTION=="add", SUBSYSTEM=="block", RUN+="/usr/local/bin/backup.sh"

Nota especial: Se você não adicionar o ACTION == "add", ele executará seu script ao montar e desmontar o disco. :)

Agora, para sua atualização, você pode simplesmente executar o script de atualização.

Espero que essa informação ajude você!

    
por 05.09.2015 / 17:04