Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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?

share|improve this question

3 Answers 3

up vote 5 down vote accepted

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

share|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
1  
@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

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

share|improve this answer

I believe tmux is much more easily scriptable than screen for this type of purpose. tmux program accepts its own commands as arguments on the command line, so for example, to launch two windows: "tmux new-session -d '/bin/bash' \; new-window -d 'top'". In the first window, it will run an interactive "bash" shell, and in the second window it will run "top".

share|improve this answer
2  
Perhaps you could show how? –  slm Jul 24 '13 at 19:01
    
Sure. the tmux program accepts its own commands as arguments on the command line, so to launch a single window you type –  Michael Martinez Aug 9 '13 at 22:08
    
Sure. the tmux program accepts its own commands as arguments on the command line, so to launch two windows for example: "tmux new-session -d '/bin/bash' \; new-window -d 'top'" –  Michael Martinez Aug 9 '13 at 22:18
    
If you edit your answer you can add that to it. –  slm Aug 9 '13 at 22:19
    
good suggestion, thanks –  Michael Martinez Aug 20 '13 at 19:50

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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