Uma versão editada do este script faz o trabalho.
Quando um (qualquer) dispositivo usb está sendo conectado, um gnome-terminal
é aberto em seu diretório (raiz).
No exemplo, quando uma unidade flash de inicialização de 14.04 usb
está conectada:
Oscript
#!/usr/bin/env python3
import os
import subprocess
import time
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):
command = "find /dev/disk -ls | grep /"+disk
output = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
if "usb" in output:
return True
else:
return False
done = []
while True:
mounted = get_mountedlist()
new_paths = [dev for dev in mounted 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:
os.chdir(item[1])
subprocess.Popen(["gnome-terminal"])
done = mounted
time.sleep(4)
Como usar
- Copie o script em um arquivo vazio, salve-o como
open_usb.py
-
Teste - execute o script. com o comando:
python3 /path/to/open_usb.py
-
Se tudo funcionar bem, adicione-o aos aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicione o comando:
python3 /path/to/open_usb.py
Notas
- Eu testei no Unity (14.04), mas é improvável que ele quebre em qualquer versão do Ubuntu, desde que tenha a configuração padrão (incluindo
python3
) - O script só executa uma verificação muito simples e leve, a cada quatro segundos. Em meus testes, não consegui determinar nenhuma carga adicional do processador.
EDITAR
Como mencionado em um comentário, embora o script funcione como deveria, um problema ocorre quando você segura remove o usb
device: é dado um aviso de que o volume está "ocupado" pelo roteiro.
A causa é que o script cd
-s no diretório do volume, antes de abrir o terminal no diretório raiz do volume.
A solução
A solução é bem simples; faça o script deixar o diretório novamente depois de abrir o terminal no diretório-raiz do dispositivo usb
. Na versão abaixo, o problema é corrigido:
#!/usr/bin/env python3
import os
import subprocess
import time
home = os.environ["HOME"]
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):
command = "find /dev/disk -ls | grep /"+disk
output = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
if "usb" in output:
return True
else:
return False
done = []
while True:
mounted = get_mountedlist()
new_paths = [dev for dev in mounted 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:
os.chdir(item[1])
subprocess.call(["gnome-terminal"])
os.chdir(home)
done = mounted
time.sleep(4)