防止外部设备被锁定到启动器

防止外部设备被锁定到启动器

如果我连接外部设备(例如 USB 记忆棒或 Android 智能手机),它将自动在 nautilus 中打开,并将相应的图标锁定到 Unity Launcher。有什么方法可以防止这种情况发生吗?

我正在使用 Ubuntu 14.04

答案1

如果你从 Unity Launcher 解锁设备,它实际上列入黑名单从启动器。您可以使用以下命令查看当前已列入黑名单的设备:

gsettings get com.canonical.Unity.Devices blacklist

下面的脚本是设置您自己的黑名单设备。不同之处在于,脚本会以永久的方式执行此操作,直到您删除该文件~/.blacklist_data。(参见解释:怎么运行的

背景脚本

即使是背景脚本,这也是极其轻量级,因为如果黑名单没有任何变化,则命令只会读取当前黑名单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

如果将某项添加到列表中,脚本会将列表写入主目录中的隐藏文件。如果删除某项,脚本会读取隐藏文件并恢复黑名单(卸载设备时只需执行一次)

相关内容