Нет доступа к / dev / mem. Попробуйте запустить с правами root на Raspberry Pi

Я нуб с малиновым пи. У меня есть все настройки, и я пытаюсь запустить файл через браузер, используя shell_exec,

Вот содержимое файла python:

#! /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
?>

Вывод, который я получаю:

Трассировка (последний вызов был последним): Файл «./trigger_pin.py», строка 9, в GPIO.setup (PIN_17, GPIO.OUT) # Настройка вывода GPIO RuntimeError: Нет доступа к / dev / mem. Попробуйте запустить как root!

1

Решение

По умолчанию для интерфейса GPIO Raspberry Pi требуются права суперпользователя («root»). У вас может быть открыта оболочка пользователя root, поэтому выполнение сценария Python работает без проблем из командной строки. Принимая во внимание, что ваш сервер приложений PHP, скорее всего, работает от имени другого пользователя.

Наиболее простым решением является добавление пользователя сервера приложений PHP (например, www-data) чтобы /etc/sudoers, который создаст привилегированного пользователя.

www-data  ALL = NOPASSWD: ALL

А затем увеличить ваши разрешения с sudo:

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

Если вы сделаете это, убедитесь, что вы проверяете безопасность работы вашего веб-сервера (то есть не устанавливайте вслепую веб-скрипты с просмотром исходного кода).

Кроме того, вы можете изменить свой скрипт Python для использования pigpio«s pigpiod демон, который работает с привилегиями суперпользователя (так что ваше приложение не должно). Или вы можете использовать отдельный инструмент, который использует setuid запускаться с правами root, такими как Quick2Wire GPIO Admin.

Вы также можете найти больше помощи на Raspberry Pi Stack Exchange.

4

Другие решения

Используйте эту команду

$ sudo python filename.py
-1

По вопросам рекламы [email protected]