Ubuntu/ Gnome : Open an application in a specific workspace

10

5

How do tell an application to open in a specific workspace?


More info:

I like to have my C++ IDE in workspace 2, my Java IDE in workspace 3, and my email, browser and miscellaneous in workspace four. I also use a shell script that executes upon log in:

#!/bin/bash
gnome-terminal & # WS 1
netbeans-6-9-1 & # WS2
qtcreator-2-0-1 & # WS 3
firefox & # WS 4
thunderbird & # WS 4

Of course currently it all opens in the current workspace... Is there a way for me to specify which workspace each command should start in?

Thanks in advance!

bguiz

Posted 2011-01-12T01:08:53.820

Reputation: 1 651

1If you always have these programs running, the easiest and simplest way is to load them all up where you want them and 'remember applications when logging out' – Unfundednut – 2011-01-12T01:23:23.540

1@MrStatic : Thanks for the suggestion, but I do need it to be in a shell script for other reasons - and for that I cannot 'remember applications when logging out' – bguiz – 2011-01-12T02:38:46.943

Answers

4

You could use devilspie to set rules for which windows go on which workspace.

See the docs for an example of exactly that.

But MrStatic has a good suggestion too. Try that one first, you might not even need your shell script.

If you need it to be a command you can use in a shell script, have a look at wmctrl.

Mikel

Posted 2011-01-12T01:08:53.820

Reputation: 7 890

thanks for the suggestion, will check it out - I would still consider a CLI-only solution to be a superior solution though, so if you have any ideas for one, let me know! – bguiz – 2011-01-12T02:41:00.810

4Try wmctrl. I added a link in my answer above. – Mikel – 2011-01-12T03:22:23.923

7

I have tried the wmctrl tool and found that the easiest solution that worked for me is to move window with the following command:

wmctrl -r <WindowName> -t <WorkspaceNumber>

Note that the workspace numbers starts from 0. Last you can move to your preferred workspace with the command:

wmctrl -s <WorkspaceNumber>

VGe0rge

Posted 2011-01-12T01:08:53.820

Reputation: 178

1

I use this basic structure in scripts to open a specific set of applications in specific workspaces..the example opens my terminal and moves it to workspace 1...

cd
gnome-terminal
until wmctrl -l | grep -q "me@mypc ~"; 
do
    sleep 0.1
done
wmctrl -r "me@mypc ~" -t 1

Steve Murphy

Posted 2011-01-12T01:08:53.820

Reputation: 11

A little explanation about this code would be welcome. Why does it start with cd? what are you expecting in the until? is "me@myspc ~" a window name?? – wranvaud – 2019-03-15T19:18:50.587

-1

I am fairly certain it is impossible to do. The reason seams to be that windowing environments like GNOME expect software to handle this, and software makers expect windowing environments to handle this.

Devilspie is a good idea, but it does pattern matching (ie. if name == 'google-chrome'). So what happens if I open two browsers? They both get moved to the same workspace? I have 6x3=18 workspaces, each one with a particular instance of chrome. It would help if I could rename these programs (ie 'google-chrome1', 'google-chrome2'...) but I can't find a way to do that. So we have to use wmctrl.

wmctrl is a little better b/c in addition to using window titles, you can also use window IDs or just use the currently highlighted window. Window IDs are a pain to get b/c they are not immediately generated. See below

gedit 1.txt
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1

but then control is not returned to the command line until AFTER gedit exits. All we have to do to get around this is put a & sign

gedit 1.txt &
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1

but now control is, 99.999% of the time, returned to the command line BEFORE the window managers launches the window and there is no way to find the window id. One has to set up a very complex looping technique to test to see if any new windows have been created, and to guess whether it is the window we are looking for.

Checking for the active window via the flag :ACTIVE: has the same problem, it does not wait for the program to finish running.

wmctrl strikes me as a very weird program. It seems like it was designed for people without a mouse, or unable to physically drag their programs across workspaces.

puk

Posted 2011-01-12T01:08:53.820

Reputation: 607

The OP said the browser goes on workspace four. If it needed to be possible to open browsers on other workspaces after the session startup script runs, the last command in that script could be sleep; pkill devilspie. – Mikel – 2014-08-20T14:53:39.297