Fedora
如何關閉工作區中的所有應用程序?
是否有 gnome 3 擴展或 Fedora 25 快捷方式來關閉工作區中所有打開的應用程序?(例如,通過按 X 來關閉工作區本身)。
我很久以前在某個地方看到過該功能,忘記在哪裡,但預設情況下它在 Fedora 中不可用。
下面的答案是在 Gnome3 / Ubuntu 上編寫和測試的。如果您在 Fedora / Gnome 上執行時遇到問題,請提及。
在 Gnome 中關閉特定工作區上的所有應用程序視窗的腳本
下面的腳本將關閉特定工作區上的所有視窗,有兩個選項:
- 不帶參數執行時,它會關閉目前工作區的所有視窗,例如:
python3 /path/to/script.py
- 當以特定工作區作為參數執行時,它將關閉該工作區上的所有視窗,例如:
python3 /path/to/script.py 0
將關閉工作區 1 上的所有應用程序。請注意,第一個工作區的索引為 0
劇本
#!/usr/bin/env python3 import subprocess import sys arg = sys.argv[1:] def check_close(w_id): w_data = get(["xprop", "-id", w_id]) if "_NET_WM_WINDOW_TYPE_NORMAL" in w_data: subprocess.call(["wmctrl", "-ic", w]) def get(cmd): return subprocess.check_output(cmd).decode("utf-8") wlist = [l.split() for l in get(["wmctrl", "-lG"]).splitlines()] arg = arg[0] if arg else [ l.split()[0] for l in get(["wmctrl", "-d"]).splitlines() if '*' in l ][0] for w in [w[0] for w in wlist if w[1] == arg]: check_close(w)
如何使用
- 該腳本需要wmctrl,如果它不在您的系統上,則應該安裝它。
- 將腳本複製到一個空文件中,另存為
close_wins.py
- 現在從終端視窗測試腳本,將目標工作區作為參數,例如:
python3 /path/to/close_wins.py 2
優雅地關閉工作區 3 上的所有視窗(0 = 工作區 1)
要關閉目前工作區上的所有視窗,請不帶參數執行它:
python3 /path/to/close_wins.py
- 如果一切正常,請將其添加到快捷鍵:選擇:系統設置>“鍵盤”>“快捷方式”>“自定義快捷方式”。點擊“+”並添加命令:
python3 /path/to/close_wins.py
…或以您喜歡的任何其他方式執行它。
解釋
該命令
wmctrl -lG
將為我們提供有關目前打開的視窗的資訊。輸出如下所示:0x018000f9 0 135 206 650 500 jacob-System-Product-Name pscript_6.py (1,6 GB Volume /media/jacob/6C08-F637) - gedit 0x01600a09 1 283 275 724 443 jacob-System-Product-Name jacob@jacob-System-Product-Name: ~ 0x018018be 1 152 407 650 500 jacob-System-Product-Name Untitled Document 1 - gedit 0x0140008c 2 0 101 1280 960 jacob-System-Product-Name gnome - Can I have a countdown window show the time until next suspend? - Ask Ubuntu - Mozilla Firefox 0x01600a49 2 47 146 724 443 jacob-System-Product-Name jacob@jacob-System-Product-Name: ~
從第二列中,我們可以檢索視窗的位置:
0x0140008c 2 0 101 1280 960 jacob-System-Product-Name gnome - Can I have a countdown window show the time until next suspend? - Ask Ubuntu - Mozilla Firefox
2
表示視窗位於工作區 3 上,因為0
指的是第一個工作區。如果腳本以工作空間作為參數執行,則腳本會解析出相應的 window-id,然後使用以下命令優雅地關閉它們(例如):
wmctrl -ic 0x0140008c
如果腳本在沒有工作區作為參數的情況下執行,則腳本會從命令中檢索目前工作區:
wmctrl -d
並隨後在內部使用目前工作空間作為參數。