Ubuntu – Open already running program via terminal

command line

How do I switch to already running program using terminal?

For examaple:

firefox opens new firefox window.

Is there a command that will focus the already opened firefox window?

Best Answer

As a one- liner

Assuming you have wmctrl installed (run sudo apt-get install wmctrl if not):

The command:

wmctrl -ia "$(wmctrl -lp | grep "$(pgrep gedit)" | tail -1 | awk '{ print $1 }')"

Would raise the last opened gedit window. Replace it by any other application.

Explanation

pgrep gedit

gets the pid of gedit

wmctrl -lp

lists all windows and the pid they belong to

awk '{ print $1 }'

splits off the window- id (the first string in the line)

$(wmctrl -lp | grep "$(pgrep gedit)" | tail -1 | awk '{ print $1 }')

therefore finds the window-id of the last created window of gedit (the output of wmctrl -lp lists the windows in a chronological order of creation, if the application has multiple windows, tail -1 returns the last one).

wmctrl -ia

subsequently raises the window by its window-id

In a small script

...to be run with the application as argument:

#!/bin/bash

wmctrl -ia "$(wmctrl -lp | grep "$(pgrep "$1")" | tail -1 | awk '{ print $1 }')"
  • Save it into an empty file as switchto.sh
  • Make it executable
  • Run it as (e.g.)

    /path/to/switchto.sh firefox
    

Alternatives?

Theoretically the command:

xdotool search --class gedit windowactivate

should do (kind of) the same; it should raise the first found window of gedit in this case.
It seems less robust however. On my system (Unity) it did nothing at all.

Related Question