Use / sys / class / gpio / no Python sem permissões de root

4

Eu quero interagir com os pinos do GPIO usando o módulo Python Ablib . E eu quero fazer isso sem permissões de root. Como posso conseguir isso?

Quando eu crio uma instância de ablib.Pin , o módulo abre /sys/class/gpio/export e grava o número de pinos nele. Inicialmente, isso gera um IOErro:

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

Isso pode ser resolvido facilmente com chmod . Agora, quando eu crio uma instância ablib.Pin , recebo um erro IOError em um arquivo diferente:

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

ls -la on /sys/class/gpio retorna:

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

Ao escrever 115 para /sys/class/gpio/export , o kernel cria o link simbólico /sys/class/pioC16 . O problema é que root é dono deste link. Eu quero que os novos arquivos criados sejam de propriedade de my_user . Mas não sei como fazer isso. Eu tentei chmod e chown :

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

E eu tentei ACL . Mas de acordo com isso questiona Parece que não consigo usar a ACL em sysfs .

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

Alguém sabe como consertar isso?

    
por OrangeTux 14.10.2014 / 15:47

2 respostas

1

Isso foi respondido aqui .

Essencialmente, edite o arquivo /etc/udev/rules.d/99-com.rules e anexe:

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

Em seguida, adicione seu usuário ao grupo "gpio":

sudo usermod -a -G gpio <youruser>

Após a reinicialização, você poderá ler e gravar em / sys / class / gpio como um usuário normal. Eu apenas fiz isso sozinho e funcionou bem.

    
por 18.10.2015 / 06:09
-3

A permissão do link não é tão importante ...

a permissão do alvo é !!

por favor faça um ls -la em "../../ devices / ahb.0 / apb.1 / pinctrl.2 / fffff800.gpio / gpio / pioC16"

    
por 14.10.2014 / 17:56