防止 nautilus 顯示在 bash 腳本中安裝的分割區

防止 nautilus 顯示在 bash 腳本中安裝的分割區

在我的 bash 腳本中,我安裝分割區,檢查它們,將檔案複製到它們,然後卸載。當腳本掛載分割區時,Nautilus 會彈出一個窗口,顯示分割區並竊取焦點。這是我想避免的事情。

注意:我知道我可以在「系統設定」、「詳細資料」、「可移動媒體」中更改此行為,Never prompt or start programs on media insertion但我不想更改該行為,例如,如果插入USB 記憶棒,我只想在bash 腳本中阻止它。由於此腳本在其他使用者的電腦上運行,我無法修改這些設定(在腳本中),因為如果它異常終止,它將保留修改後的設定(我也不認為有必要這樣做)。

實際上這個自動顯示看起來不太一致。如果我從終端執行完全相同的命令,Nautilus 不會顯示,而且我知道我的腳本中還有其他安裝沒有顯示。那麼什麼可能導致這種情況呢?這是程式碼範例(兩者都會導致彈出單獨的 nautilus 視窗):

mount $dev $target
mkdir -p $target/home
mount $homedev $target/home

我有興趣了解安裝訊號 Nautilus 的過程以及為什麼會發生這種情況(如果我從終端安裝分割區則不會)。以及防止這種情況發生的最佳方法是什麼。

我注意到這種行為從 11.10 版本開始(如果我沒記錯的話)。我目前運行的是 12.04,但該腳本必須適用於所有受支援的版本。我不認為解決方案應該涉及修改系統設定(不同版本之間可能有所不同)。例如,如果您查看其他掛載分割區的東西(如 os-prober),當它掛載不同分割區時,不會彈出 nautilus 視窗。

腳本可以找到這裡。和這是這部分鸚鵡螺出現的地方。我覺得也流行這裡,但我一直將測試重點放在第一個連結上。是它不會彈出的地方,在其他安裝之前調用 - 請注意,我已將第一個安裝重寫為 --read-only 並在 if 語句中,這沒有什麼區別。

理想情況下,答案將解釋為什麼會發生這種情況以及如何防止這種情況,換句話說,解釋為什麼腳本內的mount處理方式與終端發出的處理方式不同。如果它是一個完全解釋的解決方案並且實用,可以支援所有桌面環境(ubuntu、kubuntu、xubuntu、lubuntu 等),那麼好的解決方法也會被接受 - 我還希望避免驗證它的測試呈指數增長。

先致謝

===========

解決方案按照帕帕手的連結:

add_udev_rules ()
{
    for i in "$dev" "$homedev" "$bootdev" "$usrdev"; do
      if [ -n "$i" ]; then
        block=${i#/dev/}
        echo "KERNEL==\"""$block""\",ENV{UDISKS_PRESENTATION_HIDE}=\"1\"" >> "$wubi_move_dir"/wubi_move.rules
      fi
    done
    cp "$wubi_move_dir"/wubi_move.rules /etc/udev/rules.d/wubi_move.rules
    udevadm trigger > /dev/null 2>&1
}

remove_udev_rules ()
{
    rm /etc/udev/rules.d/wubi_move.rules
    rm "$wubi_move_dir"/wubi_move.rules
    udevadm trigger > /dev/null 2>&1
}

這達到了預期的結果,但感覺就像是一種大錘方法。我相信 udev 中可能有一個微調,允許分割區仍然顯示在 Nautilus(和其他檔案瀏覽器)中,而不會在安裝時彈出。順便說一句,如果有人想嘗試一下,下面的腳本將顯示 nautilus 的彈出效果:

mkdir -p /tmp/testmount
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1 
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1 
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1 
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1 
rmdir /tmp/testmount

我會繼續玩udev,我還提交了一份漏洞,因為這對於未插入的分割區在安裝時充當插入的 USB/媒體卡沒有任何意義。此外,這udevadm trigger並不是一個便宜的操作(至少在 12.04 上),它會暫時凍結所有內容。

所以,總而言之,我有一個可行的解決方案(感謝所有提供幫助的人),我可能會也可能不會實施(還不確定);但我會繼續尋找其他東西。謝謝

答案1

試試這個建議:http://www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/

我相當確定它與 udev 訊號和處理有關。

答案2

嘗試包裝你的腳本:

#!/bin/bash
#

# disable nautilus automount
#
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  false

# put your script here  
#
...

# enable back nautilus automount
# 
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  true

未測試,因為我使用的是 10.04

更新:

#!/bin/bash
#

# disable nautilus automount
#
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  false

# put CALLING your script here to survive its crashes
#
/bin/bash -c "/whenever/it/is/placed/script.sh"

# enable back nautilus automount
# 
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  true

答案3

您可以透過新增的 udev 規則來阻止隨身碟自動掛載。在該規則中,您可以按供應商、序號和其他屬性指定隨身碟。看屬性{}輸出中的行:

udevadm info -a --name=sdb1

您應該放入該腳本/etc/udev/rules.d具有特殊檔案名稱的資料夾,例如 81-usb-wubi-move.rules

該規則可能看起來像

ACTION=="add", KERNEL=="sdb?", SUBSYSTEMS=="usb", ATTRS{serial}=="001CC07CEE5EFB91C91B235C", ENV{UDISKS_PRESENTATION_HIDE}="1", ENV{UDISKS_PRESENTATION_NOPOLICY}="1"

也可以看看:

答案4

嘗試mount使用-n-i標誌。

相關內容