3

Linux новичок на Gentoo здесь. Я пытаюсь написать правило udev, которое будет запускать скрипт Python и передавать некоторую информацию всякий раз, когда вставляется USB-устройство (в частности, USB-модем). Я имею:

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

в качестве отправной точки.

Прямо сейчас notify.py - исполняемый файл, который пытается помочь мне отладить и выглядит так:

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

Я не могу понять, как заставить $ attr {vendor} пройти; прямо сейчас только% k (ядро устройства) передается и печатается вместе с любыми другими строковыми аргументами, которые я хочу добавить. Я был по всему интернету, я пробовал "$ attr {vendor}" (ничего не выводит), "$ attrs {vendor}" (выводит "s {vendor}") и "% s {vendor}" (ничего не выводит). Я попытался изменить приоритет этого правила, если переменные еще не определены или что-то еще. Я просмотрел другие файлы правил, и ни один из них не делает то, что я делаю, но им удается использовать "$ attr {[кое-что]}".

Все еще сбивает с толку, если я напишу что-то вроде

GOTO+="$attr{vendor}"

vi выделяет это как строку, но

RUN+="$attr{vendor}"

и vi выделяет все по-другому. Я чувствую, что ошибка связана с тем, как работает RUN, или с моим неправильным использованием "$ attr", но я полностью потерян.

Эти сообщения, кажется, делают нечто похожее на то, что я пытаюсь сделать. Буду признателен за любую помощь или вклад в эту проблему.

1 ответ1

1

На случай, если это кому-нибудь поможет, я нашел два шага, которые помогли мне решить проблему.

Первым было убедиться, что правило выбрало родительское устройство для получения информации об атрибутах, поэтому я добавил

ATTRS{bDeviceClass} == "02"

иметь ссылку на правило для нужного сетевого устройства.

Вторым шагом, который мог быть ненужным после первого шага, было установить переменную окружения и вызвать ее так:

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

Это успешно прошло переменную. В конце концов, казалось, что $ attr и% s все еще не работают. Я застрял на этом так долго, что у меня сейчас нет мотивации играть с вещами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .