Lionel Cons's mxconns is an X Windows monitor and proxy. The author suggests you use it to enhance the security of your X server by monitoring for connection attempts and dangerous requests (e.g. keylogging). I tend to use it as a flexible proxy fo X forwarding with my cluster.
Ususally if you SSH into a remote computer and want to run X
applications, you use ssh -Y to forward your X connection to the
remote host, and everything works as expected. However, I could not
figure out how to expose the forwarded server so it could except
connections from other nodes in the cluster. For example, if a job I
had running on n1 wanted to talk to my X server (e.g. via MPE),
it would need to connect to n0:
home <--(ssh -Y)----> n0 <--(???)----> n*
mxconns fills the gap by providing a proxy between the local socket
provided by ssh -Y and a new publicly exposed X socket available to
n*:
home <--(ssh -Y)----> n0 <--(mxconns)----> n*
mxconns needs a configuration file telling it to trust all the
computers on the cluster, which should look something like:
n0$ cat ~/.mxconns
192.168.2.* allow
After you've set that up, a full connection will look like:
home$ ssh -Y n0
n0$ export DISPLAY=`mxconns -config ~/.mxconns -fork -hunt -verbose`
n0$ echo $DISPLAY
n0.*.edu:5
after which you can do things like:
n0$ ssh n1
n1$ export DISPLAY=n0:5 xeyes
You can explicitly kill mxconns when you're done:
n0$ killall mxconns
or just wait and it will die naturally when you close your initial X
connection to n0.
Packaging
mxconns is enough of a niche app that it's not widely packaged at
the moment. However, building and installing it is really easy, and
is well explained in the README file. I've added an ebuild to my
Gentoo overlay if you're running Gentoo.
Messy details
ssh -Y sets up an X proxy on n0 on 127.0.0.1:6010 and sets my
DISPLAY to localhost:10.0:
n0$ netstat -an | grep 6010
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN
tcp6 0 0 ::1:6010 :::* LISTEN
However, I want the X proxy to bind to eth0 (192.168.2.100) not
localhost (127.0.0.1), so other nodes can connect. If you're using
OpenSSH's sshd on n0, you can set X11UseLocalhost no in your
sshd_config. However, this binds the ssh -Y X connection to the
wildcard address, exposing it to the world through eth1 (which is bad)
as well as to the cluster through eth0 (which is good). With
mxconns you can explicitly specify the interfaces you want to bind.
X authentication is handled with cookies, and getting cookie detection
working in mxconns turned out to be a key part of patching mxconns
to work in this situation. The ssh -Y connection stores its X
authority cookie under hostname/unix:dpynum:
n0$ xauth list
n0/unix:10 MIT-MAGIC-COOKIE-1 ...
as described under the DISPLAY NAMES section of xauth(1).