The problem#
I hosted a LAN party1 a little while ago and ended up needing to loan out multiple computers to guests in the interest of having no one try to lug their desktop over. As it turns out, I don't keep multiple of spare gaming-ready laptops around, so I needed to get more computers somehow.
The solution#
My desktop has three screens attached to it (two monitors plus a projector), so given an extra keyboard and mouse (or two), it should be possible to run multiple instances of the game on it at the same time to let multiple people play using the same computer.
The script from this forum post makes it easy to set up multi-pointer X so a second keyboard and mouse will get its own mouse cursor. Then each keyboard and mouse pair can interact with its own instance of the game.
As an additional aid, I wrote monitor-lock.py
which
allows you to assign a mouse to a monitor, so it cannot be moved off
that monitor to prevent accidentally interacting with the other player's
instance of the game.
The basic usage is that you first run it with no arguments to get the available screens and pointers getting an output something like this:
$ ./monitor-lock.py
...
Available screens:
screen 0: {'x': 0, 'y': 0, 'width': 3840, 'height': 2160}
screen 1: {'x': 3840, 'y': 0, 'width': 1920, 'height': 1200}
screen 2: {'x': 3840, 'y': 1200, 'width': 1920, 'height': 1080}
Available pointers:
device 2: Virtual core pointer
device 17: second pointer
USAGE: ./monitor-lock.py [device] [screen]
and then in a screen
session (so you don't have to worry about
accidentally doing this on a monitor you've locked your pointer away
from), run
./monitor-lock.py 2 0
and
./monitor-lock.py 17 1
to lock the primary pointer to the first screen and the second pointer to the second screen.
Just use Ctrl
+C
to kill the process when you want the pointer to be
able to move freely again.