¿Cómo puedo crear automáticamente un enlace en el escritorio o en $HOME cuando la memoria USB está montada?

¿Cómo puedo crear automáticamente un enlace en el escritorio o en $HOME cuando la memoria USB está montada?

¿Cómo puedo crear (y eliminar si está desconectado) un enlace simbólico al punto de montaje de un dispositivo USB recién conectado en el escritorio o en $HOME de la cuenta de invitado del sistema?

Respuesta1

Su pregunta resulta ser de dos preguntas separadas:

  1. Cómo crear (y eliminar) automáticamente un enlace en el escritorio a unidades USB montadas
  2. Cómo ejecutarlo en una cuenta de invitado

Estas preguntas se responden a [1.]continuación [2.].

1. Cree automáticamente un enlace de escritorio a las unidades USB montadas (en general)

Con un pequeño script en segundo plano, puede crear automáticamente un enlace en su escritorio a las unidades USB montadas,yeliminarlo automáticamente si se retira la unidad.

ingrese la descripción de la imagen aquíingrese la descripción de la imagen aquí

El procedimiento; cómo funciona

El siguiente script es una versión editada deÉste. Esta versión:

  • vigila los dispositivos recién montados (usando el comando lsblk)
  • si aparece un elemento nuevo, verifica si el dispositivo recién montado es un usbdispositivo mediante el comando: find /dev/disk -ls | grep <disk>. Si está usben la salida, el nuevo montaje es válido.
  • si el montaje es válido, se crea un enlace en el escritorio del usuario, con el comando: ln -s <new_mount> <target>.
    El enlace de destino se llama: [USB] <devicename>.

Al mismo tiempo

  • La nueva montura se agrega a una lista. periódicamente (una vez cada cuatro segundos), se comprueba la lista. Si el montaje ya no existe, su enlace correspondiente se elimina de su escritorio.

Como instalar

  1. Copie el siguiente script en un archivo vacío y guárdelo comoshow_usb.py
  2. cree el directorio /opt/show_usb(ya que queremos ejecutarlo para una cuenta de invitado):

    sudo mkdir /opt/show_usb
    
  3. Copie el script en /opt/show_usb:

    sudo cp /path/to/show_usb.py /opt/show_usb
    
  4. Pruebe el script desde una terminal con el comando:

    python3 /opt/show_usb/show_usb.py
    
  5. Si todo funciona bien, agréguelo a Aplicaciones de inicio: Tablero > Aplicaciones de inicio > Agregar. Agregue el comando:

    python3 /opt/show_usb/show_usb.py
    

La secuencia de comandos

#!/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. Cómo ejecutar automáticamente el script, específicamente en la cuenta de invitado

Para hacer que el script se inicie automáticamente en una sesión de invitado:

  1. Mira si el directorio /etc/guest-session/skel/.config/autostartexiste. Si no, créalo:

    sudo mkdir -p /etc/guest-session/skel/.config/autostart
    
  2. Ahora cree un iniciador de inicio para la cuenta de invitado:

    sudo -i gedit /etc/guest-session/skel/.config/autostart/desktop_usb.desktop
    

    En el archivo que se abre, pegue el siguiente código:

    [Desktop Entry]
    Name=USB_desktop
    Exec=python3 /opt/show_usb/show_usb.py
    Type=Application
    

    Guarde y cierre el archivo. Ahora, cuando inicie sesión en la cuenta de invitado, se ejecutará el script.

Eso es todo

Notas

  • Más sobre cómo editar la cuenta de invitadopara ser encontrado aquí.
  • El script sólo actúa si se monta una nueva unidad y no agrega ninguna carga notable al procesador.

información relacionada