Regras do Udev não passam parâmetros

3

Novato do Linux no Gentoo aqui. Eu estou tentando escrever uma regra do udev que iria executar um script Python e passar algumas informações sempre que um dispositivo usb (especificamente um modem usb) é inserido. Eu tenho:

SUBSYSTEM == "usb", ACTION == "add", $ATTRS{vendor} = "?*", RUN += "/home/.../notify.py %k '$attr{vendor}'"

como ponto de partida.

Agora, notify.py é um executável que tenta me ajudar a depurar e se parece com:

#!/usr/bin/python
import sys
log = open("log.txt", 'a')
for a in sys.argv:
    log.write(a + "\n")
fi.close()

Não consigo descobrir como "$ attr {vendor}" passar; agora, apenas% k (o kernel do dispositivo) é passado e impresso, junto com quaisquer outros argumentos de string que eu gostaria de adicionar. Eu estive em toda a internet, eu tentei "$ attr {vendor}" (não produz nada), "$ attrs {vendor}" (saídas "s {vendor}") e "% s {vendor}" (nada sai). Eu tentei mudar a prioridade desta regra, caso as variáveis não estivessem sendo definidas ainda ou algo assim. Eu olhei para outros arquivos de regras, e nenhum deles faz exatamente o que eu estou fazendo, mas eles conseguem usar "$ attr {[algo]}".

Ainda confuso é se eu escrever algo como

GOTO+="$attr{vendor}"

viola como uma string, mas

RUN+="$attr{vendor}"

e vi destaca tudo de forma diferente. Eu sinto que o bug tem algo a ver com a maneira como o RUN funciona, ou com meu uso impróprio de "$ attr", mas estou totalmente perdido.

Esses posts parecem fazer algo parecido com o que estou tentando fazer. Eu apreciaria qualquer ajuda ou entrada sobre este problema.

    
por Ivoirians 20.07.2012 / 20:33

1 resposta

1

No caso de ajudar alguém um dia, encontrei dois passos que me ajudaram a resolver o problema.

O primeiro era garantir que a regra tivesse selecionado um dispositivo pai para extrair informações de atributos, então adicionei um

ATTRS{bDeviceClass} == "02"

para que o link da regra seja o dispositivo de rede desejado.

O segundo passo, que pode ter sido desnecessário após o primeiro passo, foi definir uma variável de ambiente e chamá-la como tal:

ENV{var} = ATTRS{bDeviceClass}, RUN+="/home/.../notify.py '$env{var}'"

Isso passou com sucesso a variável. No final, parecia que $ attr e% s ainda não funcionavam. Eu fiquei preso nisso por tanto tempo que não tenho a motivação agora para brincar com as coisas.

    
por 23.07.2012 / 18:52