是否有 gnome 3 扩展或 fedora 25 快捷方式可以关闭工作区中所有打开的应用程序? (例如,通过按 X 关闭工作区本身)。
我很久以前在某个地方见过这个功能,忘了在哪里,但默认情况下它在 fedora 中不可用。
答案1
下面的答案是在 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)
如何使用
- 脚本需要控制面板,如果您的系统上没有该软件,则应安装该软件。
- 将脚本复制到一个空文件中,另存为
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
并随后在内部使用当前工作空间作为参数。