O script de execução UDEV não pode ler o dispositivo a menos que a raiz

0

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.

    
por Eugene Wolffe 23.08.2018 / 09:08

0 respostas