Como posso criar automaticamente um link na área de trabalho ou em $HOME quando o USB Stick está montado?

Como posso criar automaticamente um link na área de trabalho ou em $HOME quando o USB Stick está montado?

Como posso criar (e remover se estiver desconectado) um link simbólico para o ponto de montagem de um dispositivo USB recém-conectado na área de trabalho ou no $HOME da conta de convidado do sistema?

Responder1

Sua pergunta consiste em duas perguntas distintas:

  1. Como criar (e remover) automaticamente um link na área de trabalho para unidades USB montadas
  2. Como executá-lo na conta de convidado

Essas perguntas são respondidas [1.]abaixo [2.].

1. Crie automaticamente um link de desktop para unidades USB montadas (em geral)

Com um pequeno script de fundo, você pode criar automaticamente um link em sua área de trabalho para as unidades USB montadas,eremovê-lo automaticamente se a unidade for removida.

insira a descrição da imagem aquiinsira a descrição da imagem aqui

O procedimento; como funciona

O script abaixo é uma versão editada doEste. Esta versão:

  • fica de olho nos dispositivos recém-montados (usando o comando lsblk)
  • se um novo item aparecer, ele verifica se o dispositivo recém-montado é um usbdispositivo pelo comando: find /dev/disk -ls | grep <disk>. Se estiver usbna saída, a nova montagem é válida.
  • se a montagem for válida, é criado um link na área de trabalho do usuário, com o comando: ln -s <new_mount> <target>.
    O link de destino é nomeado: [USB] <devicename>.

Ao mesmo tempo

  • A nova montagem é adicionada a uma lista. periodicamente (uma vez a cada quatro segundos), a lista é verificada. Se a montagem não existir mais, o link correspondente será removido da sua área de trabalho.

Como configurar

  1. Copie o script abaixo em um arquivo vazio e salve-o comoshow_usb.py
  2. crie o diretório /opt/show_usb(já que queremos executá-lo para uma conta de convidado):

    sudo mkdir /opt/show_usb
    
  3. Copie o script para /opt/show_usb:

    sudo cp /path/to/show_usb.py /opt/show_usb
    
  4. Execute o teste do script em um terminal pelo comando:

    python3 /opt/show_usb/show_usb.py
    
  5. Se tudo funcionar bem, adicione-o a Aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

    python3 /opt/show_usb/show_usb.py
    

O roteiro

#!/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. Como executar automaticamente o script, especificamente na conta de convidado

Para fazer o script iniciar automaticamente em uma sessão de convidado:

  1. Veja se o diretório /etc/guest-session/skel/.config/autostartexiste. Se não, crie-o:

    sudo mkdir -p /etc/guest-session/skel/.config/autostart
    
  2. Agora crie um inicializador de inicialização para a conta de convidado:

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

    No arquivo que abrir, cole o código abaixo:

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

    Salve e feche o arquivo. Agora, quando você fizer login na conta de convidado, o script será executado.

É isso

Notas

  • Mais sobre como editar a conta de convidadopara ser encontrado aqui.
  • O script só atua se uma nova unidade for montada e não adiciona nenhuma carga perceptível ao processador.

informação relacionada