1. Overview

Sometimes when working on a Linux machine, it can be hard to keep track of tasks split across several terminal windows. It’s also time-consuming to set terminal sessions back up after closing the windows.

In this quick tutorial, we’ll learn how to use GNU screen to maximize workspace efficiency and keep a continuous setup at each login.

2. Installation

screen should already be installed on most standard Linux distributions. If it’s not, a package installer will do the trick — for example:

$ yum install screen

or

$ apt-get install screen

We can also download the source code and install it manually.

3. Building a Session

3.1. Starting screen

First, we’ll start a screen session in a Linux terminal window:

$ screen

By default, there’s one window in the session, and it presents a command prompt in the directory in which we ran the screen command. A window in screen is similar to a tab in an Internet browser — there can be one or more per session.

We can see the current list of screen windows by hitting the keys:

CTRL+a "

We’ll see something like this in the terminal:

Num Name
  0 zsh

3.2. Renaming a screen Window

Naming a screen window after creating it is a good way to keep our screen session organized. Since we’re going to create several screen windows, let’s rename our current window to make it easier to find later on.

First, we hit:

CTRL+a SHIFT+a

Then a prompt will come up to let us rename the current window:

Set window's title to: zsh

Let’s change the title to logs and hit Enter. Next, let’s show the window list:

CTRL+a "

We now have a custom title:

Num Name
  0 logs

Now it’s time to add a second window to our session.

3.3. Multiple Windows

To create a second window in the screen session, we use:

CTRL+a c

After showing our window list with:

CTRL+a "

We’ll now see two windows in the session:

Num Name
  0 logs 
  1 zsh

Let’s rename this new window using:

CTRL+a SHIFT+a

We can change the name to timer. Now our list is:

Num Name 
  0 logs
  1 timer

We can switch windows in the window list by using up and down arrows or the j and k keys. The Enter key will make the selected window active.

As an alternative to the window list, we can use key commands to navigate windows.

Let’s try them out. We can move to the next window by using:

CTRL+a n

We can move back to the previous window by using:

CTRL+a p

Finally, we can toggle to the previously active window by using:

CTRL+a CTRL+a

3.4. Running Simultaneous Commands in Different Windows

Now let’s see how we can have a command running in one window, and work alongside it in a second window, all within the same screen session.

We’ll first navigate to our timer window:

CTRL+a "

Depending on our current window, we’ll need either the up or down arrow to get to the timer window. Enter will select it.

Let’s start a simple timer command to write to a file:

$ echo Starting at $(date) > counter.txt; \
  while true; do echo $(date); sleep 5; \
  done >> counter.txt

This will output the current date and time to a file every five seconds.

Now, if we go to the other window in the session using:

CTRL+a n

We can now start a tail command to monitor the output of our timing script:

$ tail -f counter.txt

This will begin outputting:

Starting at Sun May 31 14:36:30 EDT 2020
Sun May 31 14:36:30 EDT 2020
Sun May 31 14:36:35 EDT 2020
Sun May 31 14:36:40 EDT 2020

So now we’re running some code in one window and monitoring the output in a second one.

4. Reconnecting a screen Session

It took a bit of work to construct the screen session in the previous section. Instead of having to redo it when we come back to our machine, screen lets us detach from a session and reconnect to it at a later time. All of our windows, setup, and commands will be restored exactly as we left them.

Let’s try it out. To end our session, we can either close the terminal window or detach from our session using:

CTRL+a d

Our session stays active as a separate process. When we’re ready to keep working, we can reconnect to our previous screen session from the command prompt:

$ screen -R

The timer code should still be running, and the tail output should still be ticking.

As an aside, if we want to close a window in a session, we can just type exit in the window:

$ exit

This will close the current window and change to the previous window.

If we type exit in the last window in a session, the screen session will end with the message:

[screen is terminating]

5. Customizing a screen Session

We can customize a screen session by placing commands in a .screenrc file our user home directory. It’s also a way to easily port our preferred session settings to another machine.

As a quick example, let’s add a couple of customizations to a .screenrc file. In our home directory, we’ll first open the .screenrc file. Then we can add the lines:

screen -t logs
screen -t timer

After saving the file and starting screen:

$ screen

We can check the window list:

CTRL+a "

It shows the two named windows in the session:

Num Name
  0 logs
  1 timer

There are many more options in the .screenrc documentation.

6. Conclusion

In this article, we walked through using GNU screen to set up a reusable, customizable Linux terminal session with multiple windows.

Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.