2015-01-09 3 views
1

저는 나무 딸기 파이가있는 Noob입니다. 모든 설정을 가지고 있고 브라우저를 통해 shell_exec을 사용하여 파일을 실행하려고합니다. 여기 /dev/mem에 액세스 할 수 없습니다. Raspberry Pi에서 루트로 실행하십시오.

는 파이썬 파일의 내용이다 :

#! /usr/bin/python 

import time 
import RPi.GPIO as GPIO 

PIN_17 = 17 # Define LED colour and their GPIO pin 
GPIO.setmode(GPIO.BCM) 

GPIO.setup(PIN_17, GPIO.OUT) # Setup GPIO pin 

GPIO.output(PIN_17, True) #Turn on 
time.sleep (1)    #Wait 
GPIO.output(PIN_17, False) #Turn off 

GPIO.cleanup() #Useful to clear the board 

나는라는 디렉토리 /home/pi/에있는 파일이 trigger_pin.py

나는 아래의 PHP의 명령을 사용하여 브라우저를 통해 파일을 실행하려고 remote.php :

<?php 
$output = shell_exec("cd /home/pi/ && ./trigger_pin.py 2>&1"); //run command 
echo "$output"; //output from command 
?> 

내가 얻고 출력은 다음과 같습니다

Traceback (most recent call last): File "./trigger_pin.py", line 9, in GPIO.setup(PIN_17, GPIO.OUT) # Setup GPIO pin RuntimeError: No access to /dev/mem. Try running as root!

답변

4

기본적으로 Raspberry Pi의 GPIO 인터페이스에는 수퍼 유저 ("root") 권한이 필요합니다. 루트 사용자 셸이 열려있을 수 있으므로 명령 줄에서 문제없이 Python 스크립트가 실행됩니다. 반면 PHP 응용 프로그램 서버는 다른 사용자로 실행될 가능성이 큽니다.

가장 직접적인 해결책은 /etc/sudoers에 PHP 응용 프로그램 서버의 사용자 (예 : www-data)를 추가하여 권한있는 사용자를 만드는 것입니다.

www-data ALL = NOPASSWD: ALL 

그리고는 sudo으로 권한을 이관

shell_exec("cd /home/pi/ && sudo ./trigger_pin.py 2>&1"); 

이렇게하면, 당신은 당신의 웹 서버를 실행할 수 있는지의 안전을 확인 절대적으로 확신 할 (즉, 맹목적으로 설치하지 마십시오 소스 코드를 검토하는 웹 스크립트).

양자 택일로, 당신은 슈퍼 유저 권한 (그래서 응용 프로그램에없는)와 함께 실행 pigpiopigpiod 데몬을 사용하는 파이썬 스크립트를 리팩토링 할 수 있습니다. 또는 setuid을 사용하여 Quick2Wire의 GPIO Admin과 같은 루트로 실행되는 별도의 도구를 사용할 수도 있습니다.

Raspberry Pi Stack Exchange에서 자세한 도움말을 찾을 수도 있습니다.

0

이 명령을 사용

$ sudo python filename.py 
+0

영업 이익은 오히려 웹 응용 프로그램에서 호출 스크립트에서 exec'ing, 명령 줄에서이 실행되고 있지 않습니다. –