web-dev-qa-db-fra.com

Empêcher que des périphériques externes soient verrouillés sur le lanceur

Si je connecte un périphérique externe (une clé USB, un smartphone Android, par exemple), celui-ci s'ouvre automatiquement dans Nautilus et une icône correspondante est verrouillée dans le lanceur de l'unité. Est-il un moyen d'empêcher cela?

J'utilise Ubuntu 14.04

5
amoz871

Si vous déverrouillez un appareil à partir du programme de lancement d'Unity, il est en réalité sur liste noire à partir du programme de lancement. Vous pouvez voir quels périphériques sont actuellement sur la liste noire à l'aide de la commande:

gsettings get com.canonical.Unity.Devices blacklist

Le script ci-dessous est une autre façon de définir votre propre appareils sur liste noire. La différence est que le script le fait de manière permanente, jusqu'à ce que vous supprimiez le fichier ~/.blacklist_data. (voir explication: Comment ça marche)

script de fond

Même pour un script en tâche de fond, celui-ci est extrêmement léger, en raison du fait que, si rien ne change à la liste noire, seule la liste noire actuelle est lue par la commande gsettings. Il lit la base de données dconf, qui est au format binary et est donc très légère.

Le scénario

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

Comment utiliser

  1. Copiez le script dans un fichier vide, enregistrez-le sous le nom myown_blacklist.py
  2. Testez-le avec la commande:

    python3 /pat/to/myown_blacklist.py`
    

    Maintenant, déverrouillez vos périphériques indésirables (tous, cela ne fonctionne pas uniquement sur les périphériques usb). Le déverrouillage n'est nécessaire qu'une seule fois.

  3. Si tout fonctionne correctement, ajoutez-le aux applications de démarrage: choisissez Tableau de bord> Applications de démarrage> Ajouter. Ajoutez la commande:

    python3 /pat/to/myown_blacklist.py`
    

Comment ça fonctionne

Le problème est que Unity "oublie" les périphériques une fois qu'ils sont démontés. Le script garde ensuite une trace de ce qui arrive à la sortie de:

gsettings get com.canonical.Unity.Devices blacklist

Si un élément est ajouté à la liste, le script écrit la liste dans un fichier caché de votre répertoire personnel. Si un élément est supprimé, il lit le fichier caché et restaure la liste noire (ceci n'est nécessaire qu'une fois lors du démontage de l'appareil).

5
Jacob Vlijm