Evitar que los dispositivos externos se bloqueen en el iniciador

Evitar que los dispositivos externos se bloqueen en el iniciador

Si conecto un dispositivo externo (como una memoria USB o un teléfono inteligente Android), se abrirá automáticamente en Nautilus y se bloqueará el ícono correspondiente en Unity Launcher. hay alguna forma de prevenir esto?

Estoy usando Ubuntu 14.04

Respuesta1

Si desbloquea un dispositivo desde Unity Launcher, en realidaden la lista negradesde el lanzador. Puedes ver qué dispositivos están actualmente en la lista negra con el comando:

gsettings get com.canonical.Unity.Devices blacklist

El siguiente script es una forma alternativa de configurar el tuyo propio.dispositivos en la lista negra. La diferencia es que el script lo hace de forma permanente, hasta que eliminas el archivo ~/.blacklist_data. (ver explicación:Cómo funciona)

guión de fondo

Incluso para un guión de fondo, este esextremadamenteliviano, como resultado del hecho de que, si nada cambia en la lista negra, el gsettingscomando solo lee la lista negra actual. Lee la dconfbase de datos, que está en binaryformato y, por tanto, es muy ligera.

La secuencia de comandos

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

Cómo utilizar

  1. Copie el script en un archivo vacío, guárdelo comomyown_blacklist.py
  2. Pruebe: ejecútelo con el comando:

    python3 /pat/to/myown_blacklist.py`
    

    Ahora desbloquee sus (cualquiera, no solo funciona con dispositivos USB) dispositivos no deseados. El desbloqueo sólo es necesario una vez.

  3. Si todo funciona bien, agréguelo a Aplicaciones de inicio: elija Tablero > Aplicaciones de inicio > Agregar. Agregue el comando:

    python3 /pat/to/myown_blacklist.py`
    

Cómo funciona

El problema es que Unity "olvida" los dispositivos una vez que se desmontan. Luego, el script realiza un seguimiento de lo que sucede con la salida de:

gsettings get com.canonical.Unity.Devices blacklist

Si se agrega un elemento a la lista, el script escribe la lista en un archivo oculto en su directorio de inicio. Si se elimina un elemento, lee el archivo oculto y restaura la lista negra (esto solo es necesario una vez al desmontar el dispositivo)

información relacionada