Ora*_*Tux 5 linux permissions acl
我想使用 Python 模块Ablib与 GPIO 引脚进行交互。我想在没有 root 权限的情况下执行此操作。我怎样才能做到这一点?
当我创建一个ablib.Pin
实例时,模块会打开/sys/class/gpio/export
并将引脚编号写入其中。最初这会引发 IOErro:
IOError: [Errno 13] Permission denied: '/sys/class/gpio/export'
Run Code Online (Sandbox Code Playgroud)
这可以通过 轻松解决chmod
。现在,当我创建一个ablib.Pin
实例时,我在另一个文件上收到了 IOError:
IOError: [Errno 13] Permission denied: '/sys/class/gpio/pioC16/direction'
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
写入 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
Run Code Online (Sandbox Code Playgroud)
我试过了ACL
。但是根据这个问题,看起来我不能在sysfs
.
$ setfacl -m group:my_group:rwx /sys/class/gpio
setfacl: /sys/class/gpio: Invalid argument
Run Code Online (Sandbox Code Playgroud)
有人知道如何解决这个问题吗?
这已在这里得到解答。
本质上,编辑文件/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'"
Run Code Online (Sandbox Code Playgroud)
然后将您的用户添加到“gpio”组:
sudo usermod -a -G gpio <youruser>
Run Code Online (Sandbox Code Playgroud)
重新启动后,您应该能够以普通用户身份读取和写入 /sys/class/gpio。我自己就是这样做的,效果很好。