O que eu tento alcançar é bem simples.
Sempre que eu conecto um dispositivo bluetooth ao meu Rspberry Pi 3 (executando o Raspbian), um script deve adicionar uma entrada a um arquivo de log.
Simples, porque as coisas difíceis já estão funcionando bem.
Já emparelhei o meu telemóvel e a seguinte regra é acionada sempre que se liga ou desliga:
pi@ras-pi:/ $ cat /etc/udev/rules.d/99-input.rules
SUBSYSTEM=="input",GROUP="input",MODE="0660"
KERNEL=="input[0-9]*",RUN+="/bin/bash -c 'echo TEST > /tmp/logfile.log'"
No entanto, o resultado é sempre um arquivo de log inexistente e um código de retorno de 1:
pi@ras-pi:/ $ journalctl -xe -u systemd-udevd
Sep 05 12:54:09 ras-pi systemd-udevd[2333]: Process '/bin/bash -c 'echo TEST > /tmp/logfile.log'' failed with exit code 1.
Neste ponto, observe que este é um exemplo muito simplificado.
Originalmente, eu tinha um script autônomo que era chamado com sucesso e que tinha como objetivo gravar algumas informações no arquivo de log usando o redirecionamento de eco e saída.
Eu testei vários diretórios de destino e locais do script para teste, mas todos com o mesmo resultado (falha com o código de saída 1).
Quando executo o script na sessão bash atual, ele funciona bem, assim como o comando mencionado na parte superior:
pi@ras-pi:/ $ /bin/bash -c 'echo TEST > /tmp/logfile.log'
Quando eu removo o redirecionamento de saída, para que ele não tente gravar em um arquivo, eu não recebo a mensagem de erro no diário, então eu acho que o script funciona bem e é apenas o redirecionamento que causa o erro. problema.
O mesmo é o caso do exemplo original:
KERNEL=="input[0-9]*",RUN+="/bin/bash -c 'echo TEST'"
Claro, meu primeiro palpite foi 'permissões', então este é o diretório tmp:
pi@ras-pi:/ $ ls -la /
(...)
drwxrwxrwt 10 root root 4096 Sep 5 12:54 tmp
(...)
E este é o script que eu estava executando (só para ser completo):
pi@ras-pi:/ $ ls -la /usr/bin/bt_connect
-rwxr-xr-x 1 root root 110 Sep 5 11:36 /usr/bin/bt_connect
Ah, e a propósito: Adicionar sudo
não ajuda:
pi@ras-pi:/ $ cat /etc/udev/rules.d/99-input.rules
SUBSYSTEM=="input",GROUP="input",MODE="0660"
KERNEL=="input[0-9]*",RUN+="/bin/bash -c 'sudo echo TEST > /tmp/logfile.log'"
Que resultados novamente em:
Sep 05 13:13:23 ras-pi systemd-udevd[2398]: Process '/bin/bash -c 'sudo echo TEST > /tmp/logfile.log'' failed with exit code 1.
Alguém por favor pode me ajudar a resolver o problema?
Update: Pelo menos eu finalmente encontrei uma maneira de gerar alguma saída para depuração escrevendo não em um arquivo, mas em / dev / kmsg.
Este é apenas um exemplo do meu script:
echo $MSGCAT Path=$PATH >> /dev/kmsg
Desta forma, descobri que o script está sendo executado sob o usuário 'root', mas até agora não descobri por que a saída para qualquer arquivo não funciona.