screen” is a fantastic Linux command-line application which allows you to start, disconnect, and resume multiple shell sessions. Typically used on a remote machine via SSH.

The minor annoyance is that it adds yet another step to connecting to your machine, so here is a script (nicked from here) which you can include (or source from) your “.profile” to automatically start or resume a screen session.

RemoteLoginAutoScreen script
# Auto-screen invocation. see:
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session. Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
# NB: If you have a DISPLAY variable set (eg, ssh -X) then this script will
# not start screen automatically. If you want this to happen, remove the
# check.
if [ "$TERM" != screen -a "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x -a "$DISPLAY" == "" ]
echo "Auto-starting screen."
# Set the window title to HOSTNAME
echo -ne "\e]2;$HOSTNAME\a"
# If no session is running, set DISPLAY environment variable
screen -ls | egrep "^No Sockets found" > /dev/null
if [ $? = 0 ]; then
export DISPLAY=:$(( $( (echo 5555; ls /tmp/.X11-unix/X* 2> /dev/null) | sed 's/^.*\/X//' | sort -n | tail -n 1) + 1))
echo "No running screen found. DISPLAY set to $DISPLAY."
screen -D -RR && exit 0
# normally, execution of this rc script ends here...
echo "Screen failed! Continuing with normal bash startup."
# [end of auto-screen snippet]


Personally I source the script, so I save it as “.autoscreenrc” and add the following to my “.profile”:

.profile snippet
# Auto-start screen
if [ -f "$HOME/.autoscreenrc" ] ; then
    . "$HOME/.autoscreenrc"


And bingo, this saves you all of .01 seconds when you login 😉