Termbeamer lets two Linux users share a terminal session across the Internet.

Have you ever wanted to pair program with someone far away? With Termbeamer you can.

Pros

  • uses your local environment where your tools are already at hand
  • use Termbeamer with any communication system (Skype, Google Hangouts, Mumble, IRC, etc.)
  • use any terminal size
  • screen updates are nearly instantaneous
  • the viewer can copy text (unlike most screen sharing apps)
  • there can be multiple simultanious viewers
  • remote control makes pair programming handoffs possible (experimental)
  • remote control is optional: more secure than giving a remote user a login
  • the connection is encrypted
  • neither the host or viewer machines have to be directly accessible from the Internet (dynamic IPs behind firewalls are OK)

Cons

  • the only transport currently available is XMPP (which most people can use via Google Talk)
  • terminal sharing only, no graphical applications

Installation

Termbeamer is packaged for Ubuntu. You can install it with these commands:

  % sudo add-apt-repository ppa:benji/termbeamer
  % sudo apt-get update
  % sudo apt-get upgrade
  % sudo apt-get install termbeamer

Using Termbeamer

Termbeamer uses XMPP as its transport. The most easily available XMPP service is Google's "Talk" chat service.

One-time setup to use Termbeamer with Google Talk: open GMail, search for the user's name in the chat box and then click "Invite to chat" on the resulting pop-up. The other user must also log into Gmail and accept the chat request.

Note: many people have multiple Google accounts, be sure to authorize the same accounts that will be used with Termbeamer.

Using with Google's two-factor authentication

Users of Google's two-factor authentication should create an application password for Google Talk by following thier instructions. The generated password will be the one used when starting Termbeamer.

Running

Your credentials (user name and password) are required in order to connect to the XMPP provider. Credentials can be passed on the command line or saved to a file.

Saving credentials

Typing credentials on the command line is tedious and potentially insecure (shoulder surfing). The user name and password can be saved to disk and are read when not otherwise provided:

    % tb create-auth-file --xmpp-user=ME@gmail.com --xmpp-password=MY-PASSWORD

Starting the host

To start a terminal session and stream it to someone else, run this command:

    % tb send xmpp:OTHER-PERSON@gmail.com

A new window will appear running the user's default shell. Anything visible in this terminal will be sent to the other user. The host and viewer can be started at any time and either can be restarted at any time without restarting the other.

Hint: It is recommended that a terminal multiplexer like GNU Screen be started once the new terminal is created to facilitate switching between multiple shell sessions and editors.

The user hosting the terminal session (but not yet the user viewing the session) can highlight a point on the screen by control-clicking. The clicked point will then be highlighted on the viewer's screen.

Starting the client

To start viewing someone elses terminal session, run this command:

    % tb receive xmpp:OTHER-PERSON@gmail.com

Remote control

If the --remote-control switch is provided when starting the host, any keystrokes typed into the client will be transmitted to the host and treated as if the local user typed them. This allows for pair programming between the local and remote user.

Development

The Termbeamer project is hosted on Launchpad at http://launchpad.net/termbeamer.

If you would like to contribute to termbeamer you will need a development environment. To get a development environment set up add the termbeamer ppa, install the build dependencies, check out the source, and then run the buildout:

  % sudo add-apt-repository ppa:benji/termbeamer
  % sudo apt-get update
  % sudo apt-get upgrade
  % sudo apt-get build-dep termbeamer
  % bzr branch lp:termbeamer
  % cd termbeamer
  % python2 bootstrap.py
  % bin/buildout

You can then run the tests.

  % bin/test

The Termbeamer project strives for 100% test coverage:

  % bin/test --cover=cover

A quick way to check for code that is not covered by tests is also available:

  % ./list-uncovered-source-files