如何创建一个快捷方式来关闭同一应用程序的所有窗口?

use*_*864 4 keyboard shortcut-keys unity launcher

当我在 Unity 启动器中右键单击某个应用程序的图标时,我可以按Quit关闭与该应用程序对应的所有窗口。是否可以使用在活动窗口(以及与同一应用程序对应的所有其他窗口)上运行的键盘快捷键执行相同操作?

我可以用 做类似的事情xkill,但在那种情况下,我没有记住未保存文件的消息。

Jac*_*ijm 10

如何使用快捷键安全地关闭 gui 应用程序的所有窗口

优雅地关闭应用程序窗口并确保不会丢失数据的最安全方法是使用wmctrl(默认情况下未安装):

wmctrl -ic <window_id>
Run Code Online (Sandbox Code Playgroud)

要在脚本中使用它来关闭应用程序的所有窗口:

  1. 安装xdotoolwmctrl

    sudo apt-get install wmctrl xdotool
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将下面的脚本复制到一个空文件中,另存为 stop_active.py

    wmctrl -ic <window_id>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将以下命令添加到快捷键:

    python3 /path/to/stop_active.py
    
    Run Code Online (Sandbox Code Playgroud)

    选择:系统设置>“键盘”>“快捷方式”>“自定义快捷方式”。单击“+”并添加命令:

    python3 /path/to/stop_active.py
    
    Run Code Online (Sandbox Code Playgroud)

    注意不要在快捷键中使用~$HOME,而是使用绝对路径。

现在可以使用快捷方式优雅地关闭最前面窗口的所有窗口。

解释

我尝试了不同的kill选项(kill -2kill -HUPkill -s TERM <pid>这是在几个职位提到优雅地关闭应用程序等)。在gedit未保存更改的窗口上进行测试,但所有更改都愉快地关闭了窗口,没有任何交互。

wmctrl 确实会询问该怎么做,类似于Ctrl+ Q

然后脚本首先pid使用命令找出最前面的窗口的 :

xdotool getactivewindow getwindowpid
Run Code Online (Sandbox Code Playgroud)

随后,使用以下命令调用当前打开的窗口列表:

wmctrl -lp
Run Code Online (Sandbox Code Playgroud)

从该列表中,使用以下命令选择并关闭相应的窗口:

wmctrl -ic <window_id>
Run Code Online (Sandbox Code Playgroud)

笔记

如果您要关闭所有nautilus窗口,请在行中

if pid in w and not "Desktop" in w:
Run Code Online (Sandbox Code Playgroud)

"Desktop"指的是您的桌面窗口,通常应始终保留。如果您使用的不是英文版 Ubuntu,请替换"Desktop"为您语言中桌面的本地化名称。