Wie kann ich auf dem Desktop oder im $HOME des Gastkontos des Systems einen symbolischen Link zum Einhängepunkt eines neu angeschlossenen USB-Geräts erstellen (und entfernen, wenn es nicht angeschlossen ist)?
Antwort1
Ihre Frage besteht aus zwei separaten Fragen:
- So erstellen (und entfernen) Sie automatisch einen Link auf dem Desktop zu bereitgestellten USB-Laufwerken
- So führen Sie es mit einem Gastkonto aus
Diese Fragen werden hier [1.]
und [2.]
weiter unten beantwortet.
1. Automatisches Erstellen einer Desktopverknüpfung zu gemounteten USB-Laufwerken (im Allgemeinen)
Mit einem kleinen Hintergrundskript können Sie automatisch einen Link zu den gemounteten USB-Laufwerken auf Ihrem Desktop erstellen lassen.Undautomatisch entfernen lassen, wenn das Laufwerk entfernt wird.
Das Verfahren; so funktioniert es
Das folgende Skript ist eine bearbeitete Version vonDieses hier. Diese Version:
- behält neu gemountete Geräte im Auge (mit dem Befehl
lsblk
) - Wenn ein neues Element angezeigt wird, wird mit
usb
dem folgenden Befehl geprüft, ob es sich bei dem neu bereitgestellten Gerät um ein Gerät handelt:find /dev/disk -ls | grep <disk>
. Wennusb
die Ausgabe angezeigt wird, ist die neue Bereitstellung gültig. - Wenn die Bereitstellung gültig ist, wird mit dem folgenden Befehl ein Link auf dem Desktop des Benutzers erstellt:
ln -s <new_mount> <target>
.
Der Ziellink erhält den Namen:[USB] <devicename>
.
Gleichzeitig
- Die neue Halterung wird einer Liste hinzugefügt. In regelmäßigen Abständen (alle vier Sekunden) wird die Liste überprüft. Wenn die Halterung nicht mehr existiert, wird der entsprechende Link von Ihrem Desktop entfernt.
Wie stellt man das ein
- Kopieren Sie das folgende Skript in eine leere Datei und speichern Sie es unter
show_usb.py
Erstellen Sie das Verzeichnis
/opt/show_usb
(da wir es für ein Gastkonto ausführen möchten):sudo mkdir /opt/show_usb
Kopieren Sie das Skript in
/opt/show_usb
:sudo cp /path/to/show_usb.py /opt/show_usb
Führen Sie das Skript testweise von einem Terminal aus mit dem folgenden Befehl aus:
python3 /opt/show_usb/show_usb.py
Wenn alles gut funktioniert, fügen Sie es zu den Startanwendungen hinzu: Dash > Startanwendungen > Hinzufügen. Fügen Sie den Befehl hinzu:
python3 /opt/show_usb/show_usb.py
Das Drehbuch
#!/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. So führen Sie das Skript automatisch aus, insbesondere im Gastkonto
So starten Sie das Skript automatisch in einer Gastsitzung:
Prüfen Sie, ob das Verzeichnis
/etc/guest-session/skel/.config/autostart
existiert. Wenn nicht, erstellen Sie es:sudo mkdir -p /etc/guest-session/skel/.config/autostart
Erstellen Sie nun einen Start-Launcher für das Gastkonto:
sudo -i gedit /etc/guest-session/skel/.config/autostart/desktop_usb.desktop
Fügen Sie in die geöffnete Datei den folgenden Code ein:
[Desktop Entry] Name=USB_desktop Exec=python3 /opt/show_usb/show_usb.py Type=Application
Speichern und schließen Sie die Datei. Wenn Sie sich jetzt mit einem Gastkonto anmelden, wird das Skript ausgeführt.
Das ist es
Anmerkungen
- Weitere Informationen zum Bearbeiten des Gastkontosfinden Sie hier.
- Das Skript wird nur aktiv, wenn ein neues Laufwerk eingebunden wird, und belastet den Prozessor in keiner Weise merklich.