Ubuntu Linux Правила Udev: можно ли запустить программу, написанную на C, с помощью правил Udev? - PullRequest
4 голосов
/ 24 января 2011

В настоящее время я работаю над проектом для запуска программы, написанной на C, когда USB-устройство подключено. Возможно ли это с помощью правил udev?

У меня есть программа для запуска Hello World.скрипт, когда я подключаю свое устройство.Однако он запускается несколько раз.

Текущий путь: /etc/udev/rules.d/98-local.rules

Текущее правило:

SUBSYSTEMS == "usb", ACTION == "add", RUN + = "/ usr / local / bin / USB.sh"

Путь скрипта: /usr/local/bin/USB.sh

Скрипт:

 #!/bin/bash
echo 'Hello World!' >>"/home/<username>/Desktop/udev.out"
exit

Я пробовал что-то подобное, чтобы запустить исполняемый файл:

 #!/bin/bash
usr/games/blackjack
exit

, набрав usr / games / blackjack, работает в терминалеоднако это не работает, когда USB-устройство вставлено.Тем не менее, я знаю, что скрипт запущен, потому что я объединил их в одном файле, и был создан hello world.

Я также попытался запустить исполняемый файл из своей учетной записи пользователя, как показано ниже:

SUBSYSTEMS=="usb", ACTION=='add", RUN+="/bin/su tyler -c '/usr/local/bin/USB.sh'"

Однако это тоже не работает.

Это проблема с привилегиями устройства или просто невозможно запустить исполняемый файл?

* примечание: я прочитал объяснения правила udev в http://reactivated.net/writing_udev_rules.html.

Ответы [ 3 ]

1 голос
/ 31 августа 2011

Другая причина может заключаться в том, что udev работает в собственной среде.Это как если бы вы запускали свою программу из tty: она запускается, но xserver отсутствует ...

Однако это чисто предположение, основанное на моих собственных экспериментах.Было бы хорошо, если бы кто-то, кто знает udev лучше, мог подтвердить это.

РЕДАКТИРОВАТЬ: добавьте следующее в ваш скрипт:

set -x
xhost local:YOURUSERNAME
export DISPLAY=:0.0

И, возможно, перезагрузите ваши правила с помощью udevadm control --reload-rules.

(Источник: http://ubuntuforums.org/showthread.php?t=994233)

1 голос
/ 31 августа 2011

Если вы пишете программу на C, вы можете использовать libudev .Он имеет простой API, который позволяет перечислять и отслеживать устройства. Здесь вы найдете хороший учебник.

0 голосов
/ 25 января 2011

Если вы можете запустить скрипт оболочки, вы можете запустить исполняемый файл. Неважно, был ли он создан C или нет.

Кажется, вам не хватает косой черты. Этот путь почти наверняка должен быть /usr/games/blackjack, а не user/games/blackjack.

Я не знаю, правильно ли вы ввели его в своем терминале и неправильно в своем скрипте, или у вас просто другая среда. Если система UDEV не предназначена специально для воссоздания среды вашего терминала, нет никаких причин, почему они были бы одинаковыми.

...