How To Use Linux Screen

Linux Screen allows you to:

  • Use multiple shell windows from a single SSH session.
  • Keep a shell active even through network disruptions.
  • Disconnect and re-connect to shell sessions from multiple locations.
  • Run a long running process without maintaining an active shell session.



Here is a quick rundown from the man page:

screen – screen manager with VT100/ANSI terminal emulation
screen [ -options ] [ cmd [ args ] ]
screen -r [[pid.]tty[.host]]
screen -r sessionowner/[[pid.]tty[.host]]

Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells). Each virtual terminal provides the functions of a DECVT100 terminal and, in addition, several control functions from the ISO 6429 (ECMA 48, ANSI X3.64) and ISO 2022 standards (e.g. insert/delete line and support for multiple character sets). There is a scrollback history buffer for each virtual terminal and a copy-and-paste mechanism that allows moving text regions between windows.
When screen is called, it creates a single window with a shell in it (or the specified command) and then gets out of your way so that you can use the program as you normally would. Then, at any time, you can create new (full-screen) windows with other programs in them (including more shells), kill existing windows, view a list of windows, turn output logging on and off, copy-and-paste text between windows, view the scroll‐back history, switch between windows in whatever manner you wish, etc. All windows run their programs completely independent of each other. Programs continue to run when their window is currently not visible and even when the whole screen session is detached from the user’s terminal. When a program terminates, screen (per default) kills the window that contained it. If this window was in the foreground, the display switches to the previous window; if none are left, screen exits. Shells usually distinguish between running as login-shell or sub-shell. Screen runs them as sub-shells, unless told otherwise (See "shell" .screenrc command).

Everything you type is sent to the program running in the current window. The only exception to this is the one keystroke that is used to ini‐tiate a command to the window manager. By default, each command begins with a control-a (abbreviated C-a from now on), and is followed by one other keystroke. The command character and all the key bindings can be fully customized to be anything you like, though they are always two characters in length.

Installing Screen
Starting Linux Screen
Control Command
Creating Windows
Switching Between Windows
Detaching From Screen
Reattach to a Screen
Logging Output
Getting Alerts
Locking Screen
Stopping Screen

Installing Screen

Chances are that you already have screen on your system. On most RPM based distributions you can find Screen in /usr/bin/screen. To see if screen is in your path, you can use the which command:

[root@home ~]# which screen

If you do not have Screen, then you can most likely install it from your distribution repository. If it’s not there you can build from source from the official GNU site https://www.gnu.org/software/screen/.

#rpm-based (RHEL/CentOS)
[root@home ~]# yum install screen
#deb-based (Ubuntu/Debian)
[root@home ~]# apt-get install screen

Starting Linux Screen

Screen is started from the command line just like any executable:

[root@home ~]# screen
#Or you can start it with a custom name:
[root@home ~]# screen -S screenname

You are now inside of a screen session. This functions just like a normal session except you can now use special key sequences to perform certain actions, such as detaching from the screen session while leaving the session running which is explained below.

Control Command

Command: “Ctrl-a”

Screen uses the command “Ctrl-a”that’s the control key and a lowercase “a”  as a signal to send commands to screen instead of the shell. The most common is “Ctrl-a-d” which detaches the running screen session and leaves you free to exit the shell and walk away, or go home and resume the session.

Key bindings are the commands the screen accepts after you hit “Ctrl-a”. You can reconfigure these keys to your liking using a .screenrc file, but I just use the defaults.

Creating Windows

Command: “Ctrl-a” “c”.

To create a new window, you just use “Ctrl-a” “c”.

This will create a new window for you with your default prompt.  Your old window is still active.

For example, I can be running top and then open a new window to do other things. Top stays running! It is still there. To try this for yourself, start up screen and then run top. (Note: I have truncated some screens to save space.)

Start top

top - 09:10:33 up 35 days, 17:26,  1 user,  load averag
 Tasks: 131 total,   1 running, 130 sleeping,   0 stoppe
 Cpu(s):  0.4%us,  0.2%sy,  0.0%ni, 99.4%id,  0.0%wa,  0
 Mem:  12302040k total,  6363652k used,  5938388k free,
 Swap:  1052248k total,       12k used,  1052236k free

