我在 Ask Ubuntu 上回答过gnome-terminal
通过命令退出所有实例但正如你们都可以读到的那样,gnome-terminal
似乎没有一个SIG
电话可以用来模拟这个“关闭”事件。所以这让我问,GNOME/KDE/LXDE/{将您的窗口/桌面管理器/环境放在这里}有没有办法模拟“单击关闭按钮”事件?我有读 不同的 问题 那可能与此有任何关系,但不要回答此问题。
我正在寻找的是全球的命令(如果存在)在不同的场景中执行此操作。如果不存在,请解释“关闭”按钮的工作原理。
可能的用途:
- 我为确定的任务打开一组应用程序,并希望通过一次笔画/命令关闭所有应用程序(不再使用时),而不抑制任何应用程序您想保存您的工作吗?警报。
- 关闭所有
gnome-terminal
实例,但如果有子进程仍在运行,则警告我。 - 我现在脑子里没有其他的事情了……
答案1
我相信相关的手册页是,XKillClient。您可以使用xdotool
模拟从终端单击关闭按钮,如下所示。
例子
假设我有一个gnome-terminal
打开的文件,它的名称是“saml@grinchy:/home”。
获取窗口ID
$ xdotool search --name "saml@grinchy:/home" 96488188
发送一个Alt+F4
$ xdotool windowactivate --sync 96488188 key --clearmodifiers \ --delay 100 alt+F4
您可以通过将第一个命令嵌入到第二个命令中将它们放在一起:
$ xdotool windowactivate --sync $( ...1st command...) key --clearmodifiers \
--delay 100 alt+F4
xdotool
你可以通过同时做这两件事来拯救自己:
$ xdotool search --name "saml@grinchy:~" key alt+f4
全球范围
您可以调整我提供的内容以在具有相同名称的 Windows 上运行它:
$ xdotool search --name "saml@grinchy:~"
96488779
96468996
或者在 Windows 上通过其他属性。您可以使用xwininfo
来查找有关特定窗口的更多信息。运行它,然后只需单击感兴趣的窗口:
$ xwininfo
xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.
xwininfo: Window id: 0x5c04d4b "saml@grinchy:~"
Absolute upper-left X: 14
Absolute upper-left Y: 74
Relative upper-left X: 14
Relative upper-left Y: 74
Width: 941
Height: 361
Depth: 32
Visual: 0x62
Visual Class: TrueColor
Border width: 0
Class: InputOutput
Colormap: 0x5c00003 (not installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +14+74 -485+74 -485-465 +14-465
-geometry 132x24+14+74
处理 X11 窗口时的其他有用工具是xdpyinfo
& xprop
。xdpyinfo
可用于查找有关 X 服务器的信息。这样你就可以找出哪个窗口具有焦点:
$ xdpyinfo |grep focus
focus: window 0x5c00005, revert to Parent
xprop
并且xwininfo
可以进行-id
切换,以便您可以向他们提供您感兴趣的窗口 ID,而不必单击它:
$ xprop -id 0x5c00001|grep -i class
WM_CLASS(STRING) = "gnome-terminal", "Gnome-terminal"
参考
答案2
我发现xdotool
它很不稳定/有缺陷,有时它会关闭前台窗口而不是应该关闭的窗口。这似乎是由于将窗口带到前台后发送按键的方式而不是直接发送窗口事件,这是一个非常烦人的问题。我建议使用wmctrl
,它直接关闭窗口而不发送击键。
您可以通过匹配名称直接关闭窗口,例如,这两者都会关闭“Untitled Document 1 - gedit”窗口:
wmctrl -c "gedit"
wmctrl -c "Untitled"
您可以使用该-F
选项仅考虑完全匹配:
wmctrl -F -c "Untitled Document 1 - gedit"
或者你可以直接给出 id:
wmctrl -i -c "121634821"
更多使用示例/文档可以找到这里。
我确实发现非常有用的一件事是xdotool
能够等待使用--sync
参数得到结果。将两个命令组合成一个命令是这样完成的:
xdotool search --sync --name "gedit" | xargs wmctrl -i -c
如果您使用的是 Mac,您可能需要以下-I{}
参数:
xdotool search --sync --name "gedit" | xargs -I{} wmctrl -i -c {}
如果你想支持多个窗口,你应该告诉xargs
每次wmctrl
调用时最多使用 1 个参数-n
。wmctrl
不明确支持多个窗口作为参数:
xdotool search --sync --name "gedit" | xargs -I{} -n 1 wmctrl -i -c {}
这将等到至少有 1 个这样的窗口,然后关闭所有窗口。
答案3
pkill(1) 应该是你所需要的。