Check-out our new look and give us some feedback!
Reading Time: 6 minutes

What is Screen?

Screen is a terminal program in Linux which allows us to use a virtual (VT100 terminal) as full-screen window manager which multiplexes an open physical terminal between multiple processes, which are typically, interactive shells. It allows us to access multiple terminal sessions within a single terminal or a remote terminal session. It is most useful when addressing multiple Linux shell commands on the command line, as well as separating commands from the shell that started the commands.

Screen also allows a user to initiate a command from one terminal, disconnect from that terminal, and then reconnect from a different location to that same terminal, while using a different terminal without having to restart the command. This simply lets a user better control multiple and separate command windows. 

Screen also lets multiple remote computers connect to the same screen session at once. This allows multiple users to connect to the same screen session allowing a second user to follow along with another administrator working on a server.

Basic Commands

Screen is started by using the following screen command:

screen

Screen Flags

Here is a list of some of the more common flags and how we can use them.

Default Session Key Bindings

While inside the screen session, ctrl+a activates the key bindings. The following table shows some of the default key bindings:

Screen Examples

To get a full list of available screens, use this command:

screen -ls

we will then see output similar to this:

There is a screen on:  
  26092.ttyp0.host
  (Attached) 1 Socket in /tmp/screens/S-root.

This output typically shows us the currently running screens. As you can see by the "(Attached)" output, the 26092 session is currently attached to a terminal. Since this screen is currently attached, we can detach it remotely using this command.

screen -d 26092

If another user is logged onto this screen session and actively working, this modification will kill their session. So, beware of detaching screen sessions this way. To reattach to that same screen, run this command.

screen -r 26092

We can detach and reattach to the screen concurrently using this command.

screen -d -r 26092

In order to create a new screen session called LW, we can enter this command.

screen -S LW

Modifying Screens Behavior

Scrollback

To enable scrollback in xterm, we can add the following information to our ~/.screenrc file on our workstation.

# Enable mouse scrolling and scroll bar history scrolling
termcapinfo xterm* ti@:te@

Logging

If we use the -L option with screen, it tells screen to turn on the automatic logging output for the window. This will create a file within the current directory, with the name screenlog.# where # is the ID number for that screen beginning from 0.

screen -L -S LW

Multiuser Screen Sessions

Multiuser is an excellent option to use if we need to share our session with others. It is not turned on by default for security reasons but can be enabled easily. In order to allow multiple users to connect to the same screen session, the multiuser option must be enabled. Here are the steps needed to complete this task.

  1. Begin by logging in to the server and starting the screen session via the command line. 
  2. Next, type Ctrl-a to enter the command mode.
  3. Now, type in ":" (colon) to enter the screen's built-in command line.
  4. We can now activate the multiuser mode by entering multiuser on in the screen's command line, which appears in a reverse color at the bottom of the console window. 
  5. To confirm this change, hit Enter or Return. 

Multiuser mode can be very useful if we are attempting to demonstrate to someone what we are doing on a server. With this mode on, the other user will be able to follow our keystrokes within that screen session.

Further Exploration

If more in depth information is required, we can always consult the man page for screen using:

man screen

Screen Tricks

To initiate a screen session named LW and run the top command in it without attaching to it, nothing will appear to happen but you will see the screen with screen -ls:

screen -S LW -d -m top

To end or kill the LW screen session, use this command:

screen -S LW -p 0 -X kill

To start a bash session in screen, we can use this command:

screen -S LW -d -m /bin/bash

To run the ls command inside the screen session use this command:

screen -S LW -p 0 -X exec ls /home

To end or kill the LW screen session, run this command:

screen -S LW -p 0 -X kill

To scroll up within a screen window, use this command:

CTRL+a then ESC, #Press CTRL KEY and 'A' KEY together and then hit the ESC KEY #to scroll using the arrow keys hit ESC again to exit.

Most Useful Screen Commands

Here is a quick overview of the most useful screen commands that we might need to use.

Note:
We should enter these key commands in lower case, but they are shown here in uppercase to make the command more readable.
  • Ctrl+A, C - This key command creates a new screen
  • Ctrl+A, N (where N is equal to the number of the screen) - This key command switch us to a specific screen
  • Ctrl+A, A - This key command switches us to the next screen
  • Ctrl+A, W - This key command lets us view a list of screens
  • Ctrl+A, " (double quote) - This key command allows us to view the screen picker
  • Ctrl+A, Ctrl+D - This key command detaches us from the current session
  • screen -R - This key command attaches us to a running screen session
  • Ctrl+A, ? - This key command shows us the shortcut key options

There are numerous other commands that we can use to control our screen session, many of which can be viewed by typing "Ctrl+A ?" at the prompt. This will bring up a help window that shows us all the available key bindings. For example:

  • The 'C-a p' and 'C-a n' key sequence can be used to switch to the next or previous window.
  • Using the 'C-a N' key sequence - (where N is a number from 0 to 9, that can will connect to the corresponding screen window.
  • The 'C-a w' key sequence displays a list of all screen windows. The unique ID of each window, along with its name, and running process is displayed, for each individual window. The current window will be marked with an asterisk (*).
  • The 'C-a k'key sequence will kill the current window session. We can also type 'exit' to kill the current window. If no other screen sessions are open, screen will simply exits. The 'C-a \' key sequence also accomplishes the same task.
  • The 'C-a d' key sequence detaches the from the current screen session. 

We can also detach from the screen by closing the terminal that is running our screen utility. Although this may appear to close our terminal session, in reality this simply closes the terminal and unbinds our session from the current terminal. All the commands that were started under our screen will continue to run.

We can also log out from the server and login again, then restart a terminal session and type 'screen -r' to connect again from where we left off. In case, there are more than one running screen sessions on the server, screen will prompt us for a host.tty.pid. For example, say I have two screen sessions. So, when we type the 'screen -r' command, it gives the following message:

$ screen -r There are several suitable screens on:
2999.pts-6.localhost (Detached)
 1920.PTS-6.localhost (Detached)
 To connect to one of the above detached screens
 run, screen -d -r 2999.pts-6.localhost
 to resume that screen.

Conclusion

Screen is an invaluable tool when we must work with the terminal daily. It allows us to utilize a limited amount of screen space while maintaining the full functionality of a terminal window. Additionally, screen has the ability to be used as a teaching tool allowing multiple users to connect to an existing screen and, if we have enabled logging, share that file with the user for later reference.

Are you trying to use the screen command and experiencing some difficulty with the control commands, flags or other options with the program?

Our knowledgeable system administrators and experienced linux technicians are standing by to assist you with the help you need. Give us a call at today at 800.580.4985, or open a chat or ticket with us to speak with us right away!

About the Author: David Singer

I am a g33k, Linux blogger, developer, student, and former Tech Writer for Liquidweb.com. My passion for all things tech drives my hunt for all the coolz. I often need a vacation after I get back from vacation....

Latest Articles

How to Edit Your DNS Hosts File

Read Article

How to Edit Your DNS Hosts File

Read Article

Microsoft Exchange Server Security Update

Read Article

How to Monitor Your Server in WHM

Read Article

How to Monitor Your Server in WHM

Read Article