COPYING | ||
forward.py | ||
README.md |
input-over-ssh
Mouse and keyboard forwarding over SSH, using xinput and xdotool, with relative mouse movement. A useful adjunct to VNC in situations where relative mouse movement is important, e.g. 3D video games.
Dependencies
- Client (sending the mouse and keyboard of this device)
- xinput – to monitor mouse and keyboard
- unclutter from unclutter-xfixes-git – to hide cursor
- Server (mouse and keyboard sent to this device)
- xdotool – to send mouse and keyboard events
Configuration
In forward.py, MOUSEHOLD_X
and MOUSEHOLD_Y
define the location at which the mouse cursor will be centered. Each frame, the client-side cursor will be reset to this position to measure relative movement. If MOUSEHOLD_W
and MOUSEHOLD_H
are non-zero, a Tkinter window of the given dimensions will be drawn around that location to prevent clicks interfering with other applications.
DEVICE_MOUSE
and DEVICE_KEYBOARD
give the names of the keyboard and mouse devices to monitor, as shown in the output of xinput list
.
Usage
To run the script, pipe the output to SSH, ensuring that Python output is unbuffered using the -u
flag:
python -u forward.py | ssh hostname.example.com bash
To exit, simply press Ctrl+Q.
Combining with VNC
This setup is easily combined with VNC in view-only mode to provide a full GUI experience.
On the host, disable the CursorPosUpdates/CursorShapeUpdates VNC extensions to force the server to directly render the cursor. For x11vnc, simply pass the -nocursorpos -nocursorshape
flags.
On the client, enable view-only mode to prevent conflict between the VNC client and input-over-ssh. For TigerVNC vncviewer, simply pass the ViewOnly=1
flag.
Then run input-over-ssh as usual, and you should be able to control the remote cursor. This provides a lightweight, open-source alternative to services like Steam Remote Play.