GNU Screen is a terminal multiplexer. For a long time I used it only for persisting an IRC terminal session without it dying, but I entirely neglected learning how to use it for other purposes. Later, thanks to a bad internet connection I became frustrated when my SSH sessions kept dying, so I finally looked into how to use Screen for real(tm).

Then I started mentoring new hires on my team and realized that a lot of them have never used a terminal multiplexer! So I wrote this handy dandy shortcut guide to help.

Why not tmux? Because I learned screen a long while ago, it’s super simple, and haven’t felt the need to learn yet another tool. But I think I will get around to it at some point and maybe write another handy dandy guide for myself as well.

Anyway, Screen is really easy! Here is a list of the most basic shortcuts I use on a day-to-day basis.

New Window:

  • Ctrl-a c - “Create a new window”
  • Ctrl-a n - “Next screen window in the list”
  • Ctrl-a p - “Previous screen window in the list”
  • Ctrl-a Ctrl-a - “Switch to previously used window”

Seeing all windows:

  • Ctrl-a " - “Full-screen selectable list of windows”
  • Ctrl-a w - “Full-screen non-interactive list of windows”

Naming Windows:

  • Ctrl-a A - “Name the current window”

Killing Programs:

  • Ctrl-a K - “Kill the current window”

Detached Session:

  • Ctrl-a d - “Detach the current screen session”
  • screen -r - “Reattach screen”

Copy Mode:

  • Ctrl-a [ - “Allows accessing scrollback buffer (limited # of lines) and marking lines for copy”
  • Ctrl-a ] - “Paste from marked lines in scrollback buffer.”

Help:

  • Ctrl-a ? - “Show a terse list of commands available while you’re in screen.”

Using Named Screens

Turns out, instead of using only 1 screen that you always screen -rd reattach to, you can make multiple and name them!

  • screen -S MyScreenName irssi - Starts irssi in a new screen called MyScreenName

  • screen -list - Show all screens (their names will have a unique ID number attached)

  • screen -rd MyScreenName - attaches back to the named screen named “MyScreenName”

What if you forgot to use -S to name your screen at start? Well, turns out you can name a screen from within the screen!

  • Ctrl-a : - Enters command mode in screen; from command mode you can type sessionname MyScreenName2 to rename the current screen to “MyScreenName2”

Adding your screen name to PS1

If your want your bash shell to always show what screen your on, you can make use of (2) environment variables that screen exports.

STY              Alternate socket name.
WINDOW           Window number of a window (at creation time).