HowTo Share A Terminal Session Using Screen

From MediaWiki
Jump to navigationJump to search

The screen command can is essentially a terminal based version of VNC and is particularly useful in the following circumstances:

  • When you want to leave a terminal session running even after logging out of the system.
  • When you want to share a terminal session with another user (sort of like VNC but for the terminal).

Screen Command Sequences

There are many screen commands which you can run. To enter a screen command you use the escape sequence following by the command. For a full list of all of the available commands, run man screen. The following table shows some of the commands which we find most useful:

Ctrl-a a Passes a Ctrl-a through to the terminal session running within screen.
Ctrl-a d Detaches from a screen session.
Ctrl-a k Detaches from and kills (terminates) the screen session.
Ctrl-a :kill Also detaches from and kills (terminates) the screen session.
Ctrl-a :multiuser on Make the screen session a multi-user session (so other users can attach).
Ctrl-a :acladd USER Allow the user specified (USER) to connect to a multi-user screen session.

Setting Up A Shared Screen

The following command sequence sets up a shared screen session named shared:

[pkb@rice ~]$ screen -d -m -S shared
[pkb@rice ~]$

Listing Your Screen Sessions

The following shows what screen sessions you currently have running:

[pkb@rice ~]$ screen -ls
There is a screen on:
	8632.shared	(Detached)
1 Socket in /var/run/screen/S-pkb.

[pkb@rice ~]$ 

Attaching To A Existing Screen

The following allows you to attach to a existing screen session named shared:

[user@rice ~]$ screen -x shared

Once attached, all of your commands will be done within the screen named shared. To detach yourself from the screen, use the Ctrl-a d command sequence.

If you accidently created more than one screen session with the same name, you will get a error when you try to connect to it similar to the following:

[user@rice ~]$ screen -x shared
There are several suitable screens on:
	10519.shared	(Detached)
	10323.shared	(Multi, detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
[user@rice ~]$ 

In this case, you will need to specify the full screen name (with the leading PID) like so:

[pkb@rice ~]$ screen -x 10519.shared

Killing A Screen Session

To cleanly shutdown a screen session, you can attach to it and then press the Ctrl-a k command sequence.

Sharing A Screen Session With One Account

If you have two people logged into the same account from remote locations, they can easily share a screen session (so what one types the other sees and vice versa). To do this:

  • Create a named screen session:
[devel@rice ~]$ screen -d -m -S dbgwindow
  • Attach to the screen session in your terminal window
[devel@rice ~]$ screen -x dbgwindow
  • Have the other person (logged into the same account) also attach to the screen session
[devel@rice ~]$ screen -x dbgwindow
  • At this point both terminal windows should see the same thing.

Sharing A Screen Session With Another User

To share a screen session with another user (for teaching or when there isn't enough bandwidth for VNC), you need to:

  • Attach to the screen session which you want to share
[user1@rice ~]$ screen -r shared
  • Enable multi-user mode
[user1@rice tmp]$ Ctrl-a :multiuser on
  • Add the desired user(s)
[user1@rice tmp]$ Ctrl-a :acladd user2
  • Tell the other user to try connecting to the same screen using the following command:
[user2@rice ~]$ screen -x user1/shared
  • At this point, you should both be connected to the same screen session and seeing the same thing.

NOTE: Screen sharing with another account requires that the screen command be suid root. If it isn't, the other user will see something like the following when they try to connect to your shared screen session:

[user2@rice ~]$ screen -x user1/shared
Must run suid root for multiuser support.
[user2@rice ~]$ 

If you want to enable this multi-user screen sharing feature and you see that error, you will need to kill all of the running screen sessions and then run the following commands:

[user1@rice ~]$ su -
Password: 
[root@rice ~]# chmod u+s $(which screen)
[root@rice ~]# chmod 755 /var/run/screen
[root@rice ~]# rm -fr /var/run/screen/*
[root@rice ~]# exit
logout
[user1@rice ~]$

I'm guessing that making the screen command suid root is a security issue (otherwise, wouldn't it already have been set this way). So, you may be better off making a third shared account which both users can log into to share a screen session with.