Как я могу создать (и удалить, если отключено), символьная ссылка на точку монтирования недавно включенного - в USB-устройстве на рабочем столе или в $HOME системной гостевой учетной записи?
Ваш вопрос, оказывается, существует двух отдельных вопросов:
В этих вопросах отвечают [1.]
и [2.]
ниже.
С маленьким фоновым сценарием можно было автоматически создать ссылку на рабочем столе к смонтированной карте (картам) памяти, и автоматически удалять его, если диск удален.
Сценарий ниже является отредактированной версией этого. Эта версия:
lsblk
)usb
устройство командой: find /dev/disk -ls | grep <disk>
. Если usb
в выводе новое монтирование допустимо.ln -s <new_mount> <target>
.[USB] <devicename>
.В то же время
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
Если все хорошо работает, добавьте его для Запущения Приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду:
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
Заставить сценарий автоматически запустить на гостевой сессии:
Посмотрите если каталог /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
Сохраните и закройте файл. Теперь, когда Вы входите в систему на гостевой учетной записи, сценарий будет работать.
Именно