我想写入位于 的(打印机的)设备文件/dev/usb/lp0
。该文件由lp
用户和组拥有。每当我将打印机设备连接到系统时都会创建此文件。
我尝试将自己添加到该lp
组中。但是,当连接打印机时,该lp0
文件不会出现。将我自己从群组中删除可以解决此问题。
获得写入权限的一种解决方案是 -
- 每当设备连接时进行检测
- 触发运行的 shell 脚本
sudo chmod 0666 /dev/usb/lp0
这让我得到了答案https://unix.stackexchange.com/a/28711
shell 脚本已成功触发,但未运行sudo command
*,因为 shell 脚本不是从终端执行的。我尝试过使用sudo
和gksudo
,两者都未能提示我输入密码,即,我无法通过后台shell脚本升级权限。
我已经尝试过什么?
setuid
从Unix 和 Linux @ StackExchange,但这似乎是一个非常糟糕的主意。echo 'my_insecure_password' | sudo -S command
,它不起作用*。
Polkit
由于其复杂程度,我没有尝试,这是其他答案中建议的。但我愿意在正确的指导下去做。
答案1
将自己添加到该lp
组可能是最好的解决方案。那会不是导致lp0
文件不出现。 (理论上,您的系统可能已被配置为lp0
在您在组中时不会出现lp
,但是 1. 这必须是本地配置,而不是发行版的默认设置;2. 我不这样做看看为什么有人会这样设置。)
以下内容仅供学术兴趣。在您的场景中,您不需要这个。
如果您需要更改设备文件的权限,那么如何在USB设备插件上运行自定义脚本?并不完全是您所需要的——这适用于需要脚本的更复杂的情况。要更改设备文件的 Unix 权限或所有权,请直接在 udev 规则中使用和分配OWNER
。也就是说,在 下创建一个文件,但该文件中的行应该包含类似的内容而不是.GROUP
MODE
/etc/udev/rules.d
GROUP="mygroup"
RUN="/path/to/script"
如果您想要执行更复杂的操作,例如设置访问控制列表,则需要运行脚本。您不需要升级该脚本中的权限:它已经以 root 身份运行!只需调用您需要以 root 身份运行的程序即可,例如setfacl
。
答案2
对于这个问题,我不推荐这个解决方案。
您可以编辑/etc/sudoers
以配置 sudo 以允许在没有密码的情况下执行脚本。