Перейти к содержимому

Используйте / sys / class / gpio / в Python без прав root

5

Я хочу взаимодействовать с выводами GPIO с помощью модуля Python Ablib . И я хочу сделать это без прав root. Как мне этого добиться?

Когда я создаю ablib.Pinэкземпляр, модуль открывается /sys/class/gpio/exportи записывает в него номер пин-кода. Первоначально это вызывает IOErro:

IOError: [Errno 13] Permission denied: '/sys/class/gpio/export' 

Это можно легко решить с помощью chmod. Теперь, когда я создаю ablib.Pinэкземпляр, я получаю IOError в другом файле:

IOError: [Errno 13] Permission denied: '/sys/class/gpio/pioC16/direction' 

ls -laпо /sys/class/gpioвозвратам:

--w------- 1 my_user my_user 4096 Jan 1 01:42 export lrwxrwxrwx 1 root root 0 Jan 1 01:42 pioC16 -> ../../devices/ahb.0/apb.1/pinctrl.2/fffff800.gpio/gpio/pioC16 

При записи 115 /sys/class/gpio/exportв ядро ​​создает символическую ссылку /sys/class/pioC16. Проблема в том, что rootэто владелец этой ссылки. Я хочу, чтобы новые созданные файлы принадлежали my_user. Но я не знаю, как это сделать. Я пробовал chmodи chown:

$ chown -R my_user:my_user /sys/class/gpio $ chmod g+s /sys/class/gpio 

И я попробовал ACL. Но в соответствии с этим вопросом похоже, что я не могу использовать ACL на sysfs.

$ setfacl -m group:my_group:rwx /sys/class/gpio setfacl: /sys/class/gpio: Invalid argument 

Кто-нибудь знает, как это исправить?

2 470 просмотров
OrangeTux спросил 11 лет назад
O 213

2 ответа

2
Принятый ответ

This was answered here.

Essentially, edit the file /etc/udev/rules.d/99-com.rules and append:

SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c 'chown -R root:gpio /sys/class/gpio && chmod -R 770 /sys/class/gpio; chown -R root:gpio /sys/devices/virtual/gpio && chmod -R 770 /sys/devices/virtual/gpio'" 

Then add your user to the "gpio" group:

sudo usermod -a -G gpio <youruser> 

After rebooting, you should be able to read and write to /sys/class/gpio as a normal user. I just did this myself and it worked fine.

Cerin ответил 10 лет назад
C 2 561
-3

The permission of the link is not so important...

the permission of the target is !!

please do a ls -la on "../../devices/ahb.0/apb.1/pinctrl.2/fffff800.gpio/gpio/pioC16"

Это не ответ, а комментарий.

OrangeTux · 11 лет назад · 0
Emjay ответил 11 лет назад
E 1