Como faço para que as regras do udev funcionem?

6

Eu gostaria de aprender as regras do udev. Aqui está o que eu faço:

victor@X301A1:~$ ls /etc/udev/rules.d/
70-persistent-cd.rules  70-persistent-net.rules  README

Então:

victor@X301A1:~$ sudo gedit /etc/udev/rules.d/01-my-first-udev.rules

Minha regra:

ACTION=="add", RUN+="echo HELLO ! > /home/victor/udev_test_log.txt"

Depois de salvar o arquivo:

 sudo udevadm control --reload-rules

Eu esperava que conectar um dispositivo USB fosse gravar no arquivo, mas nada acontece. Onde estou errado?

    
por Victor Lamoine 19.05.2013 / 15:14

2 respostas

9

No RUN você deve colocar um caminho para um script. Veja man udev :

  

Adicione um programa à lista de programas a serem executados para um              dispositivo. Isso só pode ser usado para tarefas de execução muito curtas. Corrida              um processo de evento por um longo período de tempo pode bloquear ainda mais              eventos para este ou um dispositivo dependente. Tarefas de longa duração precisam              ser imediatamente separado do próprio processo do evento.

Por exemplo, crie um novo script, digamos hello.sh em /lib/udev com sudo -H gedit /lib/udev/hello.sh e coloque as próximas linhas em:

#!/bin/bash

echo HELLO ! > /home/<username>/udev_test_log.txt

Altere <username> com seu nome de usuário. Salve o arquivo, feche-o e torne-o executável com:

chmod +x /lib/udev/hello.sh

Adicione uma nova regra ao seu arquivo /etc/udev/rules.d/01-my-first-udev.rules da seguinte forma:

ACTION=="add", RUN+="/lib/udev/hello.sh"
    
por Radu Rădeanu 19.05.2013 / 17:21
3

Na verdade, não consegui uma referência para isso; Mas é algo que se passa por Try & amp; Erro.

  • udev requer o caminho completo do script / programa / arquivo usado em PROGRAM , TEST , RUN ou IMPORT .

  • udev não suporta operações de redirecionamento.

  • udev pode manipular o comando com argumentos.

  • udev tem substituição de variável.

Assim você pode escrever um script multifuncional (não apenas um script de tarefa cega / simples :)), Exemplo de certeza de que funciona para mim:

KERNEL=="2-1.2:1.[0-9]*", DRIVER!="usb-storage", RUN+="/bin/sh -c 'echo -n %k,%p > /home/sneetsher/Desktop/%n.txt'"
  • /bin/sh caminho absoluto
  • O redirecionamento > é manipulado dentro do shell
  • Argumentos do comando -c '...' 2
  • Variáveis %k , %p , %n udev (nome do kernel do dispositivo, caminho do dispositivo, número do dispositivo)

Então, para o seu caso:

ACTION=="add", RUN+="/bin/sh -c 'echo HELLO ! > /home/victor/udev_test_log.txt'"
    
por user.dz 24.10.2014 / 11:46

Tags