I have a work environment on my Ubuntu laptop in which I want to use three different screens.

Eg. in terminal, I usually write

screen -S mywork
run_server_1

then, ctrl-a c to create a second screen

run_server_2

etc.

I'd like to write a script to automate setting up this environment, but how can I control multiple screens from one script?

Update : I really want to be able to do this from a shell script, not a screen config. file. Is there a way to do that?

link|improve this question

62% accept rate
feedback

2 Answers

Reading man pages and tutorials helps

I would say that you want to do is create a file $HOME/.screenrc.multiwin

# read in your normal screenrc
# before anything else
source $HOME/.screenrc
# now start opening windows
# it's possible to set the window title with
# the -t option
# you can also specify the window number
# to launch in
screen -t server1 5 run_server_1
screen -t server2 6 run_server_2

Then running

screen -c $HOME/.screenrc.multiwin

will do what you need

link|improve this answer
thanks ... am trying this now – interstar Jun 23 '10 at 10:22
Actually, I don't think this is what I want. I really would like to do this in a shell script in which I can do other things too. (And call like any other script.) Not just in a screen "configuration" file. – interstar Jul 2 '10 at 8:32
@interstar: run_server_1 can be another script. The above is relatively flexible if the scripts are independent. Alternatively if there is a lot of control flow/interprocess communication what about the following: don't start screens but just start servers with their output redirected to files, then in other terminals/screens you can watch those files. – Unreason Jul 7 '10 at 15:04
You can always generate a config to a temporary file and give that file to screen using -c . Since shell scripts are turing complete, it is possible to do almost anything this way, but probably not very easy. – ptman Oct 13 '10 at 6:21
feedback

Commands can be passed from outside using screen -S sessionname -X command for instance screen -S mywork -X screen run_server_2 would create a new window (same as ctrl-a c) but that window would have run_server_2 executing in it. Unlike doing it by hand,there will not be a shell running in that window, so when run_server_2 exits, the window will be closed.

Controlling multiple screens is simply a matter of making sure they're all named with -S

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.