Как создать (и удалить, если устройство отключено) символическую ссылку на точку монтирования недавно подключенного USB-устройства на рабочем столе или в $HOME гостевой учетной записи системы?
решение1
Ваш вопрос, оказывается, состоит из двух отдельных вопросов:
- Как автоматически создать (и удалить) ссылку на рабочем столе на подключенные USB-накопители
- Как запустить его в гостевой учетной записи
Ответы на эти вопросы приведены [1.]
ниже [2.]
.
1. Автоматически создавать ссылку на рабочий стол для подключенных USB-накопителей (в общем случае)
С помощью небольшого фонового скрипта вы можете автоматически создать на рабочем столе ссылку на подключенный USB-накопитель(и),иавтоматически удалять его при извлечении привода.
Процедура; как это работает
Сценарий ниже представляет собой отредактированную версиюВот этот. Эта версия:
- следит за вновь подключенными устройствами (используя команду
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
Если все работает нормально, добавьте его в Startup Applications: Dash > Startup Applications > Add. Добавьте команду:
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
Сохраните и закройте файл. Теперь при входе в гостевую учетную запись скрипт будет запускаться.
Вот и все
Примечания
- Подробнее о том, как редактировать гостевую учетную записьможно найти здесь.
- Скрипт действует только в том случае, если смонтирован новый диск, и не добавляет никакой заметной нагрузки на процессор.