X M X An X Protocol Multiplexor Version 1.0 ------------------------------------------------------------------------- OVERVIEW XMX is an X protocol multiplexor. It is a standalone utility for displaying an X Windows session on multiple displays. XMX takes advantage of the networked nature of the X Window System by tapping the communication link between an X client and an X server. In this way, XMX works with any X clients and any X servers, without the need to modify either. It's tempting to call this "broadcast software," and that is certainly the effect. In reality, though, XMX is "multicast" software. It must know all the slave machines ahead of time and it connects to each one directly. XMX is more like mail than news. XMX connects to N servers like an X client, then accepts connections from M clients like an X server. One of those servers is designated the "master" from which input is directed to the clients. The other servers are "slaves." Slave servers receive only those protocol requests that are necessary for them to maintain a visual look-alike of the master server's display. This software was developed at Brown University for use in our electronic classroom. Some version of it has been in use here since 1988. ------------------------------------------------------------------------- COPYING IT The Computer Science Department at Brown University distributes XMX under the following Copyright: Copyright 1988, 1989, 1990, Brown University, Providence, RI. Permission to use, copy, modify and distribute this software and its documentation for any purpose other than its incorporation into a commercial product, is hereby granted, provided that this copyright notice appears on all copies and the distribution is only within the organization represented by the person receiving the software from Brown. Brown requests notification of any important modifications to this software or its documentation. Please note that we explicity prohibit you from distributing this outside of your organization. Tell them to get it from us. ------------------------------------------------------------------------- CAVEAT This is a preliminary distribution. XMX has many known limitations and a few bugs. It is being actively developed and your input is solicited. So, too, is your patience. ------------------------------------------------------------------------- BUILDING IT XMX does not rely on Xlib or any other lib for that matter. It does require certain X11 include files (X.h, Xproto.h, Xlib.h, Xatom.h, Xutil.h). If you have these files installed in /usr/include/X11, then all you need to do is run "make". If you keep these include files somewhere else, you'll need to add a -I switch to CFLAGS in the Makefile. XMX has been compiled and tested on various sun4's and on a dec 3100. ------------------------------------------------------------------------- USING IT Since XMX is not itself an X server, it expects to connect to X servers that are already running. These servers must be willing to accept client connections from whatever machine XMX is running on (see xhost(1)). See the rx(1) utility, included with this distribution. Since examples are easier to understand than lengthy explanations, here's an example. Assume X servers are running on machines named larry, moe and curly: abbott% xmx :1 -p -display moe larry curly XMX Version 1.0, ready. Now XMX is running on abbott, accepting connections via display abbott:1, (socket 6001), displaying on moe, larry and curly, but only taking input from moe. Moe is the master server. We could have said moe:0, but XMX relaxes this convention and assumes you mean display zero if you don't specify. The -p option tells XMX to echo pointer movements to the slaves. costello% setenv DISPLAY abbott:1 costello% xterm& Setting the DISPLAY environment variable causes any X clients run in this shell to connect to XMX. The xterm we ran here appears on larry, curly and moe via XMX. What's more, since xterm inherited the environment variable from the shell, anything typed at it will also be multicast. Included with this distribution is the document "Running an XMX Broadcast Session in the Sun Lab" (./lab.me). This is the guide that we distribute to TA's at Brown who are responsible for running their class' demos. It is very site-specific, but contains some helpful information. ------------------------------------------------------------------------- BUGS AND LIMITATIONS Protocol extensions not supported yet. XMX will list extensions it does not support in reply to XListExtensions request. Doesn't do decnet. Servers must be "clean" at xmx startup: Must have identical sets of allocated Atoms. Must have empty default root colormaps. Window managers may break if master has preexisting resources not present on slaves. Doesn't accept the null string for a hostname. Use "unix" instead. ------------------------------------------------------------------------- COMING SOON Cleaner code! Bugs fixed! All standard MIT protocol extensions supported. Better colormap handling. Real Atom mapping. Better tolerance of preexisting resources, esp on slaves. Better (configurable?) pointer motion. A facility for recording and playing back the slave (no input) protocol stream. Support for "late-joiners." A nifty X interface to rx and xmx! A tech report. ------------------------------------------------------------------------- XMX was written by John Bazik Dept. of Computer Science, Box 1910 Brown University Providence, RI 02912 (401) 863-7600 jsb@cs.brown.edu uunet!brunix!jsb jsb@browncs.bitnet