We're an ISO27001:2013 Certified Supplier


screen is a very powerful and useful utility. Here, we’ll focus on just two aspects:

  • how to get started if you’re not familiar with screen, and
  • how multiple remote users can see and share the same shell session

Getting Started

Starting screen is simple:

$ screen

Depending upon the configuration, you will either see the terminal clear and your shell prompt appear at the top, or you may get a welcome message that may be dismissed by pressing return.

At this point, you can run commands in the usual way: nothing has changed. However, you are able to disconnect from the screen session by pressing ^A d (control-A followed by d). When you do that, the screen session will “detach” and you are back where you were before you ran screen, with a message informing you that you’ve detached from the screen process:

$ screen  # work in shell, then press ^A d
[detached from 21035.pts-8.awe] 

You can re-attach to the screen session at any time. For example, you could:

  • ssh to a remote system
  • start a screen session
  • start a long process, such as a compilation
  • detach from the screen session
  • go home
  • ssh to the remote system system again
  • resume your screen session

Resuming a screen session

Resuming a session can be as simple as:

screen -r

If you have multiple screen sessions running, you may list them:

$ screen -ls 
There are screens on: 
       22488.pts-8.awe (27/11/17 16:48:36)     (Attached) 
       22428.pts-8.awe (27/11/17 16:48:24)     (Detached) 
       22415.pts-8.awe (27/11/17 16:48:20)     (Detached) 
       21035.pts-8.awe (27/11/17 16:41:21)     (Detached) 
4 Sockets in /run/screen/S-kae.

You can re-attach to a specific screen session by specifying the pid and tty (as listed above):

$ screen -r 22428.pts-8.awe

You can only attach to a detached screen session. If you forgot to detach the session before you left the office, you’ll see something like:

$ screen -r
There is a screen on:
        23009.pts-8.awe (27/11/17 16:52:26)     (Attached)
There is no screen to be resumed.

There are a variety of ways to detach a remote session and to reattach to it, and as ever the screen(1) man page has full details. However, a command that will almost always do what you want is:

screen -DR

Quoting from the man page, this will: “Attach here and now. In detail this means: If  a  session  is  running,  then reattach.  If necessary detach and logout remotely first.  If it was not running create it and notify the user.”

When you’ve finished using the screen session, you can logout (for example with ^D) in the usual way. The terminal will clear, and screen will print a message to say that it is terminating.

Sharing a Shell Session

When training or mentoring someone, it can be useful for each to be able to look over the other’s shoulder. With remote working becoming ever more prevalent, that gets a little harder, but screen can come to the rescue.

Both users should log into the same user account, perhaps via ssh. The first runs screen as before.

The second runs screen with the -x switch:

$ screen -x

Anything that either user types will appear to both users.

Helpful when two remote people are working on the same problem, or even if one user wants to temporarily give the other root privileges without divulging the root password (simply use su and the session can become root for both users).

A Word of Warning

It is not good practice to log into a non-privileged account, run screen and then elevate privileges, perhaps with the su command. This shouldn’t be a problem in principle, but if the non-privileged account is a shared resource, anyone with access to it will now be able to access the session with elevated privileges. Better to log in, run su and then run screen.

Was This Linux Tip Useful?

Let us know in the comments below.

Leave a Reply

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

Get free Linux business strategies

Fill in this form and we'll send you updated Linux business strategies and ideas each week
  • This field is for validation purposes and should be left unchanged.