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 Raspberry Pi OS with Desktop:

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

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

Once installed, there will be a new menu item under Internet category.

When configuring x2goclient sessions, you can use server hostnames instead of IP addresses. There can be more than one server on a LAN but hostnames must be unique.

X2goclient as Raspberry Pi software zeroclient!

A new raspberry pi is approximately 1/3 the cost of a new network attached zero client. 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.

You will want to install the perl script, wakeonlan, so that you can wake up the desktop server from any of the Pi zero clients. I have edited my version so that the desired server MAC address is in the script instead of needed on the command line or in a separate file.

While x2goclient is trivial to install on a Raspberry Pi with a desktop environment, for a single purpose network attached zero client, it is not required to have a windows manager and desktop environment so you could use the Raspberry Pi OS (32-bit) Lite image at 432 MB (compared to the desktop version at 1128 MB).

Download here: https://www.raspberrypi.org/downloads/raspberry-pi-os/

Once you have downloaded and flashed a MicroSD card with this and done the initial configuration at first boot on the Raspberry Pi, add the following:

sudo apt-get install --no-install-recommends xserver-xorg
sudo apt-get install --no-install-recommends xinit

To start up the xserver automatically, edit the file .bashrc to append the line “/usr/bin/startx” without the quotes.

Next edit the file .xinitrc to delete or make a comment the line “. /etc/X11/Xsession” and append a new line ” /usr/bin/x2goclient –thinclient –session=session-name” without the quotes. The second option launches a named session that you have setup already. Leave this option off if you have more than one server and the user needs to choose a session. If you have more than one user, you should not fill in the user name for the session. If you have only one server and one user (you are using this to remotely administer the server, perhaps) then you can set up automatic login so that the Raspberry Pi boots directly to a desktop of the remote server computer.

Auto login with ssh rsa

Assuming you already have a x2go session working with login, several things in the x2go session are needed for auto login to work. You most have a username (server end) or it will not know where to look for the authorized public key on the server end. It is preferable to check the box for “Try auto login” and leave the path entry just above empty so that it will use the default location. There can be multiple authorized public keys on the server – it will look for the one matching the client private key. There can also be multiple client sessions, each with a different private key. It is the client end (at possibly multiple separate workstations) that initiates the conversation with the server.

Setting up private and public keys

pi@raspberrypi:~ $ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.
The key fingerprint is:
[edited out for my privacy]
The key's randomart image is:
+---[RSA 2048]----+
[edited out for my privacy]
+----[SHA256]-----+
pi@raspberrypi:~ $

pi@raspberrypi:~ $ ls .ssh/ -l
total 8
-rw------- 1 pi pi 1823 Jul 12 17:49 id_rsa
-rw-r--r-- 1 pi pi 396 Jul 12 17:49 id_rsa.pub
pi@raspberrypi:~ $

Having generated these keys at the client end, they need to be installed at both ends. In my case asm32@asus-centos7 is my username on my server hostname.

pi@raspberrypi:~ $ ssh-copy-id asm32@asus-centos7
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/pi/.ssh/id_rsa.pub"
The authenticity of host 'asus-centos7 (192.168.10.105)' can't be established.
ECDSA key fingerprint is SHA256: [edited out for my privacy]
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
asm32@asus-centos7's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'asm32@asus-centos7'"
and check to make sure that only the key(s) you wanted were added.
pi@raspberrypi:~ $ ssh 'asm32@asus-centos7'
Last login: Sun Jul 12 17:52:03 2020
[asm32@asus-centos7 ~]$ ls -l .ssh/
total 4
-rw-------. 1 asm32 asm32 396 Jul 12 17:56 authorized_keys
[asm32@asus-centos7 ~]$
[asm32@asus-centos7 ~]$ exit
logout
Connection to asus-centos7 closed.
pi@raspberrypi:~ $ ls -l .ssh/
total 12
-rw------- 1 pi pi 1823 Jul 12 17:49 id_rsa
-rw-r--r-- 1 pi pi 396 Jul 12 17:49 id_rsa.pub
-rw-r--r-- 1 pi pi 444 Jul 12 17:55 known_hosts
pi@raspberrypi:~ $

Note that after the client end command, ssh-copy-id, the public key has been added to the server end .ssh/authorized_keys and the client end now has a .ssh/known_hosts.

The right panel of x2goclient has all the sessions you have configured. When you select one of these, it will move to the blue left panel. With auto login, it will immediately start to connect to the server. If you leave it in the left panel when you exit the session, then the next invocation of x2goclient will immediately attempt to connect to the server. In the case of a Raspberry Pi OS (32-bit) Lite installation as described above, the Pi will boot directly into connecting to its configured session on the server – similar to the Phistek ZE7000 network attached zero client at less than 1/3 the hardware cost.

The Phistek ZE7000 has superior video performance. Its silicon USB over IP chip is transmitting compressed USB over IP protocol, whereas the x2go method is transmitting compressed X protocol graphic primitives which is more efficient for non video applications.