Using VNC to Display on a Shared Screen
At work, we have a big display (that will be) mounted on the wall and driven by a Beaglebone Black. We thought it’d be cool to be able to show each other what we’re doing by throwing it up on the screen.
After some research, I decided to use x11vnc
. I thought I’d have to SSH in to the Beaglebone and set up a port forward. But then I read the man page for x11vnc
and discovered VNC reverse connections.
A VNC reverse connection is when the VNC client (the one displaying) listens and the VNC server (the one with the applications) connects to it. Using this, I could create a simple daemon with off-the-shelf programs and the tiniest of shell scripts.
Display
The Beaglebone Black already has an .xsessionrc
on its user, so you just configure it to autostart X and then add xvncviewer -listen 0 -fullscreen &
to the end. Easy peasy.
As a bonus, we set up a hostname and mDNS on the Beaglebone so that we don’t have to deal with static IPs, servers, DNS entries, etc.
Clients
The client script is a bit more involved just because I went a little overboard on options to make sure weirdness didn’t happen. We install this script on each machine we want to connect to the display.
Due to our individualized configurations, we have different options to send to x11vnc
.
- I have two displays, so I use
-clip xinerama0
and -clip xinerama1
to switch between them.
- My coworker has a display of a higher resolution than the display mounted, so he uses
-scale 3/4
to
Does it work?
It works well! Videos don’t play well and there’s a lot of tearing, but it works. Multiple users work fine, too; they just stack up in connection order, so the newest one is on top.
In fact, the only changes I want to make are things like removal of the desktop environment on the display and the set-up of a default application.