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


8

私の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では)安価な操作ではありません。

要約すると、私は実行可能な解決策を手に入れました(助けてくれたすべての人に感謝します)。しかし、私は何か他のものを探し続けます。ありがとう


他の人が答えるには、Ubuntuバージョンを追加できますか?例:9.04、10.10、12.04。かなりの進化がありました。
ポール、

いい視点ね。質問を編集して追加します。
bcbc

-iをマウントすると、nautilusがポップアップしないようになりますか?画面の下部にある小さなダイアログでgnome-shellが表示されないようにするのに役立ちます。これはgnome-shellを使用して12.04 Ubuntuでテストされました。
ゲイリー

それは私にとって何の違いもありません。
bcbc

<p> _ターミナルからまったく同じコマンドを実行しても、Nautilusは表示しません_-スクリプトをどのように起動しますか?</ p> <p> スクリプトに他のマウントが表示されないことを知っています -これらのマウントの違いは何ですか?</ p>
zuba

回答:


3

この提案を試してください:http : //www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/

私はそれがudevシグナルと処理に関係しているとかなり確信しています。


3
リンクのコンテンツを簡潔にここに投稿できますか?リンクのみの回答は、AUコミュニティではあまり歓迎されません。
Mahesh

これは機能します。現時点では、答えを受け入れるには詳細が少なすぎます。ファイルを作成してを呼び出すことができることを手動で確認しましたudevadm trigger。スクリプトで機能することを確認したいだけです。ここに追加していない場合は、質問に詳細を掲載します。
bcbc

リンクが既に明確にレイアウトしたものを要約し直したくありませんでした。基本的に、/ etc / udev / rules.d /に、特定のデバイスを処理しないようにudevに指示するルールを追加する必要があります。各デバイスは、KERNEL ==” sda1”、ENV {UDISKS_PRESENTATION_HIDE} =” 1を指定する独自の行を取得します。 ″。そうしても、システムやカーネルの動作は変更されません。UDEVにディスクのプレゼンテーションを非表示にするように指示するだけです。Nautilusは、この動作を正確にudevルール処理に依存しています。
papashou 2012

1

スクリプトをラップしてみてください。

#!/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

提案をありがとう...すぐに有効になるかどうか確信がないため、設定を変更したくありません。リリースごとに異なるコードが必要であり、洗練されていません。スクリプトが中止された場合、ユーザーに残されます望ましくない状態にある-必要であるとも信じていません。私が求めているのは、nautilusにマウントが通知されるメカニズムと、それをバイパスする方法です。例:udev?dbus?そういうこと。
bcbc

+ すぐに有効になるかどうかわからないため、設定を変更したくありません -これは、チェックアウトする問題です(十分簡単です)。+ 各リリースごとに異なるコード必要です- 通りでdynoに出会えるかのように50 | 50 必要な場合とそうでない場合があります))+ エレガントではありません-他の方法と比べて?
zuba

+ スクリプトが中止された場合、ユーザーを望ましくない状態のままにします - 中止された場合、多くのパッケージ(aptitudeなど)がそうします。その副作用を回避するためのアプローチがあります。たとえば、スクリプトが実行されている場合は1分ごとにチェックし、設定されていない場合は設定を元に戻すためにcronを充電できます。または、設定を制御する別のスクリプトを実行することもできます。
zuba

私のポイントは、デスクトップ固有の設定を変更する必要はないということです。このスクリプトをubuntu / xubuntu / kubuntu / lubuntuなどで実行できることも追加しておく必要があります。これにより、高度な複雑さとリスクが追加されます。
bcbc

udisk(papashousリンクを参照)を使用してパーティションをブラックリストに登録する方法にはsudoが必要であり、マシン間での移植性がないため、さらに複雑でリスクが伴います。
Egil

1

新しいudevルールを追加することで、フラッシュドライブの自動マウントを防ぐことができます。そのルールでは、ベンダー、シリアル番号、その他の属性でフラッシュドライブを指定できます。次の出力のATTRS {}行を参照してください:

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"

以下も参照してください。


これは潜在的な回避策のようです-私はこれを確認して実験する時間が必要であり、今日まで遅くなる可能性があります(その後フィードバックを提供します)。理想的には、答えはこれが(mountターミナルから実行するのと比較して)なぜ起こっているのかを説明しますが、もし私が良い回避策を得れば私もそれを受け入れます。
bcbc

これは1つです
RobotHumans '18

0

テストされていない...ただの予感

nautilusユーザーがアクセスできないツリーにファイルシステムをマウントします。たとえば、/ rootまたは/ home / someoneelseのサブディレクトリ、または他のユーザーが所有および保護している/ tmpサブディレクトリにマウントします。

同じハードウェアデバイスを2つのマウントポイントにマウントし、両方から変更することは悪い考えかもしれないことを覚えておいてください。

(12.04beta)Ubuntu-> System Settings-> Details-> Removable Mediaで人間による設定が可能です。一部のオプションは「何もしない」に設定でき、ポップアップを回避できる場合があります。

https://help.ubuntu.com/community/Mount/USBにあるドキュメントは9.10では役立つかもしれませんが、12.04では機能しませんでした。彼らが言及するgconf-editorのキーは使用されなくなりました。


/ tmpの下のディレクトリにマウントされます(他の場所にはマウントされません)。
bcbc

ただし、ログインしたユーザーは引き続き/ tmpにアクセスできます。ログインユーザーがアクセスできないディレクトリを使用することを提案しました。
ポール、

chmod 700はディレクトリで使用しました...有望に見えた後、メッセージウィンドウ(ウィンドウタイトルなし)がポップアップ表示されました:「10 GBファイルシステムのフォルダーを開けません」、「このファイルを処理するアプリケーションが登録されていません」
bcbc

魅力的です。それは確かに一生懸命試みます。多分私はこれを後で遊ぶ時間があるでしょう。
ポール

0

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


私はそれを試しました-私ができるすべてのマウントオプションをほとんど通りました。トリガーは別の場所で発生しています。
bcbc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.