デスクトップ上またはシステムのゲスト アカウントの $HOME に新しく接続された USB デバイスのマウント ポイントへのシンボリック リンクを作成 (および削除) するにはどうすればよいでしょうか?
答え1
あなたの質問は、2 つの別々の質問から成り立っていることがわかりました:
- マウントされた USB ドライブへのリンクをデスクトップに自動的に作成 (および削除) する方法
- ゲストアカウントで実行する方法
これらの質問に対する回答は[1.]
、[2.]
以下に記載されています。
1. マウントされたUSBドライブへのデスクトップリンクを自動的に作成する(一般)
小さなバックグラウンドスクリプトを使用すると、マウントされたUSBドライブへのリンクをデスクトップに自動的に作成できます。そしてドライブが取り外されると自動的に削除されます。
手順; 仕組み
以下のスクリプトは編集版ですこれですこのバージョン:
- 新しくマウントされたデバイスを監視します(コマンドを使用
lsblk
) - 新しい項目が表示された場合、新しくマウントされたデバイスが
usb
コマンドによってデバイスであるかどうかを確認します。出力に があるfind /dev/disk -ls | grep <disk>
場合、新しいマウントは有効です。usb
- マウントが有効な場合、次のコマンドを使用して、ユーザーのデスクトップにリンクが作成されます:
ln -s <new_mount> <target>
。
ターゲット リンクの名前は です[USB] <devicename>
。
同時に
- 新しいマウントがリストに追加されます。リストは定期的に (4 秒ごとに 1 回) チェックされます。マウントが存在しない場合は、対応するリンクがデスクトップから削除されます。
設定方法
- 以下のスクリプトを空のファイルにコピーし、
show_usb.py
ディレクトリを作成します
/opt/show_usb
(ゲスト アカウント用に実行するため)。sudo mkdir /opt/show_usb
スクリプトを次の場所にコピーします
/opt/show_usb
:sudo cp /path/to/show_usb.py /opt/show_usb
次のコマンドを使用して、ターミナルからスクリプトをテスト実行します。
python3 /opt/show_usb/show_usb.py
すべて正常に動作する場合は、スタートアップ アプリケーションに追加します: 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. ゲストアカウントでスクリプトを自動的に実行する方法
ゲスト セッションでスクリプトを自動起動するには:
ディレクトリが
/etc/guest-session/skel/.config/autostart
存在するかどうかを確認します。存在しない場合は作成します。sudo mkdir -p /etc/guest-session/skel/.config/autostart
次に、ゲスト アカウントのスタートアップ ランチャーを作成します。
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
ファイルを保存して閉じます。これで、ゲスト アカウントでログインすると、スクリプトが実行されます。
それでおしまい
ノート
- ゲストアカウントの編集方法の詳細ここに見つかります。
- このスクリプトは、新しいドライブがマウントされた場合にのみ動作し、プロセッサに目立った負荷をまったく与えません。