bash スクリプトでマウントされたパーティションを Nautilus が表示しないようにする

bash スクリプトでマウントされたパーティションを Nautilus が表示しないようにする

私の 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

そのスクリプトを配置するルール特別なファイル名を持つフォルダ、例: 81-usb-wubi-move.ルール

ルールは次のようになります

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

参照:

答え4

およびフラグmountを試してください。-n-i

関連情報