Estou usando disquetes como cartões de identificação. Para fazer isso (no raspi debian jessie) eu criei a seguinte regra do udev para iniciar um script que executa um programa Java para verificar as informações gravadas diretamente no dispositivo e disparar um relé se a placa for válida.
ATTR{idVendor}=="054c", ATTR{idProduct}=="002c", ACTION=="add", RUN+="/home/pi/doorman/udev.sh"
SUBSYSTEM=="block", KERNEL=="sda", OWNER="pi", GROUP="disk", MODE="0660"
Aqui está o udev.sh
#!/bin/bash
/usr/bin/java -jar /home/pi/doorman/Doorman.jar >> /home/pi/doorman/Doorman.log
Isso funciona. Meu programa Java aguarda um segundo antes de ser executado e o dispositivo ( /dev/sda
) está sempre lá. No entanto, quando eu envolvo a ação RUN ou a segunda linha do script em /bin/su pi -c "WRAPPED_COMMAND"
, o script é executado, mas não é possível ver /dev/sda
. As permissões em /dev/sda
são brw-rw---- 1 pi disk
. Meu palpite é que a primeira regra do udev executa seu script de forma síncrona, porque o dispositivo que ele detecta é o pai do dispositivo de bloco. Como atrasar o script até que a outra regra seja concluída? O que mais poderia explicar isso?
P.S. Eu sei que a segunda regra do udev é insegura, mas esse dispositivo provavelmente ficará off-line e a unidade de disquete USB será o único dispositivo SCSI já conectado. Eu vou refiná-lo quando ele funcionar.