Screen? A must for SSH

Mattias Geniar, Wednesday, June 4, 2008 - last modified: Tuesday, January 27, 2015

If you've ever used SSH to connect to a server, you 'll know its limitations: if you want to open a new window, you'll need to create a second SSH connection to the server. And if the connection breaks during the SSH tunnel, you've lost your progress. This is where Screen comes in.

Screen, which calls itself a "full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells)." is a usefull tool to use 1 SSH connection, but use multiple screens to work in. So you can have 1 screen to write some scripts in, another to tail a logfile and a third to check your IRC messages ;-)

Screen is installed by default on most installations, you can verify this by running the "which screen" command. If it's not installed, try to apt-get or yum it -- it's in most repositories.

You can start screen by typing:

# screen

This makes sense, right? :-)
You'll probably notice that not much happens if you type that. At least, it seems like not much as happened. In fact, you've just opened a new "screen" to type your commands. The program "screen" has a few commands of its own, in order to create a new window, and navigate through the open ones.

Once you've opened "screen", you can see a command list by typing CTRL + A, followed by "?" (the question mark). By typing CTRL + A you state that the next signal is to be sent to the program "screen", in stead of to the Shell (like you would in a normal shell). You'll see a list of all bindings known to "screen".

Start a new window by typing CTRL + A + "c". The C stands for Create -- I know, too obvious. A new window will be created. In order to test this, type the command "top". Then create a new window, by using CTRL + A + "c". You'll see top disappear, and a new window will open. Type in some commands of your choice, and return to the previous window, by doing CTRL + A + "n". The "n" stands for "Next", and will open the next screen. CTRL + A + "p" would've opened the previous screen.

Closing a window, can be done by typing "exit" (like you would in a normal shell). This will cause you to fall back to the previous monitor you opened, or to your main prompt -- where you started screen, showing you a message such as "[screen is terminating]" -- so you'll know you've hit the main shell.

The biggest advantage in using screen, is that you can "detach" a screen-session. This means you return to the normal shell, but the processes started in "screen" are still active in the background. You can detach yourself by typing CTRL + A + "d". Again, obvious that "D" stands for Detach. This gives you more flexibility for managing your server(s): you can start a number of processes, quietly exit the shell and return a couple of hours later to pick up the session started in screen.

Should you disconnect by accident, during a screen-session, you can always pick up a previous (detached!) screen by relogging to the shell and typing:

# screen -ls
There are screens on:
27111.screen_untarring  (Detached)
27097.screen_disking    (Detached)
2 Sockets in /var/run/screen/S-root.

This will show a list of all running screen-sessions at any given time. You can pick up a previous screen-session, by typing

# screen -r <name_of_session>

Given the "screen -ls" output from above, you can restore your screen session by typing:

# screen -r 27111.screen_untarring

It's enough to type in the first unique characters of the screen name, it'll automatically find the session you want. So in essence, "screen -r 271" would have been enough.

If you see in your list of screens that one session is still attached, you can not resume it before you detach it.

# screen -ls
There is a screen on:
27097.screen_disking    (Attached)
1 Socket in /var/run/screen/S-root.

# screen -d 270
[27097.screen_disking detached.]

# screen -r 270

You can also expand your "screen experience", by modifying the config-file to create a screen similar to the one shown below. (thanks to the comments)



You can get the extra "statusbar" at the bottom, by creating a file "~/.screenrc" and adding the following lines to it.

hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][ %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]'
defscrollback 1000
startup_message off

This will keep your current hostname, screen windows open & date-time at the bottom of each started screen. More screen tips can be found here: Screen power tips.

Probably known to most linux-administrators, but still an awesome tool :-)

Hi! My name is Mattias Geniar. I'm a Support Manager at Nucleus Hosting in Belgium, a general web geek & public speaker. Currently working on DNS Spy & Oh Dear!. Follow me on Twitter as @mattiasgeniar.

Share this post

Did you like this post? Will you help me share it on social media? Thanks!


else Saturday, June 7, 2008 at 16:38 - Reply

Do you know why screen freezes when pressing (accidentally) STRG+S? Thanks.

admin Saturday, June 7, 2008 at 17:13 - Reply

Pressing CTRL-S allows you to search into previous screen-sessions.

You can always exit “screen” by pressing CTRL-D.

else Saturday, June 7, 2008 at 19:07 - Reply

Unfortunately it’s not possible to exit screen by pressing CRTL+D after previously having pressed CTRL+S… Can anyone confirm this? Using Debian Etch 4.0.

dailynet Sunday, June 8, 2008 at 13:42 - Reply

Ctrl+S is a “Pause” in linux environtment, Try pressing Ctrl+Q to un”Pause”.

Adam Kane Monday, June 9, 2008 at 08:59 - Reply

Nice write up, there is a related article your readers might learn more from located at that discusses how to use screen and ssh with passwordless keys to easily administrate multiple servers.

Jake Saturday, June 14, 2008 at 22:59 - Reply

If you accidently leave your screen attached and you want to connect to it, you can use “screen -d nameofsession” (sans quotes of course) to detach it, and then attach it on the computer you’re on.

Sean McCleary Wednesday, October 22, 2008 at 18:22 - Reply

Making your own .screenrc file in your home directory can be very nice as well. This is what I use and it really helps manage screen better:

hardstatus alwayslastline
hardstatus string ‘%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f %t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %d/%m %{W}%c %{g}]’

Matt Simmons Wednesday, October 22, 2008 at 19:26 - Reply


I know a reply a few months later is probably too late, but you can reattach

Chris Irwin Wednesday, October 22, 2008 at 19:53 - Reply

The man page is pretty informative. -S gives the session a name (easier to resume). Even easier is using “-d -R”, which creates or resumes a session with a given name.

screen -d -R WorkSession

Matti Wednesday, October 22, 2008 at 20:19 - Reply

The addition of ~/.screenrc is worth noting. I’ve edited the main article, there are a lot of options available when creating/editing your config file!

Mat Thursday, October 23, 2008 at 06:06 - Reply

If you use emacs-style command line editing, CTRL-A (go to the beginning of line) is a bad command key. Add the following to your ~/.screenrc to change it to CTRL-O (the letter o):

escape “^Oo”

It’s also great to reduce many xterms to a single one!

jt Thursday, October 23, 2008 at 06:59 - Reply

thanks for the tutorial! is that supposed to be a regular single quote (‘) at the end of the hardstatus string in the ~.screenrc file?
i had to change it to make it work.

Matti Thursday, October 23, 2008 at 10:49 - Reply

@Jt; indeed, that’s a normal single quote – somehow the code gets screwed up, can’t seem to edit it (always changes back) :-)

Leave a Reply

Your email address will not be published. Required fields are marked *

Inbound links