This post describes to setup a VNC Mirror on your Raspberry Pi. You can see any desktop of any machine running VNC on your Raspberry Pi’s connected screen. You may come from these posts: Hardening the Raspberry Pi VNC Mirror and Raspberry Pi – VNC Mirror (Repeater) – Make any computer public anywhere which can be a little bit confusing especially when trying to get both into one project. Here in a few easy and understandable steps
Preparation
Download the latest Raspbian Image from the Raspberry Pi site. Unpack it and write the IMG file with Win32DiskImager (on Windows) or dd (on Linux or MAC) on your SD Card (make sure you have at least 4GB).
First Start
When you first start your Raspberry Pi with a monitor it runs raspi-config. If it doesn’t you can rerun it with
sudo raspi-config
In this menu select
Enable Boot to Desktop/Scratch
then
Desktop Log in as user 'pi'...
but say No to reboot, because we want to know the IP address of the raspberry and work via SSH later on. Type
ifconfig
to get your IP address. You may remember it or write it down. Now you can type
reboot
to restart the Raspberry Pi. (Please do not unplug the Raspberry Pi instead of rebooting because your filesystem may get corrupted)
Installing and configuring
On next start login to SSH via PuTTY (or similair SSH client) and standard credentials (pi/raspberry) Start a root console with
sudo bash
Company / Proxy settings
If you are in a company or using proxies you need to set them for updates and upgrades of packages (you don’t need this in most home environments)
nano /etc/apt/apt.conf
and enter your proxy:
Acquire::http::Proxy "http://user:password@proxy1.sysstem.at:8080";
Update, Upgrade and Install packages
After the proxy settings are done start the update of the package information and the upgrade your packages
apt-get update && apt-get upgrade -y
Install packages needed for maintaining and for the VNC mirror itself
apt-get install -y x11vnc vim ssvnc unp htop
Store VNC Passwords
Generate a hidden directory for the VNC password file
mkdir /home/pi/.vnc
Generate a VNC password for X11VNC
x11vnc -storepasswd /home/pi/.vnc/x11vncpasswd
Store the VNC password of the remotemachine (the password you have defined on the remote machine)
x11vnc -storepasswd /home/pi/.vnc/remotevncpasswd
set read permission for the password files
chmod +r /home/pi/.vnc/*
Scripts
VNCViewer
open the following file
vim /home/pi/vncviewer
and copy the following content (more about it’s content you can find here)
# Process check script: The script simply checks if a process is running and if it is not found to be running it will execute it. # The script loops in preset intervals, hence it is possible to monitor a process continuously. # Variables Running=1 SleepInterval=10 ProcessInstances=`sudo ps aux | grep [s]svncviewer | wc -l` #VNC Variables vnc=ssvncviewer host=WSWDL02:1 display=0 resolution=1920x1080 passfile=/home/pi/.vnc/remotevncpasswd para="-display :$display -viewonly -fullscreen -shared -passwd $passfile -scale $resolution -encoding zrle" function checkstatus() { vncpid=$(pidof ssvncviewer) sigign=$(sudo cat /proc/${vncpid}/status | grep SigIgn | awk '{print $2}') } # Logic while [ $Running -gt 0 ] do if [ `sudo ps aux | grep [s]svncviewer | wc -l` -gt 0 ]; then echo Process already running! Checking the Status. checkstatus if [ $sigign != "0000000000000004" ]; then echo SSVNCViewer has not status 4 echo Killing SSVNCViewer kill ${vncpid} else echo SSVNCViewer status seems to be ok fi else echo Process not running! Starting process # This is the command that should start the process in question $vnc $host $para & fi # How often shall we repeat the check? echo Sleeping for $SleepInterval seconds sleep $SleepInterval done exit 0
Change the permission for this script to execute
chmod +x /home/pi/vncviewer
VNCViewer Daemon
Make a little Daemon for the vncviewer to start and stop it.
vim /etc/init.d/vncviewerd
enter the following
### BEGIN INIT INFO # Provides: vncviewerd # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start or stop Custom VNC Viewer # Description: Start or stop Custom VNC Viewer ### END INIT INFO #! /bin/sh # /etc/init.d/monitor # Carry out specific functions when asked to by the system #Start vncviewer start() { echo Starting VNC Viewer su pi /home/pi/vncviewer & } #Stop vncviewer stop() { echo Stopping VNC Viewer pkill -f vncviewer } ### main logic ### case "$1" in start) start ;; stop) stop ;; restart|reload) stop start ;; *) echo "Usage: $0 {start|stop|restart|reload}" exit 1 esac exit 0
Make the script executable
chmod +x /etc/init.d/vncviewerd
and register it for autostart
update-rc.d vncviewerd defaults
Monitor
Create a script for turning on and off your monitor
vim /etc/init.d/monitor
enter the following
### BEGIN INIT INFO # Provides: monitor # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start or stop Monitor # Description: Start or stop Monitor ### END INIT INFO #! /bin/sh # /etc/init.d/monitor # Carry out specific functions when asked to by the system #Start Monitor start() { echo Starting Monitor # Enable HDMI with preferred mode /opt/vc/bin/tvservice -p # Change console to enable monitor output # not very nice but ok sudo chvt 6 sudo chvt 7 } #Stop Monitor stop() { echo Stopping Monitor /opt/vc/bin/tvservice -o } ### main logic ### case "$1" in start) start ;; stop) stop ;; restart|reload) stop start ;; *) echo "Usage: $0 {start|stop|restart|reload}" exit 1 esac exit 0
Make it executable (but do not add it to autostart!)
chmod +x /etc/init.d/monitor
Miscellaneous Monitor settings
Disable monitor standby
vim /etc/kbd/config
search for POWERDOWN_TIME=30 and set it to 0
POWERDOWN_TIME=0
Restart KBD to activate new settings
sudo /etc/init.d/kbd restart
Disable overscan (it tries shrink the picture a little to fit on older monitors and TVs)
vim /boot/config.txt
remove the sharp (#) from #disable_overscan=1 it should now look like this
disable_overscan=1
Now it’s time to reboot your Raspberry VNC Mirror.
reboot
If you have questions or problems left leave them in the comments!