![使用以下方式进行高级“关闭”操作wmctrl](https://linux22.com/image/1096815/%E4%BD%BF%E7%94%A8%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%BF%9B%E8%A1%8C%E9%AB%98%E7%BA%A7%E2%80%9C%E5%85%B3%E9%97%AD%E2%80%9D%E6%93%8D%E4%BD%9Cwmctrl.png)
你知道怎么做吗?我知道如何用键盘(Alt+F4)来做,我知道如何用鼠标(单击那个X)来做,我也知道应该kill X
杀死ID为X的进程(也killall Y
应该杀死名为Y的进程)。但我想知道如何杀死活动窗口从终端。
因此,根据我上面所述,一个有效的答案也是获取活动窗口的 id。
现在我正在实现这个功能特(模拟 Alt+F4),但我想知道是否有一种方法不需要安装另一个应用程序。谢谢大家。
编辑。这是完整的脚本。首先启用“按下 Ctrl 时显示鼠标”,然后将此脚本添加到 CompizConfig 中的命令并绑定到右上角。当您触摸右上角时,会显示鼠标周围的小通知。如果您不执行任何操作,活动窗口将在 1 秒后关闭。但是,如果您在 1 秒内再次触摸角落,则活动窗口将不会关闭。
xte 'key Control_R'; if [ -f ~/.fcont ]; then rm -f -r ~/.fcont; else touch ~/.fcont; sleep 1; if [ -f ~/.fcont ]; then xkill -id `xprop -root _NET_ACTIVE_WINDOW | cut -d\# -f2`; rm -f -r ~/.fcont; fi fi
请注意,我仍然使用之前命名的 xte 应用程序这我之前提出的问题从未得到解答。
答案1
如果你想真正地避免使用默认未安装的应用程序:
xkill -id `xprop -root _NET_ACTIVE_WINDOW | cut -d\# -f2`
再次,这似乎效果相当好。
笔记:如果是一些应用程序(见注释)这可能意味着应用程序的所有窗口都已关闭。gnome-terminal
就是这样一个应用程序,但terminator
不受影响xterm
。我认为这更多的是这些应用程序的一个错误(可能是设计使然),而不是我的命令的一个错误。
答案2
使用以下方式进行高级“关闭”操作wmctrl
下面的命令也使用 EWMH 规范关闭当前活动窗口,尽管它做需要安装另一个程序,但您似乎更愿意避免这一点。
具体内容
- 这是一个高级“关闭”操作。换句话说,它向应用程序发送与通过鼠标单击“关闭”小工具或快捷键发送的完全相同的消息,要求其关闭窗口。
- 它不模拟快捷键,因此无论您的快捷键是什么,即使您没有配置快捷键(或者甚至可能没有配置键盘),它也可以工作。
因此,它具有预期的行为:
- 它只会关闭目标窗口而不是整个应用程序(使用 xfce4-terminal、Chromium、Thunderbird 测试)。
- 此外,它还为应用程序提供了对关闭事件做出反应的机会,比如询问确认(使用 Thunderbird 在正在写邮件的窗口中进行确认,使用 Firefox 在关闭打开多个选项卡的窗口之前询问确认)甚至可能忽略该事件。
命令
wmctrl-c:活动:
参考
从项目主页wmctrl——与 EWMH/NetWM 兼容的 X 窗口管理器交互的命令行工具。
-c 正常关闭窗口。
和
特殊字符串“:ACTIVE:”(不带引号)可用于指示 wmctrl 使用当前活动窗口执行操作。
答案3
我会用xdotool
:
xdotool windowkill `xdotool getactivewindow`
似乎能快速、安静地完成工作。