Now open a new window with: “Ctrl-a” “c”

Your top window is still running you just have to switch back to it.

Switching Between Windows

Command: “Ctrl-a” “n”

Screen allows you to move forward and back. In the example above, you could use “Ctrl-a “n” to get back to top. This command switches you to the next window.

The windows work like a carousel and will loop back around to your first window.

You can create several windows and toggle through them with “Ctrl-a” “n” for the next window or “Ctrl-a” “p” for the previous window.

Each process will keep running until you kill that window.

Detaching From Screen

Command: “Ctrl-a” “d”

This is biggest reason to use Screen. This will detach your current session which leaves everything running. You can then go home, watch Netflix all weekend, come back on Monday and reattach to your existing session as long as the server has not restarted.

A separate method of temporarily sending a foreground script or running task to the background is using the key combination “Ctrl-z” then to bring it back to the foreground type fg

If your network connection fails, screen will automatically detach your session!

You can detach from the window using “Ctrl-a” “d”.

This will drop you into your shell, from which you should type exit (maybe twice if you sudo su‘d) again to logout from the system.

All screen windows are still there and you can re-attach to them later.

This is great when you are using rsync for server migration.

Reattach to Screen

If your connection drops or you have detached from a screen, you can re-attach by just running:

[travis@home ~]$ screen -r

This will re-attach to your screen.

Screen -R with a capital R will create a screen session if one does not exist.

However, if you have multiple screens you may get this:

[travis@home ~]$ screen -r
 There are several suitable screens on:
 12893.pts-1.home (Detached)
 38225.pts-0.home (Detached)
 Type "screen [-d] -r [pid.]tty.host" to resume one of them.

If you get this, just specify the screen you want.

[travis@home ~]$ screen -r  31844.pts-0.home

Logging Your Screen Output

As a consultant, I find it important to keep track of what I do to someone’s server. Fortunately, screen makes this easy.

Using “Ctrl-a” “H”, creates a running log of the session.

Screen will keep appending data to the file through multiple sessions. Using the log function is very useful for capturing what you have done, especially if you are making a lot of changes. If something goes awry, you can look back through your logs.

Getting Alerts

Screen can monitor a window for activity or inactivity. This is great if you are downloading large files, compiling, or waiting for output.

If you are waiting for output from a long running program, you can use “Ctrl-a” “M” to look for activity. Screen will then flash an alert at the bottom of the page when output is registered on that screen.

I use this when running a command that takes a long time to return data. I can just fire up the command, switch to another window and not have to keep switching back to check the status.

You can also monitor for inactivity. Why use this?

If you are downloading a large file or compiling a program, you can be notified when there is no more output. This is a great signal to when that job is done. To monitor for silence or no output use “Ctrl-A” “_”.

Locking Your Screen Session

If you need to step away from your computer for a minute, you can lock your screen session using “Ctrl-a” “x”.  This will require a password to access the session again.

[travis@home ~]$ screen -r 12362.pts-0.home

Stopping Screen

When you are done with your work, I recommend you stop the session instead of saving it for later.  To stop screen you can usually just type exit from your shell. This will close that screen window.  You have to close all screen windows to terminate the session.

You should get a message about screen being terminated once you close all windows.

[screen is terminating]

Alternatively, you can use “Ctrl-a” “k”.  You should get a message if you want to kill the screen.

I have never had any luck with Ctrl-a-k on Ubuntu Servers. I recommend you simply type exit or use the instructions below.

To force kill a screen you should make a note of the session ID/name with screen -list

travis@home:/home/ubuntu# screen -list
There is a screen on:
 8222.htop (10/31/2016 02:14:55 AM) (Detached)
1 Socket in /var/run/screen/S-travis.

Now you can kill the session the proper way using the quit command instead of kill like this:

travis@home:/# screen -S 8222 -X quit
travis@home:/# screen -list
No Sockets found in /var/run/screen/S-travis.
Disqus Comments Loading...
All Rights ReservedRegular Version