
Se eu conectar um dispositivo externo (como um pendrive ou smartphone Android), ele será aberto automaticamente no nautilus e terá um ícone correspondente bloqueado no inicializador do Unity. Existe alguma maneira de evitar isso?
Estou usando Ubuntu 14.04
Responder1
Se você desbloquear um dispositivo no Unity Launcher, ele realmentena lista negrado lançador. Você pode ver quais dispositivos estão atualmente na lista negra pelo comando:
gsettings get com.canonical.Unity.Devices blacklist
O script abaixo é uma forma alternativa de definir o seu própriodispositivos na lista negra. A diferença é que o script faz isso de forma permanente, até que você remova o arquivo ~/.blacklist_data
. (ver explicação:Como funciona)
roteiro de fundo
Mesmo para um script de fundo, este éextremamenteleve, pois, se nada mudar na lista negra, apenas a lista negra atual será lida pelo gsettings
comando. Ele lê o dconf
banco de dados, que está em binary
formato e, portanto, muito leve.
O roteiro
#!/usr/bin/env python3
import subprocess
import os
import time
blacklist_data = os.environ["HOME"]+"/.blacklist_data"
def get_setlist():
cmd = "gsettings get com.canonical.Unity.Devices blacklist"
blacklist = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").strip()
return "[]" if blacklist == "@as []" else blacklist
try:
blacklist1 = str(open(blacklist_data).read()).strip()
cmd = 'gsettings set com.canonical.Unity.Devices blacklist "'+blacklist1+'"'
subprocess.call(["/bin/bash", "-c", cmd])
except FileNotFoundError:
blacklist1 = "[]"
open(blacklist_data, "wt").write(blacklist1)
while True:
time.sleep(1)
blacklist2 = get_setlist()
if blacklist2 != blacklist1:
oldlist = open(blacklist_data).read().strip()
n_old = len(eval(oldlist))
try:
n_new = len(eval(blacklist2))
except SyntaxError:
n_new = 0
if n_old < n_new:
open(blacklist_data, "wt").write(blacklist2)
else:
cmd = 'gsettings set com.canonical.Unity.Devices blacklist "'+oldlist+'"'
subprocess.call(["/bin/bash", "-c", cmd])
blacklist1 = blacklist2
Como usar
- Copie o script em um arquivo vazio e salve-o como
myown_blacklist.py
Teste - execute-o pelo comando:
python3 /pat/to/myown_blacklist.py`
Agora desbloqueie seus dispositivos indesejados (qualquer um, não funciona apenas com dispositivos USB). O desbloqueio só é necessário uma vez.
Se tudo funcionar bem, adicione-o aos Aplicativos de Inicialização: escolha Dash > Aplicativos de Inicialização > Adicionar. Adicione o comando:
python3 /pat/to/myown_blacklist.py`
Como funciona
O problema é que o Unity “esquece” os dispositivos quando eles são desmontados. O script então acompanha o que acontece com a saída de:
gsettings get com.canonical.Unity.Devices blacklist
Se um item for adicionado à lista, o script grava a lista em um arquivo oculto em seu diretório inicial. Se um item for removido, ele lê o arquivo oculto e restaura a lista negra (isso só é necessário uma vez na desmontagem do dispositivo)