Evitar que dispositivos externos sejam bloqueados para o iniciador

5

Se eu conectar um dispositivo externo (como um pendrive ou smartphone Android), ele será aberto automaticamente no nautilus e um ícone correspondente será bloqueado para o ativador de unidade. Existe alguma maneira de evitar isso?

Estou usando o Ubuntu 14.04

    
por amoz871 19.01.2016 / 12:32

1 resposta

4

Se você desbloquear um dispositivo a partir do Unity Launcher, ele será realmente colocado na lista negra no iniciador. Você pode ver quais dispositivos estão atualmente na lista negra pelo comando:

gsettings get com.canonical.Unity.Devices blacklist

O script abaixo é uma maneira alternativa de configurar seus próprios dispositivos na lista negra . A diferença é que o script faz isso de maneira permanente, até que você remova o arquivo ~/.blacklist_data . (veja a explicação: Como funciona )

script de plano de fundo

Mesmo para um script de segundo plano, este é extremamente leve, como resultado do fato de que, se nada mudar para a lista negra, somente a lista negra atual será lida pelo comando gsettings . Ele lê o banco de dados dconf , que está no formato binary e, portanto, muito leve.

O script

#!/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

  1. Copie o script em um arquivo vazio, salve-o como myown_blacklist.py
  2. Teste - execute-o pelo comando:

    python3 /pat/to/myown_blacklist.py'
    

    Agora desbloqueie seus dispositivos indesejados (qualquer um, ele funciona não apenas dispositivos usb). Desbloqueio só é necessário uma vez.

  3. Se tudo funcionar bem, adicione-o a Startup Applications: escolha Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

    python3 /pat/to/myown_blacklist.py'
    

Como funciona

A questão é 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 gravará a lista em um arquivo oculto em seu diretório pessoal. Se um item for removido, ele lê o arquivo oculto e restaura a lista negra (isso é necessário apenas uma vez ao desmontar o dispositivo)

    
por Jacob Vlijm 19.01.2016 / 15:23