USBスティックやAndroidスマートフォンなどの外部デバイスを接続すると、nautilusで自動的に開き、対応するアイコンがユニティランチャーにロックされます。これを防ぐ方法はありますか?
Ubuntu 14.04を使用しています
Unityランチャーからデバイスのロックを解除すると、実際にはランチャーからblacklistedになります。次のコマンドで、現在ブラックリストに登録されているデバイスを確認できます。
gsettings get com.canonical.Unity.Devices blacklist
以下のスクリプトは、独自のブラックリストに登録されたデバイスを設定する代替方法です。違いは、スクリプトがファイル~/.blacklist_data
を削除するまで、永続的な方法でそれを行うことです。 (説明を参照してください:仕組み)
バックグラウンドスクリプトの場合でも、これは極端に軽量です。これは、ブラックリストに何も変更がなければ、現在のブラックリストのみがgsettings
コマンドによって読み取られるという事実の結果です。 dconf
形式のbinary
データベースを読み取るため、非常に軽量です。
#!/usr/bin/env python3
import subprocess
import os
import time
blacklist_data = os.environ["HOME"]+"/.blacklist_data"
def get_setlist():
cmd = "gsettings get com.canonical.Unity.Devices blacklist"
blacklist = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").strip()
return "[]" if blacklist == "@as []" else blacklist
try:
blacklist1 = str(open(blacklist_data).read()).strip()
cmd = 'gsettings set com.canonical.Unity.Devices blacklist "'+blacklist1+'"'
subprocess.call(["/bin/bash", "-c", cmd])
except FileNotFoundError:
blacklist1 = "[]"
open(blacklist_data, "wt").write(blacklist1)
while True:
time.sleep(1)
blacklist2 = get_setlist()
if blacklist2 != blacklist1:
oldlist = open(blacklist_data).read().strip()
n_old = len(eval(oldlist))
try:
n_new = len(eval(blacklist2))
except SyntaxError:
n_new = 0
if n_old < n_new:
open(blacklist_data, "wt").write(blacklist2)
else:
cmd = 'gsettings set com.canonical.Unity.Devices blacklist "'+oldlist+'"'
subprocess.call(["/bin/bash", "-c", cmd])
blacklist1 = blacklist2
myown_blacklist.py
として保存します次のコマンドでテスト実行します:
python3 /pat/to/myown_blacklist.py`
次に、不要なデバイス(すべて、USBデバイスだけでなく動作します)のロックを解除します。ロック解除は一度だけ必要です。
すべてが正常に機能する場合は、スタートアップアプリケーションに追加します。[ダッシュ]> [スタートアップアプリケーション]> [追加]を選択します。コマンドを追加します。
python3 /pat/to/myown_blacklist.py`
問題は、Unityがマウント解除されるとデバイスを「忘れる」ことです。スクリプトは、次に出力の結果を追跡します:
gsettings get com.canonical.Unity.Devices blacklist
リストに項目が追加されると、スクリプトはリストをホームディレクトリの隠しファイルに書き込みます。アイテムが削除されると、隠しファイルを読み取り、ブラックリストを復元します(これは、デバイスのアンマウント時に1回だけ必要です)