graphterm 0.57.0
A Graphical Terminal Interface
Keywords: command line interface, console, multiplexer, remote desktop, terminal, terminal emulator, xterm

`Release Notes <http://code.mindmeldr.com/graphterm/release-notes.html>`_

``GraphTerm`` is a browser-based graphical terminal interface, that
aims to seamlessly blend the command line and graphical user
interfaces. You can use it just like a regular terminal,
backwards-compatible with ``xterm``, and access the additional
graphical features as needed. These features can help impove your
terminal workflow by integrating graphical operations with the
command line and letting you view images and HTML output inline.

GraphTerm has several funky features, but two of the most useful
practical applications are:

 - an **inline data visualization tool** for plotting with Python or R
   that can work seamlessly across SSH login
   boundaries, with an optional notebook interface. (For remote
   access, it also serves as a detachable terminal, like
   ``tmux`` or ``screen``.)

 - a **virtual computer lab** for teaching and demonstrations. The
   GraphTerm server can be set up in the cloud and accessed by
   multiple users using their laptop/mobile browsers, with Google
   Authentication. The lab instructor can
   `monitor all the users'  terminals <http://code.mindmeldr.com/graphterm/screenshots.html#dashboard-for-a-virtual-computer-lab-viewing-user-terminals>`_
   via a "dashboard", and users can collaborate with each other by
   sharing terminals and notebooks.


GraphTerm builds upon two earlier projects, 
`XMLTerm <http://www.xml.com/pub/a/2000/06/07/xmlterm/index.html>`_
which implemented a terminal using the Mozilla framework and
`AjaxTerm <https://github.com/antonylesuisse/qweb/tree/master/ajaxterm>`_
which is an AJAX/Python terminal implementation. (Other recent
projects along these lines include  `TermKit <http://acko.net/blog/on-termkit/>`_
and `Terminology <http://www.enlightenment.org/p.php?p=about/terminology>`_.)

A GraphTerm terminal window is just a web page served from the
GraphTerm web server program. Multiple users can connect
simultaneously to the web server to share terminal sessions.
Multiple hosts can also connect to the server (on a different port),
allowing a single user to access all of them via the browser.
The GraphTerm server acts as a *router*, sending input from browser
windows for different users to the appropriate terminal ("pseudo-tty")
sessions running on different hosts, and transmitting the
terminal output back to the browser windows.

The interface is designed to be touch-friendly for use with
tablets, relying upon command re-use to minimize the need for
a keyboard. It preserves history for all commands,
whether entered by typing, clicking, or tapping.
It is also themable using CSS.

You can find more information on using GraphTerm in its
`project page <http://code.mindmeldr.com/graphterm>`_
and browse the source code on `github <https://github.com/mitotic/graphterm>`_.
Images of GraphTerm in action can be found in `screenshots <http://code.mindmeldr.com/graphterm/screenshots.html>`_ 
and in this `YouTube Video <http://youtu.be/TvO1SnEpwfE>`_.

You can use the GraphTerm API to build "mashups" of web applications
that work seamlessly within the terminal.  Sample mashups include:

 - ``greveal``: Inline version of ``reveal.js`` to display Markdown files as slideshows
 - ``gtutor``: Inline version of `pythontutor.com <http://pythontutor.com>`_ for visual tracing of python programs
 - ``yweather``: Using Yahoo weather API to display weather

Here is a sample screenshot showing the output of the
`metro.sh <https://github.com/mitotic/graphterm/blob/master/graphterm/bin/metro.sh>`_
command, which embeds six smaller terminals within the main terminal, running
six different commands from the GraphTerm toolchain: (i) live twitter stream output using
``gtweet``, (ii) weather info using ``yweather``,
(ii) slideshow from markdown file using ``greveal`` and *reveal.js*,
(iv) word cloud using ``d3cloud`` and *d3.js*, (v) inline graphics using ``gmatplot.py``,
and (vi) notebook mode using the standard python interpreter.


.. figure:: https://github.com/mitotic/graphterm/raw/master/doc-images/gt-metro.jpg
   :align: center
   :width: 95%
   :figwidth: 100%


INSTALLATION
=====================

*Requirements:* You will need a browser that supports Websockets,
such as a recent version of Chrome, Firefox, or Safari.
The GraphTerm server is written in pure Python (version 2.6+), and
should run on any Unix-like system (e.g., Linux, OS X)
that supports the pseudo-tty terminal device.
(The browser client works on Windows, iPad, and Android as well.)

If you have ``setuptools``, you can install GraphTerm using the
following two commands::

    sudo easy_install graphterm
    sudo gterm_setup

Alternatively, you can download the tarball,
untar, and execute ``sudo python setup.py install``
in the ``graphterm-<version>`` directory.
You will also need to install the ``tornado`` web server,
which can be downloaded from
https://github.com/downloads/facebook/tornado/tornado-2.3.tar.gz

To start the ``GraphTerm`` server and open a terminal, use the command::

    gtermserver --terminal --auth_type=none

**Disclaimer:** GraphTerm is currently of alpha-quality. It is known to
work on Linux, Mac OS X, and the Raspberry Pi, but you may encounter various
glitches.