我有一台 3D 打印机,我的电脑可以通过它进行通信/dev/ttyACM0
:
crw-rw---- 1 root uucp 166, 0 16 nov 14:58 ttyACM0
3D 打印应用程序repetierHost
需要对该设备进行读/写访问才能运行。如果我在没有任何准备的情况下“天真地”启动应用程序,则该应用程序将无法运行。
如果我以 root 身份运行该应用程序,它就可以工作。
如果我以(补充)组的普通用户身份运行应用程序uucp
,它仍然无法工作。
如果我给出/dev/ttyACM0
权限 flagsrw-rw-rw-
并使用普通用户运行它,它就可以工作。
(为什么)我通过uucp
群组获得的许可没有传递到应用程序?
我不会反对只授予文件rw-rw-rw-
权限,但当设备断开连接并重新连接时,这些权限会被重置。如果我无法通过uucp
组完成这项工作,我怎样才能使权限标志的更改持久化?
答案1
我会将应用程序组设置repetierHost
为uucp
,然后设置 SGID 位(只要它是真正的二进制文件而不是脚本):
chgrp uucp repetierHost
chmod g+s repetierHost
如果 repetierHost 是一个脚本,您可以考虑将其移至repetierHost.sh
并编写一个小型 C 编程包装器repetierHost
来调用repetierHost.sh
例如:
#include <stdlib.h>
int
main(int argc, char *argv[])
{
system("/path/to/repetierHost.sh");
}
答案2
我找到了sg
命令,这似乎正是我所需要的:
新加坡- 以不同的组ID执行命令
所以我只写了一个最小的包装器,如下所示:
#!/bin/bash
sg uucp /usr/bin/repetierHost.sh
这非常有效。