Предотвращение блокировки внешних устройств для запуска

5

Если я подключу внешнее устройство (например, USB-накопитель или Android-смартфон), он автоматически откроется в nautilus и получит соответствующий значок, заблокированный для пусковой установки единицы. Есть ли способ предотвратить это?

Я использую Ubuntu 14.04

    
задан amoz871 19.01.2016 в 12:32
источник

1 ответ

4

Если вы разблокируете устройство из Unity Launcher, это как фактически черный список из запуска. Вы можете видеть, какие устройства в настоящее время занесены в черный список командой:

gsettings get com.canonical.Unity.Devices blacklist

Сценарий ниже - альтернативный способ установки собственных черных списков . Разница в том, что скрипт делает это постоянно, пока вы не удалите файл ~/.blacklist_data . (см. объяснение: Как это работает )

фоновый скрипт

Даже для фонового сценария этот малый вес extreme в результате того, что, если ничто не меняется в черный список, только текущий черный список считывается командой gsettings , Он считывает базу данных dconf , которая находится в формате binary и, следовательно, очень мала.

Скрипт

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

Как использовать

  1. Скопируйте сценарий в пустой файл, сохраните его как myown_blacklist.py
  2. Протестируйте его командой:

    python3 /pat/to/myown_blacklist.py'
    

    Теперь разблокируйте ваши (какие-либо, работает не только устройства USB) нежелательные устройства. Разблокировка нужна только один раз.

  3. Если все работает нормально, добавьте его в приложения для запуска: выберите Dash > Приложения для запуска > Добавлять. Добавьте команду:

    python3 /pat/to/myown_blacklist.py'
    

Как это работает

Проблема заключается в том, что Unity «забывает» устройства после их размонтирования. Затем скрипт отслеживает, что происходит с выходом:

gsettings get com.canonical.Unity.Devices blacklist

Если элемент добавлен в список, сценарий записывает список в скрытый файл в вашем домашнем каталоге. Если элемент удален, он считывает скрытый файл и восстанавливает черный список (это необходимо только один раз при размонтировании устройства).

    
ответ дан Jacob Vlijm 19.01.2016 в 15:23
источник