
如果我連接外部裝置(例如 USB 記憶棒或 Android 智慧型手機),它將自動在 nautilus 中打開,並獲得鎖定到 Unity 啟動器的相應圖示。有什麼辦法可以防止這種情況發生嗎?
我使用的是 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
如果將某個項目新增至清單中,則腳本會將清單寫入主目錄中的隱藏檔案中。如果刪除某個項目,它會讀取隱藏檔案並恢復黑名單(僅在卸載裝置時需要一次)