Bash command to focus a specific window

52

10

Is there a way, in bash command line, to give focus to a specific window of a running process. Assume I know the process' name, number, and anything else I need.

For instance, if I have a single instance of Firefox running, but it's minimized (or there's some other window on top of it). I need a bash command that brings up and gives focus to the Firefox window, by making it the active window.

Malabarba

Posted 2010-05-19T14:02:48.030

Reputation: 7 588

Answers

79

The wmctrl command seems to do the job. It was already installed for me, but it's available in the repositories in case anyone needs it.

wmctrl -l 

Lists currently open windows (including the gnome panels).

wmctrl -a STRING

Gives focus to a window containing STRING in its title. I'm not sure what happens if more than one window meets that condition.
In my case the command was:

wmctrl -a Firefox

Malabarba

Posted 2010-05-19T14:02:48.030

Reputation: 7 588

6Nice to see someone is reading and I'm not just rambling to myself. =) – Malabarba – 2010-05-20T14:59:07.313

This is awesome for setting focus back to gdb (debugger) when it launches a debugger target with a window that steals focus, like kvm. Use gdb command shell wmctrl -a something, where something is something in your debugger terminal title. – doug65536 – 2016-10-25T03:46:06.500

Thanks so much, this is pure gold, I was afraid I lost all of my pending work in some Chrome window that just disappeared in the background somehow, it worked! – Osmar – 2019-01-15T21:45:07.077

1

Also try xdotool.

– Andres Riofrio – 2012-04-25T07:04:46.347

10

Using wmctrl in combination with xdotool you can switch focus to Firefox and then perform keyboard or mouse actions.

In this example:

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

The following steps are executed:

  1. Give focus to the first matching Firefox window
  2. Open a new browser tab
  3. Puts focus in the address bar
  4. Type "google"
  5. Tab to the first browser auto-complete result
  6. Press the Return (or Enter) key

Christopher

Posted 2010-05-19T14:02:48.030

Reputation: 269

4

How's the below script that I use in my ubuntu pc? use case is like this.

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

I'm using it after assigning it in keyboard custom shortcut. ctrl+1, ctrl+2, ...

cat 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

swj

Posted 2010-05-19T14:02:48.030

Reputation: 41