2011-01-24 3 views
4

현재 USB 장치가 연결되어있을 때 C로 작성된 프로그램을 실행하는 프로젝트를 진행 중입니다. udev 규칙으로이 작업을 수행 할 수 있습니까?Ubuntu Linux Udev 규칙 : udev 규칙을 통해 C로 작성된 프로그램을 실행할 수 있습니까?

내 장치를 연결할 때 현재 Hello World 스크립트를 실행하고 있습니다. 그러나 두 번 이상 실행합니다.

현재 경로 :

현재 규칙을 /etc/udev/rules.d/98-local.rules :

== "USB", 액션 == "추가", RUN

서브 시스템 + = "/ usr/지방/빈/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/게임/블랙 잭은 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으로 광범위하게 읽었습니다.

+0

프로그램 실행 여부를 테스트하는 방법은 무엇입니까? –

+0

글쎄, 나는 대화 형 프로그램이 이런 방식으로 시작되기를 바란다. 그래서이 게임의 경우에는 게임이 시작되고 게임을 할 수있을 것이다. 나는 이것에 대해 약 10 시간 이상을 가지고있다. 나는 그것을 불가능하다고 생각하기 시작했다. – Tyler

+0

두 bash 스크립트는 모두 새긴 앞 ('#!/bin/bash') 앞에 여분의 공백이 있습니다. 이 경우 (스크립트는 기본'/ bin/sh'로 호출 될 것입니다.) 문제는 아니지만 수정해야합니다. –

답변

0

쉘 스크립트를 실행할 수 있으면 실행 파일을 얻을 수 있습니다. 그것이 C에 의해 생성되었는지 아닌지는 중요하지 않습니다.

슬래시가 누락 된 것 같습니다. 그 경로는 거의 확실하게 /usr/games/blackjack이어야하며 user/games/blackjack이 아야합니다.

터미널에 제대로 입력했거나 스크립트에 부적절하게 입력했는지, 아니면 단순히 환경이 다른지 잘 모릅니다. UDEV 시스템이 의도적으로 귀하의 터미널 환경을 재현하도록 설계되지 않았다면, 그들이 동일 할 이유가 없습니다.

+1

이것은 프로세스를 시작하는 데 도움이되지만 Tyler가 프로그램이 대화식으로 실행되기를 기대하는 것처럼 보입니다. 이는 가능하다면 경로를 올바르게 가져 오는 것보다 더 많은주의가 필요합니다. –

+0

벤이 맞습니다. 추신. 벤이 무슨 치료를하고 있는지 말해 줄 수 있니? 아마도 올바른 방향으로 나를 가리 키기 위해? 나는 일종의 손실이다. – Tyler

1

또 다른 이유는 udev가 자신의 환경에서 실행되는 것일 수 있습니다. 마치 tty에서 프로그램을 실행하는 것과 같습니다. 시작하지만 x 서버가 없습니다. ...

그러나 이것은 내 실험을 기반으로하는 순수한 추측입니다. udev를 더 잘 알고있는 사람이 이것을 확인할 수 있다면 좋을 것입니다.

편집 :

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

을 그리고 어쩌면 udevadm control --reload-rules과 규칙을 다시로드 : 당신의 스크립트에 다음을 추가합니다.

(출처 : http://ubuntuforums.org/showthread.php?t=994233)

1

당신이 C에서 프로그램을 작성하는 경우, 당신은 libudev를 사용할 수 있습니다. 그것은 장치를 열거하고 모니터 할 수있는 간단한 API를 가지고 있습니다. Here 멋진 자습서를 찾을 수 있습니다.

관련 문제