Wie kann ich automatisch einen Link auf dem Desktop oder in $HOME erstellen, wenn der USB-Stick gemountet ist?

Wie kann ich automatisch einen Link auf dem Desktop oder in $HOME erstellen, wenn der USB-Stick gemountet ist?

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:

  1. So erstellen (und entfernen) Sie automatisch einen Link auf dem Desktop zu bereitgestellten USB-Laufwerken
  2. 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.

Bildbeschreibung hier eingebenBildbeschreibung hier eingeben

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 usbdem folgenden Befehl geprüft, ob es sich bei dem neu bereitgestellten Gerät um ein Gerät handelt: find /dev/disk -ls | grep <disk>. Wenn usbdie 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

  1. Kopieren Sie das folgende Skript in eine leere Datei und speichern Sie es untershow_usb.py
  2. Erstellen Sie das Verzeichnis /opt/show_usb(da wir es für ein Gastkonto ausführen möchten):

    sudo mkdir /opt/show_usb
    
  3. Kopieren Sie das Skript in /opt/show_usb:

    sudo cp /path/to/show_usb.py /opt/show_usb
    
  4. Führen Sie das Skript testweise von einem Terminal aus mit dem folgenden Befehl aus:

    python3 /opt/show_usb/show_usb.py
    
  5. 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:

  1. Prüfen Sie, ob das Verzeichnis /etc/guest-session/skel/.config/autostartexistiert. Wenn nicht, erstellen Sie es:

    sudo mkdir -p /etc/guest-session/skel/.config/autostart
    
  2. 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.

verwandte Informationen