Spa*_*awk 3 mount usb-drive udisks raspberry-pi raspbian
我正在尝试使udisks-glue在我的 Raspbian Raspberry Pi 上工作。如果我udisks-glue
通过 ssh手动启动,这很好用。但是,我希望在启动时自动启动它。
因此,脚本at/etc/init.d/udisks-glue
为我启动守护程序(按照此处的说明)。这工作正常,但磁盘是以 root 权限 ( drwx------
)挂载的。是否可以让此脚本以用户身份启动守护程序pi
,而不是root
?
1)修改上面的脚本,替换
DAEMON="/usr/bin/udisks-glue"
Run Code Online (Sandbox Code Playgroud)
和
DAEMON="exec su - pi -c /usr/bin/udisks-glue"
Run Code Online (Sandbox Code Playgroud)
这未能执行。
2) 将此行替换为对自定义脚本的引用,然后调用exec su - pi -c /usr/bin/udisks-glue
. 当我连接硬盘驱动器时,它们没有安装。但是,会出现正确运行的进程。看着ps aux | grep [u]disks
,我可以看到udisks-glue
以pi
(以及两个udisks-daemon
以 root 身份运行)运行;ps
如果我手动启动udisks-glue
,我会得到相同的输出,如上所述。
3)我尝试编辑/etc/rc.local
,添加行
su pi -c "/usr/bin/udisks-glue &"
Run Code Online (Sandbox Code Playgroud)
这与 (2) 中的结果相同,udisks-glue
运行为pi
,但不起作用。
4)根据此页面,以root身份运行udisks-glue,但向所有人授予挂载权限。这适用于 FAT 文件系统,但甚至无法挂载 ext4。(pi
无论如何,我更希望坐骑归用户所有。)
不久前我遇到了同样的问题。
修复您的配置:创建/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
Run Code Online (Sandbox Code Playgroud)修复您的初始化脚本:
添加一个变量,其中包含您希望以以下身份运行的用户udisks-glue
:
NAME=udisks-glue
PIDFILE=/var/run/udisks.pid
DAEMON="/usr/bin/udisks-glue"
DAEMONUSER=pi <-- add this line
Run Code Online (Sandbox Code Playgroud)修改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
;;
Run Code Online (Sandbox Code Playgroud)
(注意:我-- -p $PIDFILE
从第一次调用中删除了该部分。您的普通用户帐户可能没有对 的写权限/var/run
,因此您可以执行我上面所做的操作,也可以将$PIDFILE
变量更改为普通用户可写的路径。)
这不可能奏效。该$DAEMON
变量被用作一个参数用于--exec
在一个start-stop-daemon
调用。该参数应该是一个可执行文件,exec
而是一个内置的 shell。
这样做会破坏您的初始化脚本。虽然以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"
Run Code Online (Sandbox Code Playgroud)
你可能会看到类似的内容:
Device file /dev/sdb1 inserted
Trying to automount /dev/sdb1...
Failed to automount /dev/sdb1: Not Authorized
Device file /dev/sdb inserted
Run Code Online (Sandbox Code Playgroud)
这将解释为什么您的驱动器未安装。
这实际上与 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
Run Code Online (Sandbox Code Playgroud)
另请注意,如果您想更改 ext4 挂载点的所有者,则需要在挂载chown
后更改。