USB スティックがマウントされたときにデスクトップまたは $HOME にリンクを自動的に作成するにはどうすればよいですか?

USB スティックがマウントされたときにデスクトップまたは $HOME にリンクを自動的に作成するにはどうすればよいですか?

デスクトップ上またはシステムのゲスト アカウントの $HOME に新しく接続された USB デバイスのマウント ポイントへのシンボリック リンクを作成 (および削除) するにはどうすればよいでしょうか?

答え1

あなたの質問は、2 つの別々の質問から成り立っていることがわかりました:

  1. マウントされた USB ドライブへのリンクをデスクトップに自動的に作成 (および削除) する方法
  2. ゲストアカウントで実行する方法

これらの質問に対する回答は[1.][2.]以下に記載されています。

1. マウントされたUSBドライブへのデスクトップリンクを自動的に作成する(一般)

小さなバックグラウンドスクリプトを使用すると、マウントされたUSBドライブへのリンクをデスクトップに自動的に作成できます。そしてドライブが取り外されると自動的に削除されます。

ここに画像の説明を入力してくださいここに画像の説明を入力してください

手順; 仕組み

以下のスクリプトは編集版ですこれですこのバージョン:

  • 新しくマウントされたデバイスを監視します(コマンドを使用lsblk
  • 新しい項目が表示された場合、新しくマウントされたデバイスがusbコマンドによってデバイスであるかどうかを確認します。出力に があるfind /dev/disk -ls | grep <disk>場合、新しいマウントは有効です。usb
  • マウントが有効な場合、次のコマンドを使用して、ユーザーのデスクトップにリンクが作成されます: ln -s <new_mount> <target>
    ターゲット リンクの名前は です[USB] <devicename>

同時に

  • 新しいマウントがリストに追加されます。リストは定期的に (4 秒ごとに 1 回) チェックされます。マウントが存在しない場合は、対応するリンクがデスクトップから削除されます。

設定方法

  1. 以下のスクリプトを空のファイルにコピーし、show_usb.py
  2. ディレクトリを作成します/opt/show_usb(ゲスト アカウント用に実行するため)。

    sudo mkdir /opt/show_usb
    
  3. スクリプトを次の場所にコピーします/opt/show_usb:

    sudo cp /path/to/show_usb.py /opt/show_usb
    
  4. 次のコマンドを使用して、ターミナルからスクリプトをテスト実行します。

    python3 /opt/show_usb/show_usb.py
    
  5. すべて正常に動作する場合は、スタートアップ アプリケーションに追加します: Dash > スタートアップ アプリケーション > 追加。次のコマンドを追加します:

    python3 /opt/show_usb/show_usb.py
    

スクリプト

#!/usr/bin/env python3
import os
import subprocess
import time

def find_dtop():
    # get the localized path to the Desktop folder
    home = os.environ["HOME"]; dr_file = home+"/.config/user-dirs.dirs"
    return [home+"/"+ l.split("/")[-1].strip() \
            for l in open(dr_file).readlines() \
            if l.startswith("XDG_DESKTOP_DIR=")][0].replace('"', "")

def get_mountedlist():
    return [(item.split()[0].replace("├─", "").replace("└─", ""),
             item[item.find("/"):]) for item in subprocess.check_output(
            ["lsblk"]).decode("utf-8").split("\n") if "/" in item]

def identify(disk):
    cmd = "find /dev/disk -ls | grep /"+disk
    output = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
    return True if "usb" in output else False

done = []; check = []
dt = find_dtop()
while True:
    mnt = get_mountedlist(); mount_check = [item[1] for item in mnt]
    for item in check:
        if not item in mount_check:
            try:
                os.remove(dt+"/[USB] "+item.split("/")[-1]); check.remove(item)
            except FileNotFoundError:
                pass
    new_paths = [dev for dev in mnt if not dev in done and not dev[1] == "/"]
    valid = [dev for dev in new_paths if identify(dev[0]) == True]
    for item in valid:
        new = item[1]
        subprocess.Popen(["ln", "-s", new, dt+"/[USB] "+new.split("/")[-1] ])
        check.append(new)
    time.sleep(4)
    done = mnt




2. ゲストアカウントでスクリプトを自動的に実行する方法

ゲスト セッションでスクリプトを自動起動するには:

  1. ディレクトリが/etc/guest-session/skel/.config/autostart存在するかどうかを確認します。存在しない場合は作成します。

    sudo mkdir -p /etc/guest-session/skel/.config/autostart
    
  2. 次に、ゲスト アカウントのスタートアップ ランチャーを作成します。

    sudo -i gedit /etc/guest-session/skel/.config/autostart/desktop_usb.desktop
    

    開いたファイルに以下のコードを貼り付けます。

    [Desktop Entry]
    Name=USB_desktop
    Exec=python3 /opt/show_usb/show_usb.py
    Type=Application
    

    ファイルを保存して閉じます。これで、ゲスト アカウントでログインすると、スクリプトが実行されます。

それでおしまい

ノート

  • ゲストアカウントの編集方法の詳細ここに見つかります
  • このスクリプトは、新しいドライブがマウントされた場合にのみ動作し、プロセッサに目立った負荷をまったく与えません。

関連情報