Se você executar o script abaixo em segundo plano, ele verificará se há volumes montados. Se uma de suas unidades definidas estiver montada, ela abrirá automaticamente a pasta do conjunto no nautilus.
Um pequeno problema foi que o nautilus não suporta a abertura de um diretório em uma nova aba a partir da linha de comando, apenas em uma nova janela. Isso significa que a janela inicial, que aparece se você inserir uma unidade USB, deve ser fechada com facilidade. O script usa wmctrl
para fazer isso, no mesmo momento em que sua pasta escolhida será aberta.
Pode ser necessário instalá-lo primeiro:
sudo apt-get install wmctrl
O script
#!/usr/bin/env python3
import subprocess
import time
#--
drivename_folders = [("My Passport", "docs"), ("7827-2F8C", "sanel")]
#--
def get_mountedlist():
return [item[item.find("/"):] for item in subprocess.check_output(
["/bin/bash", "-c", "lsblk"]).decode("utf-8").split("\n") if "/" in item]
done = []
while True:
mounted = get_mountedlist()
new_paths = [dev for dev in mounted if not dev in done]
valid = sum([[(drive, drive+"/"+item[1], item[0]) for drive in new_paths \
if item[0] in drive] for item in drivename_folders], [])
for item in valid:
open_window = "nautilus "+"'"+item[1]+"'"
close_window = "wmctrl -c "+"'"+item[2]+"'"
subprocess.Popen(["/bin/bash", "-c", open_window])
time.sleep(1)
subprocess.Popen(["/bin/bash", "-c", close_window])
done = mounted
time.sleep(2)
Como usar
-
Copie o script em um arquivo vazio
-
Defina suas unidades e pastas
Na seção principal do script, altere a linha:
drivename_folders = [("My Passport", "docs"), ("7827-2F8C", "MyFolder")]
onde cada tupla representa uma unidade (nome) e a pasta dentro da unidade que deve ser aberta. Eu deixei meu "teste" -nomes como um exemplo.
Se você não tiver certeza sobre o nome exato da sua unidade, executelsblk
para ver o nome (sem o caminho anterior para o ponto de montagem) -
Salve o script
Salve o script como
open_folder.py
e execute-o pelo comando:python3 /path/to/open_folder.py
Se tudo funcionar como você esperava, adicione-o aos seus aplicativos de inicialização
Como funciona
- A cada dois segundos, o script executa o comando
lsblk
para verificar todos os volumes montados. - Se encontrar um ou mais nomes de volumes recém-montados, ele verifica se o nome está na lista de volumes que você definiu para ser aberto de uma maneira específica (abrindo um subdiretório)
- O script abre o subdiretório do volume que você definiu e fecha a janela (raiz da unidade) que foi aberta automaticamente ao conectar a unidade.
- Para evitar que as pastas sejam abertas repetidamente, o volume é adicionado à lista "concluído" até que o volume seja desmontado.
Outros gerenciadores de arquivos
Eu testei em pcmanfm
(Lubuntu) e thunar
(Xubuntu) e, como esperado, em ambos os casos, funciona bem.
Se você quiser usá-lo no Lubuntu ou no Xubuntu, altere a linha:
open_window = "nautilus "+"'"+item[1]+"'"
para:
open_window = "thunar "+"'"+item[1]+"'"
(for Xubuntu)
ou
open_window = "pcmanfm "+"'"+item[1]+"'"
(for Lubuntu, also disable in pcmanfm's preferences: Media > "Show available options for removable media")
Claro, certifique-se de que wmctrl
esteja instalado
O mais provável é que ele funcione em outros gerenciadores de arquivos também.
Versão generalizada do script
A versão do script acima é específica para uma situação. Para poder usar o script em uma ampla gama de propósitos (para executar qualquer comando quando uma unidade específica é conectada, fazendo backups, por exemplo), a versão abaixo pode ser útil.
Nesse caso, na seção head do script, as tuplas representam:
drivename_folders = [(<drivename_a>, <command_a>), (<drivename_b>, <command_b>)]
veja a configuração "teste" no script abaixo.
O script
#!/usr/bin/env python3
import subprocess
import time
#--
drivename_command = [("My Passport", "gnome-terminal"), ("F806-0C50", "gedit")]
#--
def get_mountedlist():
return [item[item.find("/"):] for item in subprocess.check_output(
["/bin/bash", "-c", "lsblk"]).decode("utf-8").split("\n") if "/" in item]
done = []
while True:
mounted = get_mountedlist()
newly_mounted = [dev for dev in mounted if not dev in done]
valid = sum([[(drive, item[1]) for drive in newly_mounted \
if item[0] in drive] for item in drivename_command], [])
for item in valid:
subprocess.Popen(["/bin/bash", "-c", item[1]])
done = mounted
time.sleep(2)
Como usar
-
Copie o script em um arquivo vazio
-
Defina suas unidades e comandos
-
Salve o script
Salve o script como
drive_run.py
e execute-o pelo comando:python3 /path/to/drive_run.py
Se tudo funcionar como você esperava, adicione-o aos seus aplicativos de inicialização