12.04(および多分14.04)を使用しているときに、現在マウントされているドライブを取り外してNautilusウィンドウで開くと、ウィンドウが自動的に閉じることを覚えています。
16.04では、開いているドライブを削除すると、開いているウィンドウは自動的にメディアディレクトリ(/media/{username}
)に戻ります。この機能を復元する方法はありますか?
Nautilusの環境設定には、私が見る限り、それを修正するオプションはありません。 -環境設定には何も見つかりません。しかし、非常に小さく、ジュースの量が少ないバックグラウンドスクリプトを使用すれば、patch itにすることができます。追加のプロセッサ負荷はnihilです。
#!/usr/bin/env python3
import subprocess
import os
import time
def get(cmd):
try:
return subprocess.check_output(cmd).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
curruser = os.environ["USER"]
nautpid = get(["pgrep", "nautilus"])
connected1 = [l for l in get("lsblk").splitlines() if "media" in l]
wlist1 = [l.strip() for l in get(["wmctrl", "-lp"]).splitlines() if nautpid in l]
t = 0
while True:
time.sleep(1.5)
connected2 = [l for l in get("lsblk").splitlines() if "media" in l]
time.sleep(0.5)
while True:
wlist = get(["wmctrl", "-lp"])
if wlist:
break
wlist2 = [l.strip() for l in wlist.splitlines() if nautpid in l]
removed = [l for l in connected1 if not l in connected2]
if removed:
close = [
w for w in wlist2 if all([
not w in wlist1,
any([
w.endswith(" "+curruser),
w.endswith(" Home")]),
])
]
for w in close:
subprocess.Popen(["wmctrl", "-ic", w.split()[0]])
connected1 = connected2
wlist1 = wlist2
# periodically (re)set nautpid to fix if nautilus crashed somehow
t += 1
if t == 20:
nautpid = get(["pgrep", "nautilus"])
t = 0
スクリプトはwmctrl
をインストールする必要があります
Sudo apt-get install wmctrl
スクリプトを空のファイルにコピーし、close_removed.py
として保存します
コマンドでテスト実行
python3 /path/to/close_removed.py
1つ以上のドライブを接続し、自動的にマウントされた後にそれらを取り外します。ウィンドウが閉じるはずです。
すべてが正常に機能する場合は、スタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加。コマンドを追加します。
/bin/bash -c "sleep 15 && python3 /path/to/close_removed.py"
/media/<username>/<drivename>
にマウントされますnautilus
ウィンドウは(少なくとも私のシステムでは)/media/<username>
に戻ります。したがって、windowは、現在のユーザーにちなんで(名前が変更されます).nautilus
ウィンドウを単純に閉じることはできず、不一致が発生する可能性があります。ただし、ドライブが切断された直後に現在のユーザーに名前が変更されたが、削除されたドライブを表すウィンドウであると想定するのは安全です。これが、次のスクリプトを使用した仕組みです。
pgrep nautilus
...スクリプトの起動時に、nautilusのPIDを取得します
wmctrl -lp
... nautilusのウィンドウを取得する
lsblk
...切断された可能性のあるドライブを監視する
wmctrl -ic <window_id>
...対象のウィンドウを閉じる
スクリプトには2秒のサイクルがあります。これは、ドライブが機能するために少なくとも2秒接続する必要があることを意味します。