如果我连接外部设备(例如 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
如何使用
- 将脚本复制到一个空文件中,另存为
myown_blacklist.py
通过命令测试运行:
python3 /pat/to/myown_blacklist.py`
现在解锁您不需要的设备(任何设备,不仅适用于 USB 设备)。只需解锁一次。
如果一切正常,请将其添加到启动应用程序:选择 Dash > 启动应用程序 > 添加。添加命令:
python3 /pat/to/myown_blacklist.py`
怎么运行的
问题是,一旦设备被卸载,Unity 就会“忘记”它们。然后脚本会跟踪以下输出发生的情况:
gsettings get com.canonical.Unity.Devices blacklist
如果将某项添加到列表中,脚本会将列表写入主目录中的隐藏文件。如果删除某项,脚本会读取隐藏文件并恢复黑名单(卸载设备时只需执行一次)