如何使 udisks-glue 在启动时运行并以特定用户身份安装驱动器?

如何使 udisks-glue 在启动时运行并以特定用户身份安装驱动器?

我正在努力使乌迪克斯胶水在我的 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-gluerunning 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

我有一样的问题不久以前。

解决方案:

  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
    
  2. 修复你的初始化脚本:

    • 添加一个包含您要运行的用户的变量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变量更改为常规用户可写的路径。)

对您已采取的步骤的评论:

  1. 这是行不通的。该$DAEMON变量用作调用--exec中的参数start-stop-daemon。这个论点应该是一个可执行文件,同时exec是一个外壳内置

  2. 这样做破坏了你的初始化脚本。虽然以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
    

    这可以解释为什么你的驱动器没有安装。

  3. 这实际上与 2 相同。一个额外的注释:&末尾的与号 ( ) 是多余的,因为udisks-glue默认情况下是守护进程。

  4. 同样,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在安装后进行更改。

相关内容