如何关闭工作区中的所有应用程序?

如何关闭工作区中的所有应用程序?

是否有 gnome 3 扩展或 fedora 25 快捷方式可以关闭工作区中所有打开的应用程序? (例如,通过按 X 关闭工作区本身)。

我很久以前在某个地方见过这个功能,忘了在哪里,但默认情况下它在 fedora 中不可用。

答案1

下面的答案是在 Gnome3 / Ubuntu 上编写和测试的。如果您在 Fedora / Gnome 上运行时遇到问题,请提及。


用于关闭 Gnome 中特定工作区上的所有应用程序窗口的脚本

下面的脚本将关闭特定工作区上的所有窗口,有两个选项:

  1. 运行时没有参数,它会关闭所有窗口当前的工作区,例如:

    python3 /path/to/script.py
    
  2. 当使用特定工作区作为参数运行时,它将关闭该工作区上的所有窗口,例如:

    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. 脚本需要控制面板,如果您的系统上没有该软件,则应安装该软件。
  2. 将脚本复制到一个空文件中,另存为close_wins.py
  3. 现在,使用目标工作区作为参数,从终端窗口测试运行脚本,例如:

    python3 /path/to/close_wins.py 2
    

    优雅地关闭所有窗口在工作区 3 上(0 = 工作空间 1)

    关闭所有窗口当前工作区,不带参数运行它:

    python3 /path/to/close_wins.py
    
  4. 如果一切正常,请将其添加到快捷键:选择:系统设置>“键盘”>“快捷方式”>“自定义快捷方式”。单击“+”并添加命令:

    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

并随后在内部使用当前工作空间作为参数。

相关内容