Bash命令聚焦特定窗口


50

在bash命令行中,有没有一种方法可以将焦点集中在正在运行的进程的特定窗口上。假设我知道进程的名称,编号以及其他所需的信息。

例如,如果我有一个运行的Firefox实例,但已将其最小化(或者在它上面有其他窗口)。我需要一个bash命令,该命令可以使它成为活动窗口,并使之聚焦于Firefox窗口。

Answers:


77

wmctrl命令似乎可以完成这项工作。它已经为我安装了,但是可以在存储库中使用,以防有人需要。

wmctrl -l 

列出当前打开的窗口(包括gnome面板)。

wmctrl -a STRING

将焦点对准标题中包含STRING的窗口。我不确定如果一个以上的窗口满足该条件会发生什么。
就我而言,命令是:

wmctrl -a Firefox

6
很高兴看到有人在读书,而我不只是自言自语。=)
马拉巴巴


当它使用诸如kvm之类的窃取焦点的窗口启动调试器目标时,将焦点设置回gdb(调试器)非常好。使用gdb命令shell wmctrl -a something,其中某些内容在调试器终端标题中。
doug65536 '16

非常感谢,这是纯金,我担心我会在某个Chrome窗口中丢失所有待处理的工作,而这些窗口却以某种方式在后台消失了,它可以正常工作!
奥斯马

8

使用wmctrl与组合xdotool,你可以切换焦点到Firefox,然后执行键盘或鼠标操作。

在此示例中:

wmctrl -R firefox && \
  xdotool key --clearmodifiers ctrl+t ctrl+l && \
  xdotool type --delay=250 google && \
  xdotool key --clearmodifiers Tab Return

执行以下步骤:

  1. 将焦点放在第一个匹配的Firefox窗口上
  2. 打开一个新的浏览器标签
  3. 将焦点放在地址栏中
  4. 输入“ google”
  5. 跳到第一个浏览器自动完成结果
  6. 按回车(或回车)键

4

我在ubuntu pc中使用以下脚本如何?用例就是这样。

   $ ./focus_win.sh 1            # focus on a application window that executed at first
   $ ./focus_win.sh 2            # second executed application window

在键盘自定义快捷方式中为其分配后,我正在使用它。ctrl + 1,ctrl + 2,...

猫focus_win.sh

#! /bin/sh

if [ "" = "$1" ] ; then
    echo "usage $0 <win index>"
    exit 1;
fi

WIN_ID=`wmctrl -l | cut -d ' ' -f1 | head -n $1 | tail -n 1`

if [ "" = "$WIN_ID" ] ; then
    echo "fail to get win id of index $1"
    exit 1;
fi
wmctrl -i -a $WIN_ID
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.