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

0

Como posso criar (e remover se 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?

    
por Florian L. 19.02.2016 / 20:00

1 resposta

1

Sua pergunta acaba sendo de duas perguntas separadas:

  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 em [1.] e [2.] abaixo.

1. Criar automaticamente um link de área de trabalho para unidades USB montadas (em geral)

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

Oprocedimento;comofunciona

Oscriptabaixoéumaversãoeditadade este . Esta versão:

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

Ao mesmo tempo

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

Como configurar

  1. Copie o script abaixo em um arquivo vazio, salve-o como show_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. Teste o script a partir de um terminal pelo comando:

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

    python3 /opt/show_usb/show_usb.py
    

O script

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

Para fazer o autostart do script em uma sessão de convidado:

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

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

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

    No arquivo que é aberto, 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 convidado para ser encontrada aqui .
  • O script só atua se uma nova unidade for montada e não incluir nenhuma carga perceptível no processador.
por Jacob Vlijm 22.02.2016 / 13:56