site  contact  subhomenews

Headless Pi3 with X11vnc

December 21, 2016 — BarryK
Right now, I have the full desktop of my Pi3 on my laptop. It was very easy to do, steps documented here.

To get going, I am trying the absolute simplest way of doing it. Not using ssh. On the Pi3 I am running the 'x11vnc' daemon, on the laptop running 'gvncviewer'. That's it.

Step 1: compile x11vnc
Puppy Forum member 'goingnuts' showed me how to compile an old version of x11vnc. This would be good if I wanted to create a static executable in a uClibc or Musl environment. But I am just running Quirky Xerus64 armv7 8.1.4 on my Pi3, so have glibc.

I downloaded the old x11vnc from here:
https://sourceforge.net/projects/libvncserver/files/x11vnc/0.6.2/

I modified the instructions from goingnuts, compiled it like this:
#!/bin/sh

CC_GLOBAL='gcc'
INCDIR='/usr/include'
LIBDIR='/usr/lib'
for x in libvncserver/auth.c libvncserver/d3des.c libvncserver/main.c libvncserver/sockets.c libvncserver/zlib.c libvncserver/cargs.c libvncserver/draw.c libvncserver/rfbregion.c libvncserver/stats.c libvncserver/zrle.c libvncserver/corre.c libvncserver/font.c libvncserver/rfbserver.c libvncserver/tight.c libvncserver/zrleoutstream.c libvncserver/cursor.c libvncserver/hextile.c libvncserver/rre.c libvncserver/translate.c libvncserver/zrlepalettehelper.c libvncserver/cutpaste.c libvncserver/httpd.c libvncserver/selbox.c libvncserver/vncauth.c x11vnc/*.c; do
echo $x
${CC_GLOBAL} -c ${CFLAGS_GLOBAL} -I. -I../ -I./libvncserver -I./x11vnc -I./rfb -I$INCDIR $x
done
${CC_GLOBAL} -I .. $LDFLAGS_GLOBAL -o x11vnc/x11vnc *.o -L$LIBDIR -lXinerama -lXtst -lXext -lX11 -lpthread -ljpeg -lz
<

A binary x11vnc/x11vnc got created, that I copied to /usr/bin.

Step 2: check wi-fi network
My Pi3 has a wi-fi hotspot already setup, as documented here:
http://bkhome.org/news/201612/running-the-pi3-headless.html

...however, for now I am not using dropbear.

Just checking my IP address on the Pi:
# ifconfig

eth0 Link encap:Ethernet HWaddr B8:XX:EB:38:02:BA
inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0
<

Step 3: Run x11vnc daemon
Now, start the x11vnc daemon:
# x11vnc

20/12/2016 20:09:42 Using X display with 32bpp depth=24 true color
20/12/2016 20:09:42 Autoprobing TCP port
20/12/2016 20:09:42 Autoprobing selected port 5900
20/12/2016 20:09:42 screen setup finished.
20/12/2016 20:09:42 The VNC desktop is puppypc13817:0
PORT=5900
<

Step 4: Compile vnc client on laptop
It is confusing, as there are two different products named gvncviewer. One of them is written in Python, requiring py-gtk. There is another written in C, for gtk, and that is what I am using. The latter is a package called 'gtk-vnc', that I downloaded from here:
https://download.gnome.org/sources/gtk-vnc/0.6/

Unfortunately, I have also read on some websites, the name 'gtk vnc' being used for the Python version. Oh well.

This is how I configured it:
# ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --build=x86_64-pc-linux-gnu --with-sasl --without-pulseaudio --with-examples --without-python --with-gtk=2.0 --disable-vala --enable-introspection=no
<

The "--with-examples" is required, and that will build the 'gvncviewer' binary.

Step 4: Run vnc client on laptop
After installing gvncviewer, it can be run:
# gvncviewer 192.16.0.101:0
<

Yes, up comes the entire Pi3 desktop on my laptop!

Step 5: ssh tunneling?
That would be the obvious next thing, to run dropbear ssh server on the Pi3, and tunnel x11vnc through it.
I am not in any hurry to do it, as I am only doing this on a wi-fi network within my house, well, the signal hardly reaches outside my room. Doing it without an Internet connection.

PETs
I have uploaded the x11vnc PET packages (112KB, 118KB):
http://distro.ibiblio.org/quirky/quirky6/armv7/packages/pet_packages-xerus/x11vnc-0.6.2-armv7-xerus.pet
http://distro.ibiblio.org/quirky/quirky6/amd64/packages/pet_packages-xerus/x11vnc-0.6.2-xerus64.pet

They have a script, /etc/init.d/zz-x11vnc, which will start x11vnc daemon at bootup. It is a bit crude, waiting 10 seconds for X to start, before starting the daemon.

...oops, have just realised, the line invoking x11vnc inside the startup script, should have an "&" inside it. Will fix.

I am thinking in the future, I might include 'xinetd' in Quirky builds. It is known as a "super server" and is a way of starting other servers on demand. It could be used to start x11vnc and dropbear.

xinetd man page:
https://linux.die.net/man/8/xinetd

Pros and cons of x11vnc
The method that I documented earlier, with ssh daemon running on the Pi3 and ssh client on the laptop, has the great advantage of speed. It uses the X server of the laptop.

X11vnc, on the otherhand, does it all remotely, and it very slow. However, the advantage is seeing the entire desktop.

The ssh-server-client method has an advantage that X does not need to be running on the Pi. This is useful for testing purposes if X is broken on the Pi.

Comments

The Ubuntu repo does have this, but it is compiled for gtk3.

Here is my PET (113KB):
http://distro.ibiblio.org/quirky/quirky6/amd64/packages/pet_packages-xerus/gtk-vnc-0.6.0-amd64.pet

Tags: linux