Mount

如何讓 udisks-glue 在啟動時執行並以特定使用者身份安裝驅動器?

  • July 10, 2014

我正在嘗試使udisks-glue在我的 Raspbian Raspberry Pi 上工作。如果我udisks-glue通過 ssh 手動啟動,這工作正常。但是,我希望在啟動時自動啟動它。

因此,在為我啟動守護程序的腳本/etc/init.d/udisks-glue(按照此處的說明)。這工作正常,但磁碟是使用 root 權限 ( drwx------) 安裝的。是否可以讓這個腳本以使用者身份啟動守護程序pi,不是root嗎?

我試過的

1)修改上面的腳本,替換

DAEMON="/usr/bin/udisks-glue" 

DAEMON="exec su - pi -c /usr/bin/udisks-glue"

這未能執行。

  1. 將此行替換為對自定義腳本的引用,然後呼叫exec su - pi -c /usr/bin/udisks-glue. 當我連接硬碟驅動器時,它們沒有安裝。但是,出現了正確執行的程序。看著ps aux | grep [u]disks,我可以看到以 root 身份udisks-glue執行pi(和兩個udisks-daemon以 root 身份執行);ps如果我手動啟動,我會得到相同的輸出udisks-glue,如上所述。

3)我嘗試編輯/etc/rc.local,添加行

su pi -c "/usr/bin/udisks-glue &"

這與 (2) 中的結果相同,udisks-glue執行為pi,但不起作用。

  1. 根據此頁面,以 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
  1. 修復你的初始化腳本:
  • 添加一個包含您要執行的使用者的變數udisks-glue
NAME=udisks-glue
PIDFILE=/var/run/udisks.pid
DAEMON="/usr/bin/udisks-glue"
DAEMONUSER=pi <-- add this line
修改`start-stop-daemon`呼叫以使用`$DAEMONUSER`變數:
art) 
g_daemon_msg "Starting Automounter" "$NAME"
> start-stop-daemon --start --exec $DAEMON --chuid $DAEMONUSER
g_end_msg $?

op)  
g_daemon_msg "Stopping Automounter" "$NAME"
> start-stop-daemon --stop --exec $DAEMON --user $DAEMONUSER
g_end_msg $?
 -f $PIDFILE

注意:我`-- -p $PIDFILE`從第一次呼叫中刪除了該部分。您的普通使用者帳戶可能沒有寫入權限`/var/run`,因此您可以執行我在上面所做的操作,或者將`$PIDFILE`變數更改為普通使用者可寫的路徑。)*


### 對您已採取的步驟的評論:


1. 這不可能奏效。該`$DAEMON`變數用作呼叫`--exec`中的參數`start-stop-daemon`。該參數應該是一個**執行檔**,而`exec`它是一個[內置的 shell](http://en.wikipedia.org/wiki/Shell_builtin)。
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`在掛載後進行。

引用自:https://unix.stackexchange.com/questions/141360