Fedora

如何關閉工作區中的所有應用程序?

  • March 8, 2017

是否有 gnome 3 擴展或 Fedora 25 快捷方式來關閉工作區中所有打開的應用程序?(例如,通過按 X 來關閉工作區本身)。

我很久以前在某個地方看到過該功能,忘記在哪裡,但預設情況下它在 Fedora 中不可用。

下面的答案是在 Gnome3 / Ubuntu 上編寫和測試的。如果您在 Fedora / Gnome 上執行時遇到問題,請提及。


在 Gnome 中關閉特定工作區上的所有應用程序視窗的腳本

下面的腳本將關閉特定工作區上的所有視窗,有兩個選項:

  1. 不帶參數執行時,它會關閉目前工作區的所有視窗,例如:
python3 /path/to/script.py
  1. 當以特定工作區作為參數執行時,它將關閉該工作區上的所有視窗,例如:
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)

如何使用

  1. 該腳本需要wmctrl,如果它不在您的系統上,則應該安裝它。
  2. 將腳本複製到一個空文件中,另存為close_wins.py
  3. 現在從終端視窗測試腳本,將目標工作區作為參數,例如:
python3 /path/to/close_wins.py 2

優雅地關閉工作區 3 上的所有視窗(0 = 工作區 1)

要關閉目前工作區上的所有視窗,請不帶參數執行它:

python3 /path/to/close_wins.py
  1. 如果一切正常,請將其添加到快捷鍵:選擇:系統設置>“鍵盤”>“快捷方式”>“自定義快捷方式”。點擊“+”並添加命令:
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

並隨後在內部使用目前工作空間作為參數。

引用自:https://unix.stackexchange.com/questions/349858