Abrindo um terminal por padrão quando o USB é inserido

2

Por padrão, quando a mídia removível é inserida, o Ubuntu abrirá o Nautilus no diretório de montagem. Desativei este recurso, mas queria saber se eu poderia configurar o Gnome para abrir um terminal no diretório de montagem.

EDIT: Eu estou usando o Ubuntu 15.10.

    
por Alessandro Power 05.11.2015 / 02:49

1 resposta

1

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)
    
por Jacob Vlijm 05.11.2015 / 09:30