私の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など)をサポートできる、十分に説明された実用的なソリューションであれば、適切な回避策も受け入れられます。また、検証のためのテストの指数関数的な増加も避けたいです。
前もって感謝します
============
papashouのリンクによる解決策:
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
}
これは望ましい結果を達成しますが、大ハンマーアプローチのように感じます。マウントされたときにポップアップすることなく、Nautilus(および他のファイルブラウザー)でパーティションを引き続き表示できるようにするために、おそらくudevに微調整があると思います。ちなみに、誰かがこれを試したい場合、次のスクリプトは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では)安価な操作ではありません。
要約すると、私は実行可能な解決策を手に入れました(助けてくれたすべての人に感謝します)。しかし、私は何か他のものを探し続けます。ありがとう