ajaxWM is a window manager in a web browser, a terminal emulator and an SSH proxy. It allows remote controlling a computer even when there is a firewall and packet analyzer between, blocking everything else than HTTP(S)-connections. Because the ajaxWM client runs in any javascript-capable web browser, you can even use it when you are not allowed to install any software, for example in an internet café, at school, or at work.


A comparison of some remote controlling tools:

SSH Mindterm ajaxterm ajaxWM
client-to-go No Yes Yes Yes
tunnelling SSH through HTTP(S) No No Yes Yes
multiple windows in one session No No No Yes
unicode support Yes ? No Yes


window manager
Simulates a desktop environment
terminal emulator
The windows of the client are usable like most other terminals in a "normal" window manager
Runs in any modern javascript-capable graphical browser. Supports the most common SSH clients (OpenSSH and Dropbear).
Note that ajaxWM is currently alpha and supports only firefox by now
Three different profilers (profile, cProfile, and hotshot) and two output modes (KCacheGrind and pStats)
The theme-engine was written with flexibility in mind. You can create themes that draw fancy borders (images) around the windows, display the titlebar below the windows content and much more. Theres almost no limitation!
it's fast
ajaxWM uses psyco (if available) which compiles python-code
resource management
The server supports limiting the amount of sessions and windows
Parses the code of the client to reduce its size and enable/disable and remove debuging routines which speeds up transfer time. Responses are gzip-compressed but can also be send uncompressed.



2008-02-28: Version 0.2.6 released
  • Change: Parameter layout, see "ajaxwm -h" or ajaxwm.rc.example
  • Change: Increased performance by using compiled code (including Makefile)
  • Add: Parameters for default ssh host and whether to only allow this one
  • Add: Parameter for time to wait until session timeout
  • Add: Parameter for time to sleep between a keypress and the generation of the html to give back (useful for slow computers)
  • Add: Parameters for time to wait until logins to localhost and remote hosts timeout (useful for slow computers and network connections)
  • Add: Examplary config file, see: ajaxwm.rc.example
  • Fix: Don't generate html file from window content if there was no change (increases performance)
  • Fix: Uncompressed network transfer
  • Fix: Session timeouting
2008-02-07: Website goes online
2008-02-07: Version 0.2.5-r1 released
  • Fix: Ignore unknown characters in escape sequences
  • Fix: Compatibility for Python < 2.5
2008-02-04: Version 0.2.5 released
  • Initial official release


If you are having any problems with ajaxWM please contact us using the users mailing list or per e-mail.

An SSH daemon has to be running. If that already is the case, you can skip this step. You can run the SSH daemon like this in gentoo:

$ su
# /etc/init.d/sshd start

Now you are able install and run ajaxWM like this:

$ wget "http://downloads.sourceforge.net/ajaxwm/ajaxwm-0.2.6.tar.gz"
$ tar xfz ajaxwm-0.2.6.tar.gz
$ cd ajaxwm-0.2.6/src
$ ./ajaxwm.py
$ firefox localhost:8022

You can now login to your local pc using the firefox (or whatever browser you are using) window, which just showed up. If your login doesn't work, have a look at your SSHd config. When you are logged in, you can create new windows by pressing CTRL + ALT + W and close them with a CTRL + ALT + C.

When everything is running locally you probably want to make ajaxWM accessible on some network (like the internet). In order to do this you have to setup a web server (locally), which proxies incoming HTTPS-connections to ajaxWM and vice versa. If you don't have an SSL certificate you have to create one first:

$ su
# openssl req -new -x509 -nodes -out /etc/apache2/ssl/apache.pem \
-keyout /etc/apache2/ssl/apache.pem
# chmod 600 /etc/apache2/ssl/apache.pem

You can create a htpasswd file for Apache to secure the access with a username and password:

# htpasswd2 -c /etc/apache2/htpasswd bob

Here is an exemplary apache configuration you can use to proxy ajaxWM:

Listen 443
NameVirtualHost *:443

<VirtualHost *:443>
    ServerName ajaxwm.yourdomain.org

    SSLEngine On
    SSLCertificateKeyFile ssl/apache.pem
    SSLCertificateFile ssl/apache.pem
    ProxyRequests Off

    <Proxy *>
        AuthType Basic
        AuthName "remote Shell Access"
        AuthUserFile /etc/apache2/htpasswd
        Require user tom
        Order deny,allow
        Allow from all
    ProxyPass / http://localhost:8022/
    ProxyPassReverse / http://localhost:8022/

Now after restarting Apache ajaxWM should be reachable on the set address.

known issues

  • ajaxWM does not work in $BROWSER.

    ajaxWM is in alpha-state and does only run in firefox by now. The client will be rewritten in proper "JS-OOP" using prototype.js and HasslichScript.

  • Failing login with passwords containing ampersands ("&") and some other special characters.

    Fixed in the development branch (svn) and in all versions above 0.2.6. There is also a patch available.


Why is there no question?

Because no one asked anything.

If you have a question, which is not answered here, don't hesitate to ask us!


Screenshot 1 Screenshot 1 Screenshot 1

mailing lists

announcements about releases, bugs, and fixes
develeoper discussion
discussion and support for users


Dennis Felsing (r0q)
< $NICKNAME * at * users * dot * sourceforge * dot * net >
Andreas Waidler (pwnd)
< $NICKNAME * at * users * dot * sourceforge * dot * net >