Evince is a project aimed at improving connectivity between multiple machines, RISC OS and others, primarily on a local area network. With the ascent of single-board computers such as the RaspberryPi family of devices, many of us have a number of small, inexpensive machines but not enough space to have separate displays, keyboards and mice etc for each and every device.
Do you too find yourself wishing that you could use them all via a simple, fluid interface from your favourite monitor, keyboard and mouse without the hassle and impracticality of a KVM setup that has enough ports, and without the switching time and the compatibility issues that KVMs bring?
This was the motivation behind Evince; pulling together a number of network-connected machines and making them seamlessly usable from one console. Commonly, people use the Remote Frame Buffer (RFB) protocol, more popularly known as VNC, to use other machines interactively over a network, and since this is widely supported with good compatibility and cross-platform, it also forms the basis of the Evince project.
Right now, Evince is primarily a multi-headed client setup, prototyped under the whimsical name 'The Borg'... here are a couple of videos and a screenshot from that prototype:
At this point I should perhaps note that all of the code forming the RISC OS client, and running on the Cortex-A9 powered i.MX6 WandBoard (at 2560 x 1600 x 32bpp at 60Hz) is scalar C++ code without using any NEON/assembler optimisations yet, and without hardware acceleration. There is still plenty of room for improvement but all of the rendering (apart from the dark blue background areas!) is done in-app rather than using RISC OS because even the C++ implementation is faster.
The client, running on RISC OS i.MX6-powered WandBoard, is now connected to VNC servers running on the following operating systems:
It demonstrates inter-operatability with multiple targets over a variety of connections from WiFi, through 100Mbps Ethernet to the ARMbook, up to Gigagbit Ethernet to the Ubuntu box. These machines are distributed throughout the property.
Here we have Ubuntu Linux, macOS High Sierra, ARMbook, Windows 10, Raspbian on Pi4, Raspbian on Pi3B and RISC OS on my Pi 3B+. Four of these should be making their way to the RISC OS London Show...
And one final image, showing the ARMbook centre-stage:
One of the key motivations for writing Evince has always been something I nicknamed 'MagicWand' a long time ago but never got around to writing; using the VNC protocol but sending only traffic from input devices - keyboard and mouse - and never requesting display updates, it becomes possible to drive a remote machine that has a physical monitor attached.
With a number of machines physically co-located and driving monitors arranged alongside each other - as a 'wall' - Evince allows you to move the mouse pointer directly off one monitor and onto the monitor of another machine, with the keyboard automatically following the mouse pointer; KVM functionality with no additional wiring beyond the network cable (or wireless).
The result is a much more natural way of using multiple machines and sidesteps the irritating switching delays and compatibility issues associated with KVMs. Furthermore it operates using standard VNC/RFB server software so can be used with pretty much any computer.
What makes Evince different from other VNC clients apart from the ability to view and fluidly switch between multiple desktops?
Many of these features can be found in modern VNC clients on non-RISC OS platforms, but Evince aims to take things futher.
The author's familiarity with the RFB/VNC protocol dates back many years to the development of a VNC server to run on the IYONIX pc where it was critically important wherever possible to avoid reading from the screen memory. This server has been updated to run on more recent machines and to support the alternative RGB component ordering employed on some of these. However, with screen reads being no longer quite so crippling on modern machines (although still best avoided since the frame buffer is uncacheable and thus CPU read performance is poor), and with the sterling work of others such as Jeffrey Lee on 'the' VNCserver, little further work as thus far been done on the server side of Evince.
There is still plenty that may be done to improve things on the server side, however, such as limiting CPU involvement, providing a virtual frame buffer a la Geminus and thus implementing VNC/RFB at a higher level than simple pixel comparison and transmission. Geminus could serve up additional virtual screens over VNC/RFB and thus co-opt remote machines (in this case technically running 'client' software) purely as display devices to create a multi-monitor desktop on the machine running the 'server' software...
See Evince being demonstrated at the RISC OS South West Show on Saturday 22nd Feb. There's a little more work to be done on a couple of features before it'll be ready or beta release but you can sign up to the Sendiri Beta mailing list now if you would like to help with testing of the beta release.
Please offer any suggestions you may have as to the direction in which to develop Evince further, and in particular any functionality that would be useful with your specific setup. I want it to be useful to people.
To kick things off, some features that I wish to see implemented in later releases are:
Suggestions received from others (thank you):
Essentially, allow all machines to share and work together...Last updated: 21st Feb 2020.