X2GO

https://wiki.x2go.org/doku.php/download:start

X2GO is one of the easiest open source remote access applications to install on Linux, including on the Raspberry Pi 3B/4B. If the host is LinuxMint and the client is a Raspberry PI, you can have both the LinuxMint panel on the bottom of the client screen as well as the Rasbian panel on the top of the screen – that way you can run both local and remote apps at the same time in a split screen, or even full screen on separate client monitors, or x2go client window spanning both monitors.

The x2goserver can handle multiple simultaneous client computers with distinct usernames and their home directories – rather like thin clients without PXE booting. X2GO is not integrated into the loginctl multi-seat system but functions beside that capability. Thus the multi-seat behavior of the client is handled by the x2goserver but initiated by the x2go client,  not the  host side that loginctl controls. The Raspberry Pi 4B is fast enough to be used as a full desktop and supports two HDMI monitors. It only needs to become an x2go client of an x2go server when it needs more computing power or to save files. Its window on the server can span both monitors, or stay on one of the monitors so that the user can run apps both locally and remotely on the server at the same time, moving the mouse to control which desktop the keyboard is connected to.

While there is a x2goclient for Windows computers, there is no x2goserver for Windows computers. Supporting multiple independent client sessions would violate a Windows single workstation license. The Windows malware problem can be solved by running Windows as a guest OS under VirtualBox on a Linux host server. Then there is no need for the Windows OS to be connected to the internet because you can use the browser on the Raspbian local client desktop when needed.

If multiple network cards on the x2goserver, the default is to listen on all for clients. With lots of simultaneous clients, you might want to configure the server to separate server internet traffic from client traffic.

Installation of server on Linux Mint 19:

asm32@M5A88-M:~$ sudo apt-get install x2goserver x2goserver-xsession
[sudo] password for (username):

... skipping output during installation process ...
 
asm32@M5A88-M:~$
asm32@M5A88-M:~$ sudo service x2goserver start
[sudo] password for (username): 
asm32@M5A88-M:~$

or, alternatively,

asm32@M5A88-M:~$
asm32@M5A88-M:~$sudo systemctl start x2goserver
asm32@M5A88-M:~$

To make it start automatically on boot:

asm32@M5A88-M:~$ sudo update-rc.d x2goserver defaults
[sudo] password for asm32: 
asm32@M5A88-M:~$

Installation of client on Raspberry Pi3 B+  running Raspbian:

x2goclient is already in the Raspberry Pi Raspbian  repository, so all that is needed is

pi@raspberrypi:~ $ sudo apt-get install x2goclient

Finding the host server from client computer:

pi@raspberrypi:~ $ sudo apt-get install nmap
root@raspberrypi:/home/pi#
root@raspberrypi:/home/pi# nmap 192.168.10.100-120 |grep T1600
Nmap scan report for asm32-Precision-T1600 (192.168.10.107)
root@raspberrypi:/home/pi#

where “T1600” was the hostname of the x2go server I needed the IP for
and “|grep …” filters the output from nmap to display only that IP address if there were additional IP addresses on that LAN segment search range. The host server could have a second network card configured for a static IP address so that it was always the same.

X2goclient as Raspberry Pi software zeroclient!

Raspberry Pi could be configured to initiate an x2goclient session immediately, much like a hardware zero client, with the difference that the x2go client provides the login screen instead of the server. A new raspberry pi is cheaper than a new zeroclient, but used zero clients are cheaper still, and very available.