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:
- Como criar (e remover) automaticamente um link na área de trabalho para unidades USB montadas
- 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.
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
usb
dispositivo pelo comando:find /dev/disk -ls | grep <disk>
. Se estiverusb
na 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
- Copie o script abaixo em um arquivo vazio e salve-o como
show_usb.py
crie o diretório
/opt/show_usb
(já que queremos executá-lo para uma conta de convidado):sudo mkdir /opt/show_usb
Copie o script para
/opt/show_usb
:sudo cp /path/to/show_usb.py /opt/show_usb
Execute o teste do script em um terminal pelo comando:
python3 /opt/show_usb/show_usb.py
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:
Veja se o diretório
/etc/guest-session/skel/.config/autostart
existe. Se não, crie-o:sudo mkdir -p /etc/guest-session/skel/.config/autostart
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.