イベントで発生するスクリプトを作成するにはどうすればよいですか?
USBフラッシュドライブを挿入すると、Ubuntuによってマウントされ、Nautilusが自動的に開きます。特定のフラッシュドライブでこれが発生した場合、確定フォルダーを含む2番目のタブを開きます。
Nautilusスクリプトを使用して実行できるとは思わないが、LinuxスクリプトまたはNautilus拡張機能を使用して実行するにはどうすればよいですか?
以下のスクリプトをバックグラウンドで実行すると、マウントされたボリュームをチェックします。定義済みのドライブの1つがマウントされている場合、nautilusの設定フォルダーが自動的に開きます。
小さな問題は、nautilusがディレクトリを開くことをサポートしていないことです新しいタブでコマンドラインから、新しいウィンドウでのみ。つまり、USBドライブを挿入した場合に表示される初期ウィンドウを正常に閉じる必要があります。スクリプトはwmctrl
を使用してこれを実行しますが、選択したフォルダーが開くと同時に開きます。
最初にインストールする必要がある場合があります。
Sudo apt-get install wmctrl
#!/usr/bin/env python3
import subprocess
import time
#--
drivename_folders = [("My Passport", "docs"), ("7827-2F8C", "sanel")]
#--
def get_mountedlist():
return [item[item.find("/"):] for item in subprocess.check_output(
["/bin/bash", "-c", "lsblk"]).decode("utf-8").split("\n") if "/" in item]
done = []
while True:
mounted = get_mountedlist()
new_paths = [dev for dev in mounted if not dev in done]
valid = sum([[(drive, drive+"/"+item[1], item[0]) for drive in new_paths \
if item[0] in drive] for item in drivename_folders], [])
for item in valid:
open_window = "nautilus "+"'"+item[1]+"'"
close_window = "wmctrl -c "+"'"+item[2]+"'"
subprocess.Popen(["/bin/bash", "-c", open_window])
time.sleep(1)
subprocess.Popen(["/bin/bash", "-c", close_window])
done = mounted
time.sleep(2)
スクリプトを空のファイルにコピー
ドライブとフォルダーを設定する
スクリプトのヘッドセクションで、次の行を変更します。
drivename_folders = [("My Passport", "docs"), ("7827-2F8C", "MyFolder")]
ここで、すべてのTupleはドライブ(名前)、およびドライブ内の開かれているフォルダーを表します。 「テスト」名を例として残しました。
ドライブの正確な名前がわからない場合は、lsblk
を実行して名前を確認します(マウントポイントへの先行パスなし)。
スクリプトを保存する
スクリプトをopen_folder.py
として保存し、次のコマンドで実行します。
python3 /path/to/open_folder.py
すべてが期待どおりに機能する場合は、スタートアップアプリケーションに追加します
lsblk
コマンドを実行して、マウントされているすべてのボリュームを確認します。pcmanfm
(Lubuntu)およびthunar
(Xubuntu)でテストしましたが、予想どおり、どちらの場合も正常に動作します。
LubuntuまたはXubuntuで使用する場合は、次の行を変更します。
open_window = "nautilus "+"'"+item[1]+"'"
に:
open_window = "thunar "+"'"+item[1]+"'"
(for Xubuntu)
または
open_window = "pcmanfm "+"'"+item[1]+"'"
(for Lubuntu, also disable in pcmanfm's preferences: Media > "Show available options for removable media")
もちろん、wmctrl
がインストールされていることを確認してください
ほとんどの場合、他のファイルマネージャーでも機能します。
上記のスクリプトのバージョンは、1つの状況専用です。より幅広い目的でスクリプトを使用できるようにするには(たとえば、特定のドライブが接続されたときにバックアップを作成してanyコマンドを実行する)、以下のバージョンが有用です。
この場合、スクリプトのheadセクションで、タプルは次を表します。
drivename_folders = [(<drivename_a>, <command_a>), (<drivename_b>, <command_b>)]
以下のスクリプトの「テスト」設定を参照してください。
#!/usr/bin/env python3
import subprocess
import time
#--
drivename_command = [("My Passport", "gnome-terminal"), ("F806-0C50", "gedit")]
#--
def get_mountedlist():
return [item[item.find("/"):] for item in subprocess.check_output(
["/bin/bash", "-c", "lsblk"]).decode("utf-8").split("\n") if "/" in item]
done = []
while True:
mounted = get_mountedlist()
newly_mounted = [dev for dev in mounted if not dev in done]
valid = sum([[(drive, item[1]) for drive in newly_mounted \
if item[0] in drive] for item in drivename_command], [])
for item in valid:
subprocess.Popen(["/bin/bash", "-c", item[1]])
done = mounted
time.sleep(2)
スクリプトを空のファイルにコピー
ドライブとコマンドを設定
スクリプトを保存する
スクリプトをdrive_run.py
として保存し、次のコマンドで実行します。
python3 /path/to/drive_run.py
すべてが期待どおりに機能する場合は、スタートアップアプリケーションに追加します