Multi-Cursor Window Manager



A Multi-Cursor window manager is a modified Unix window manager which provides multiple cursors. This allows multiple users to simultaneously interact with a Unix desktop environment. Using a modified x2x client users can capture the keyboard and mouse input from their workstation and send to their personal cursor on a shared computer display. Multiple cursors are distinguished by different colors, and users can simultaneously interact with separate windows. There are 7 uniquely colored cursors available. The current multi-cursor window manager is based on a modified version of IceWM 1.2.13

Fig 1: The Multi-Cursor window manager lets multiple users simultaneously interact with applications on a computer desktop.

The multi-cursor window manager works by time-slicing the system cursor to provide the appearance of multiple independent cursors. More details can be found in this technical report.

Fig 2: Multiple cursors are made possible by time-slicing the single system cursor. The state of each user's cursor is maintained and restored just before an XEvent is sent to the system.



Fig 3: Multi-Cursor Desktop - There is a red user and a green user who are simultaneously interacting with different windows.



There are two pieces of software needed to run the multi-cursor desktop. 1) First you'll need to install and configure the multi-cursor window manager on a Unix system. 2) Then you'll need to install the x2x application on a client computer. The x2x program captures mouse and keyboard events from the client and sends them to the multi-cursor window manager. There can be up to 7 unique cursors.


Starting the Window Manager

The window manager needs to be installed and invoked after the X11 server starts. This can be done in .Xclients or by modifying the xsessions list for gdm. Installation should be similar to any IceWM version so I'll refer you to other web documentation, IceWM FAQ. There is only one new command option added and that is --cursor=[small | medium | large | huge]. This option lets you specify how big the multi-cursors will be (16, 32, 64, 128 pixels). 

I typically start the window manager with the following command

icewm --cursor=large

note: Use with "nice" theme in IceWM- that is what was tested, and there is a preferences file in the top level directory which works well for multi-user interaction.

Starting the x2x Client

There are two versions of the x2x client. One for Mac OS X and one for Linux. The Linux version can be used under Cygwin on a Windows computer. The x2x client captures the local keyboard and mouse input and sends it to the shared display. Typically the user drags their cursor off an edge of the screen (i.e. "east" edge) in order to start sending input. 

Locking the system cursor: If a user wants exclusive use of the desktop, they can press the shift key while clicking and dragging items. The other cursors will appear as and X and will be blocked from providing input.

From Linux: 

A typical invocation of the Linux x2x would be

x2x-mp -to host:display -ncursor 1 -east

This will connect to host:display and be assigned cursor number 1. The option "-east" indicates that when you drag your cursor of the right edge of your display, the multi-cursor will appear on the shared desktop.

From Mac:

The Mac version has a GUI interface as shown below. Simply enter the host information, chose the edge of your screen that will send your cursor to the shared desktop and choose your cursor number. You don't need to enter a username/password for X11 connections.

Fig 4: The Mac OS X client (osx2x) which capture keyboard/mouse input and sends to the multi-cursor desktop.


From Windows:

You'll need to first install Cygwin or exceed to get an X11 environment. Then run x2x as in the Linux case, except don't include an edge command option. The Cygwin environment can't handle edge detection so instead you will get a small input-window. When you click in the input-window your mouse/keyboard events will be sent to the multi-cursor desktop. When you click both mouse buttons simultaneously in the input-window, the events will stop being sent. There is one more option for this mode. The "-mapto WidthxHeight" will translate mouse movement in your small input-window to the full desktop dimensions on the shared desktop.

A typical invocation on Cygwin (where the shared display has resolution 1024x768)

x2x-mp -to host:display -ncursor 1 -mapto 1024x768


Compiling the Software

To compile Ice Window Manager:
>cd icewm
>./configure --without-imlib
>make install

Note: there is a preferences file in the icewm directory ("icewm/preferences"). Move this file to the installation preferences directory. It has some default choices that work well for multi-user interaction. Also, use the "nice" theme in IceWM.

To compile the x2x client:

>cd x2x-mp



This project was developed by Kai Li's research group at Princeton University Computer Science Department and funded by the SciDAC FusionGrid project.

Lead Developer: Grant Wallace

Bugs and Requests  

Please use the Sourceforge "Tracker" functionality to report bugs or requests Logo