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 ответа2

2

Это был дан ответ здесь.

По сути, отредактируйте файл /etc/udev/rules.d/99-com.rules и добавьте:

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'"

Затем добавьте своего пользователя в группу "gpio":

sudo usermod -a -G gpio <youruser>

После перезагрузки вы сможете читать и писать в /sys /class /gpio как обычный пользователь. Я просто сделал это сам, и это работало нормально.

-3

Разрешение по ссылке не так важно ...

разрешение цели является !!

пожалуйста, сделайте ls -la on "../../devices/ahb.0/apb.1/pinctrl.2/fffff800.gpio/gpio/pioC16"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .