Gnome(Ubuntu):如何使用终端上的命令行将程序窗口置于最前面?


14

我拥有一定的工作环境,其中包含许多打开的Windows。如何以编程方式或使用命令行将具有已知名称/标题的窗口置于最前面?

Answers:


12

我曾经使用wmctrl -a <name>,效果很好,但是最近切换到xdotool,例如:

xdotool search --name <name-or-regex-for-name> windowraise

它还具有许多其他功能。

安装:

sudo apt-get install xdotool


5
xdotool windowraise将窗口移到最前面,但不将焦点放在窗口上或通过窗口切换到桌面。相反,windowactivate将同时完成这三个操作。
jozxyqk 2015年

6

好吧,在sudo apt-get install wmctrl-ing 之后,您可以使用以下bash脚本进行播放:

#! /bin/bash

WINTITLE="Mail/News" # Main Thunderbird window has this in titlebar
PROGNAME="mozilla-thunderbird" # This is the name of the binary for t-bird

# Use wmctrl to list all windows, count how many contain WINTITLE,
# and test if that count is non-zero:

if [ `wmctrl -l | grep -c "$WINTITLE"` != 0 ]
then
wmctrl -a "$WINTITLE" # If it exists, bring t-bird window to front
else
$PROGNAME & # Otherwise, just launch t-bird
fi
exit 0

我在这里找到的


4
无需括号和反引号:if ! wmctrl -l | grep -q "$WINTITLE"
已暂停,直到另行通知。

wmctrl有一个-i选项,它支持使用带有其十六进制标识符的窗口。因此,您可以执行此操作wmctrl -lp|grep 'whatever incomplete name'|cut -d' ' -f1|xargs wmctrl -ai-类似操作
vlad-ardelean 2014年

0

使用时xdotool,似乎很难带来前所有仅使用一个命令就可以将给定应用程序或类的窗口。通过将其包装在forShell级别的循环中,最终得到了更好的结果。使用Bash:

for WINDOW in $(xdotool search --desktop 0 Firefox); do
   xdotool windowactivate ${WINDOW}
done

几句话:

  • 默认情况下,xdotool searchFirefox在窗口名称,类和类名中搜索模式(此处为)。如果你想限制你的搜索空间,使用相关的--class--name--classname选项。
  • --desktop 0选项将搜索限制为第一个桌面。这似乎是一种避免XGetWindowProperty[_NET_WM_DESKTOP] failed (code=1)某些注释中提及的解决方法。
  • 在撰写本文时,该xdotool项目自2015年以来一直处于停滞状态。它仍然是我选择的工具。由于个人原因,Jordan Sissel(原始作者)并不像过去那样活跃,因此请为该项目做出贡献。


这是我在AskUbuntu上发布答案的副本,但我认为它与Linux风格无关,因此在这里也可能有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.