我正在努力使乌迪克斯胶水在我的 Raspbian Raspberry Pi 上工作。如果我通过 ssh 手动启动,则效果很好udisks-glue
。但是,我希望在启动时自动启动它。
因此,一个脚本at/etc/init.d/udisks-glue
为我启动守护进程(按照说明这里)。这工作正常,但磁盘是使用 root 权限 ( drwx------
) 挂载的。是否可以使该脚本以用户身份启动守护进程pi
,而不是root
?
我尝试过的
1)修改上面的脚本,替换
DAEMON="/usr/bin/udisks-glue"
和
DAEMON="exec su - pi -c /usr/bin/udisks-glue"
这个执行失败了。
2) 将此行替换为对自定义脚本的引用,然后调用exec su - pi -c /usr/bin/udisks-glue
.当我连接硬盘时,它们没有安装。但是,出现了正确运行的进程。查看ps aux | grep [u]disks
,我可以看到udisks-glue
running as pi
(以及两个udisks-daemon
以 root 身份运行);ps
如果我手动启动,我会得到相同的输出udisks-glue
,如上所述。
3)我尝试编辑/etc/rc.local
,添加行
su pi -c "/usr/bin/udisks-glue &"
这与 (2) 具有相同的结果,udisks-glue
运行为pi
,但不起作用。
4)根据这一页,以 root 身份运行 udisks-glue,但向所有人授予安装权限。这适用于 FAT 文件系统,但甚至无法挂载 ext4。 (pi
无论如何,我希望坐骑由用户拥有。)
答案1
我有一样的问题不久以前。
解决方案:
修复您的配置:创建
/etc/polkit-1/localauthority/50-local.d/50-mount-as-pi.pkla
包含以下内容的文件:[Media mounting by pi] Identity=unix-user:pi Action=org.freedesktop.udisks.filesystem-mount ResultAny=yes
修复你的初始化脚本:
添加一个包含您要运行的用户的变量
udisks-glue
:NAME=udisks-glue PIDFILE=/var/run/udisks.pid DAEMON="/usr/bin/udisks-glue" DAEMONUSER=pi <-- add this line
修改
start-stop-daemon
调用以使用$DAEMONUSER
变量:start) log_daemon_msg "Starting Automounter" "$NAME" --> start-stop-daemon --start --exec $DAEMON --chuid $DAEMONUSER log_end_msg $? ;; stop) log_daemon_msg "Stopping Automounter" "$NAME" --> start-stop-daemon --stop --exec $DAEMON --user $DAEMONUSER log_end_msg $? rm -f $PIDFILE ;;
(注意:我
-- -p $PIDFILE
从第一次调用中删除了该部分。您的常规用户帐户可能没有 的写入权限/var/run
,因此您可以执行我上面所做的操作,或者将$PIDFILE
变量更改为常规用户可写的路径。)
对您已采取的步骤的评论:
这是行不通的。该
$DAEMON
变量用作调用--exec
中的参数start-stop-daemon
。这个论点应该是一个可执行文件,同时exec
是一个外壳内置。这样做破坏了你的初始化脚本。虽然以
udisks-glue
这种方式启动有效,但停止它不会像start-stop-daemon
尝试停止/path/to/your/helper/script.sh
而不是实际的守护进程 (/usr/bin/udisks-glue
) 那样。撇开这一点不谈,当您udisks-glue
以守护进程模式启动时,它不会生成调试消息。如果您在交互式 shell 中运行以下命令:# su pi -c "/usr/bin/udisks-glue -f"
你可能会看到类似的东西:
Device file /dev/sdb1 inserted Trying to automount /dev/sdb1... Failed to automount /dev/sdb1: Not Authorized Device file /dev/sdb inserted
这可以解释为什么你的驱动器没有安装。
这实际上与 2 相同。一个额外的注释:
&
末尾的与号 ( ) 是多余的,因为udisks-glue
默认情况下是守护进程。同样,
udisks-glue
在前台运行可以解释非 FAT 文件系统的问题:Device file /dev/sdb1 inserted Trying to automount /dev/sdb1... Failed to automount /dev/sdb1: Mount option dmask=0 is not allowed Device file /dev/sdb inserted
另请注意,如果您想更改 ext4 安装点的所有者,则需要
chown
在安装后进行更改。