X2Go: remote grafische Linux-applicaties
Met X2Go grafische Linux-toepassingen remote gebruiken
Veel interessante software is er alleen voor Linux, zoals Shotwell voor het bewerken en beheren van foto's. Met X2Go kun je dergelijke programma's op een Linux-computer remote gebruiken, ook als je met een Windows-pc of een Mac werkt. Zelfs een langzame netwerkverbinding is voor X2Go geen probleem.
Grafische toepassingen via een te langzame internetverbinding stotteren en haperen aan de lopende band. X2Go biedt dan hulp, want daarmee kun je Linux-programma's en zelfs hele desktops vloeiend bedienen via verbindingen met een hoge latentie of lage bandbreedte. Een bijzondere eigenschap van X2Go is dat sessies onderbroken kunnen worden en op een andere computer weer kunnen worden voortgezet. Het is ook te gebruiken voor computers die wel grafische toepassingen beschikbaar stellen, maar verder zonder beeldscherm en invoerapparaat draaien. Ten opzichte van traditionele X11-forwarding via SSH heb je daarbij geen gedoe met de commandline. Het populaire VNC gebruikt aanzienlijk meer bandbreedte om soepel te kunnen werken.
X2Go is nog het beste te vergelijken met de uit de Windows-wereld bekende remote-application-oplossingen van het bedrijf Citrix – maar dan voor een Linuxserver. Het voert grafische toepassingen op een server uit en toont de weergave van het programma op een clientcomputer. Terwijl de server het zware werk doet, hoeft de client alleen maar de interface te tekenen. X2Go gebruikt daarbij verschillende trucs zoals caching en compressie van afbeeldingen om verbindingen met een smalle bandbreedte beter te benutten. Bovendien worden ook bestanden, printers en geluid doorgestuurd.
In dit artikel laten we zien hoe met behulp van X2Go een Linux-programma remote is te gebruiken op een Windowspc en hoe je de mappen op een Windowsclient kunt vrijgeven voor de Linux-toepassing. We gaan daarbij uit van een omgeving die bestaat uit een Ubuntu 18.04 LTS Desktop Edition (64-bit) als server en een Windows 10-pc als client. Linux en macOS kunnen echter net zo goed als client fungeren.
Een vernieuwing die in Ubuntu 18.04 LTS is geslopen, is de bij het X2Go-project behorende X2GoServer. In eerdere Ubuntu-releases zat alleen een verouderde versie van de X2GoClient. In de officiële repository's van Debian 9 (Stretch) heeft X2GoServer het helaas niet gehaald. Voor Debian 10 (Buster) wordt ervan uitgegaan dat X2Go ook in de officiële repository's belandt. Voor OpenSuse, Fedora en Arch
Linux is X2Go eveneens als client en als server beschikbaar.
Installeren
De serverinstallatie is bij Ubuntu zoals altijd lekker overzichtelijk:
sudo apt install x2goserver
x2goserver-xsession
Op systemen die aanbevolen pakketten ('recommends') niet automatisch installeren, moet je eerst het pakket sshfs nog installeren als je het versturen van bestanden en printerdata wilt gebruiken:
sudo apt install sshfs
Om ervoor te zorgen dat X2Go functioneert, moet de SSH-poort 22 bereikbaar zijn. Bij Ubuntu is dat normaal gesproken zo, bij andere distributies moet je de instellingen van de firewall controleren.
Het installeren van de client is snel gedaan:
sudo apt install x2goclient
Als je X2Go met een oudere Ubuntuversie of een andere distributie wilt uitproberen, staan de installatiehandleidingen op de X2Go-wiki bij het onderwerp 'Installing X2Go'. De link daar naartoe en alle andere links en downloads staan bij de link onderaan dit artikel. De Windowsen macOS-versies van de X2Go-client kun je vinden bij het deel 'Get X2Go' en rechtstreeks downloaden van de startpagina van het project.
Het eerste programma
We gebruiken in dit geval het opensource beeldbewerkingsprogramma Shotwell als eenvoudig voorbeeldprogramma, want dat programma is op dit moment alleen voor Linux beschikbaar. Als Shotwell nog niet op de Linux-computer geïnstalleerd is, kun je dat op de volgende manier alsnog doen:
sudo apt install shotwell
Op de Windows-pc start je alleen de X2GoClient. Bij de eerste start verschijnen twee meldingen van de firewall van Windows over de SSH-daemon sshd en de soundserver pulseaudio. Die moet je allebei weigeren omdat de betreffende programma's alleen op een lokaal loopback-adres voor de X2GoClient bereikbaar moeten zijn – die van buitenaf of binnen een netwerk open stellen is een onnodig veiligheidsrisico.
Als de client de eerste keer start, wanneer er dus nog helemaal geen sessieprofielen voorhanden zijn, opent automatisch een dialoog voor het aanmaken van een sessieprofiel. Andere sessieprofielen kun je aanmaken via het menu-item 'Sessie / Nieuwe sessie'. Voor Shotwell kun je als sessienaam simpelweg 'Shotwell' gebruiken. Het standaard pictogram voor nieuwe sessies is een rob, de mascotte van X2Go. Als je op dat pictogram klikt, kun je voor het beter uit elkaar houden van verschillende sessies een willekeurig ander pictogram instellen. In het veld 'Host' moet de DNS-naam of het ip-adres van de Ubuntu-computer komen te staan. In het veld 'Inloggen' vul je op de Ubuntuserver de naam van de gebruiker in. Als je het leeg laat, dan vraagt X2Go bij een aanmeldpoging zowel naar de gebruikersnaam als het wachtwoord.
Helemaal onderaan verander je het sessietype in 'Enkele applicatie'. Daarna overschrijf je de tekst in het veld 'Commando' met de tekst shotwell. Laat je daarbij niet afleiden door de drop-downpijl aan het eind van het veld – als je op dat pijltje klikt, stelt X2Go je wel verschillende programma's voor, maar je kunt ook gewoon zelf een naam typen. Het aangeven van een absoluut programmapad is normaal gesproken niet nodig, maar wordt eveneens ondersteund.
Als je met testen in je lokale netwerk begint, dan ben je niet aangewezen op de versnellingsfuncties van X2Go. Daarom is het aan te raden naar het tabblad 'Verbinding' te gaan en daar de schuifregelaar 'Verbindingssnelheid' vervolgens helemaal naar rechts naar 'LAN' te schuiven. Andere sessie-instellingen zijn voor de eerste keer niet nodig. Ter afsluiting klik je op 'OK'.
Voor een eerste verbindingspoging moet je in het menu van de X2GoClient het item 'Opties / Instellingen' openen en op het tabblad 'Algemeen' een vinkje zetten bij 'Icoon in taakbalk weergeven'. Datzelfde doe je bij de vier daarna niet meer grijze sub-items. Hierdoor neemt de X2GoClient na een succesvolle verbindingsopbouw geen onnodige plek in op het beeldscherm of op de Taakbalk, maar verschijnt hij alleen als pictogram in het systeemvak.
Dan kun je aan de slag met de eerste test: klik op het sessiepictogram op de witte sessietegel aan de rechterkant van het clientvenster om het aanmeldingsvenster tevoorschijn te toveren. Na het invoeren van het wachtwoord verschijnt nog een vraag van de firewall van Windows over de X-server VcXsrv, die je net als de eerdere Firewall-meldingen moet weigeren. Daarna verdwijnt de client naar de taakbalk. In het begin wordt het generieke 'Accelerated X'-logo van X2Go daar getoond, maar na een kort moment verandert het pictogram in het gekozen sessiepictogram, begeleid door een melding dat de sessie succesvol gestart is. Daarna moet ook het Shotwell-venster al op de desktop van Windows verschijnen.
Weinig grensverkeer
De afbeeldingen die Shotwell moet gaan beheren, staan in een map op de Windows-pc. Om ervoor te zorgen dat die fotobestanden niet tussen de beide systemen heen en weer gekopieerd hoeven te worden, moet je de X2GoClient zodanig instellen dat hij het bestandssysteem van de Windows-pc bereikbaar maakt voor het Ubuntu-systeem.
De betreffende configuratie-opties staan op het tabblad 'Gedeelde mappen' bij de sessieconfiguratie. Die open je door tijdens een draaiende sessie simpelweg met de rechter muisknop te klikken op het sessiepictogram in het systeemvak. Selecteer in het menu dat opent de sessienaam (gebruik daar bijvoorbeeld 'Shotwell' voor) en het menu-item 'Gedeelde map', 'Voorkeuren'. Als alternatief kun je ook vóór het starten van de sessie klikken op het hamburgermenu in de hoek rechtsonder van de sessietegel en 'Sessie voorkeuren' kiezen. Ga bij de sessie-instellingen naar het tabblad 'Gedeelde mappen'. Klik op het mappictogram rechts van het invoerveld voor het pad en selecteer de gewenste map. Vervolgens ga je naar 'Toevoegen' en zet je een vinkje bij 'Automatisch aankoppelen'. Optioneel kun je onderaan het dialoogvenster een bestandsnaamconversie activeren voor verschillende tekensets, als er problemen zijn met bijvoorbeeld umlauten in de bestandsnamen. Die conversie geldt alleen voor bestandsnamen, niet voor de inhoud van die bestanden. Het vinkje dat daaronder staat heeft betrekking op de SSH-port-forwarding: dat moet je niet verwijderen omdat bestands- en printershares dan niet meer zouden werken. Klik ten slotte op OK. Als je de aanpassingen bij een draaiende sessie gedaan hebt, klik je in het nog geopende dialoogvenster 'Gedeelde mappen' op 'delen'. De instellingen zijn blijvend, ook als je ze tijdens een draaiende sessie doet.
Voor een eerste test kun je een map gebruiken met voorbeeldafbeeldingen. Bij Windows 10 zullen in C:\Windows\Web\ Wallpaper wat achtergrondafbeeldingen staan (bij Windows 7 is dat dan C:\Users\ Public\Pictures\Sample Pictures).
Als je alles op de juiste manier ingesteld hebt, zal bij Shotwell na een klik op 'File / Import From Folder' de homedirectory tonen van de gebruiker op het Ubuntu-systeem. Daar staat nu de nieuwe subdirectory media, waarin de door X2Go gekoppelde mappen zich bevinden. De map met de achtergrondafbeeldingen van Windows staat dan in /media/disk/ _cygdrive_C_Windows_Web_WALLPA1. De naam van het basispad wordt door X2Go afgekort, net als bij de 8.3-bestandsnamen van oude FAT-systemen, tot zes tekens met grote letters en een telkens oplopend nummer. Bij Windows wordt nog het deel _cygdrive_ ervoor gezet. Voor bestandsnamen en submappen geldt dat niet.
Als je de juiste mappen hebt geselecteerd, vraagt Shotwell of je de afbeeldingen wilt kopiëren of dat je daar links naar wilt aanmaken. Omdat het doel is om geen bestanden heen en weer te kopiëren, kies je hier voor 'Import in Place'. Korte tijd later is het importeren klaar en presenteert Shotwell de afbeeldingen zodanig dat het lijkt alsof ze op het lokale Ubuntu-systeem staan.
Een, twee, drie, veel …
Het nadeel van deze manier van werken is dat de X2Go-sessie beëindigd wordt als je Shotwell afsluit. Als je dat weer wilt starten, moet je je ook weer aanmelden. Voor
andere programma's die je wilt gebruiken, moet je telkens een nieuwe sessie configureren en je per toepassing apart aanmelden. Dat is niet echt handig.
Gelukkig is dat anders te doen door een nieuwe sessie met 'Gepubliceerde applicaties' aan te maken. Als je je daar bij aanmeldt, lijkt er in eerste instantie niets te gebeuren – afgezien van de melding dat er een nieuwe sessie gestart is.
Als je bij X2GoClient aangegeven hebt dat hij zich in het systeemvak moet terugtrekken, dan zie je met een rechter muisklik op het sessiepictogram alle applicaties vermeld die lokaal in het startmenu van je Ubuntu-systeem staan. Je kunt ook bij dat remote-startmenu komen via het nieuw toegevoegde vierde pictogram ('Applicaties') links van de andere pictogrammen onderaan de sessietegel.
Aan de kant van de server heeft de modus 'Gepubliceerde applicaties' het voordeel dat er geen complete desktopomgeving als Gnome of KDE in het geheugen hoeft te worden geladen en er daardoor meer werkgeheugen vrij blijft voor programma's. Op de client heb je het voordeel dat de Linux-programma's bijna naadloos integreren in de Windowsomgeving – en dat je je maar één keer hoeft aan te melden.
Performance-tuning
Met name als je internetverbinding niet zo snel is, merk je dat de moderne browsers alleen op lokale performance ingesteld zijn en via X-forwarding dan ook tergend langzaam gaan worden. Daar kan ook X2Go niets aan veranderen, ook niet met een geheel naar links geschoven snelheidsregelaar bij het sessieprofiel. Zowel Firefox als Chrome doen dat.
Dat probleem kun je op twee manieren omzeilen: dat kan in eerste instantie door bij Firefox bij about:config de parameter gfx.xrender.enabled op true te zetten – of de Firefox-fork Pale Moon als browser te gebruiken. Die is op een moment afgescheiden toen de veranderingen die de remote-performance verslechterden nog niet in Firefox zaten.
Omdat een recente Firefox-versie zelfs met die workaround via X2Go wat trager reageert dan Pale Moon, is die laatste op dit moment het betere alternatief voor remote gebruik. Mozilla wil de ondersteuning voor de X Rendering Extension (XRender) in een van de komende Firefoxveries verwijderen omdat de rendering in de toekomst platformonafhankelijk via OpenGL moet gaan gebeuren. De ontwikkelaars van Pale Moon willen daarentegen de oudgediende rendering-engine trouw blijven. Zij neigen er momenteel meer naar de waarde voor gfx.xrender.enabled ook bij nieuwere releases dan ook op true te laten staan.
Met een combinatie van Pale Moon, X2Go en een krachtige server kun je ook via een wifiverbinding met een smalle bandbreedte dan bijna net zo snel op internet surfen als vanuit thuis – alleen kun je dan wel geen geluid door laten sturen. Ook op een oudere kantoor-pc kun je het werktempo verhogen door zware programma's zoals browsers en officepakketten uit te besteden aan een snellere machine.
Volledige desktop
Als je in principe liever met een Linuxdesktopomgeving werkt, maar de lokale computer draait op Windows of macOS, dan kun je met X2Go een complete desktopomgeving beschikbaar stellen. Dat werkt ook op computers die wat minder krachtig zijn en werkt zowel full-screen als in een venstermodus. De instelling daarvoor staat bij de sessieconfiguratie op het tabblad 'Input/Output' bij het onderdeel 'Beeldscherm'. Dat werkte bij ons niet met alle programma's en distributies even goed, maar het is zeker het proberen waard.
Dingen uitproberen kan gelukkig zonder dat je al te veel schade oploopt. Als een sessie niet meer goed weergegeven wordt en je hem moet afsluiten, dan wordt de sessie automatisch geparkeerd – waarover later meer. Je moet dan wel X2GoClient afsluiten en herstarten.
Om een complete Linux-desktop op je scherm te krijgen, selecteer je bij de sessievoorkeuren op het tabblad 'Sessie'
onderaan bij 'Sessie type' de desktop die je wilt gaan starten op het remote systeem. Maar dat is helaas niet alles. Je moet namelijk wel letten op een paar dingen. Ten eerste dat X2Go niet alle desktopomgevingen ondersteunt en sommige minder goed geschikt zijn om remote mee te werken dan andere. In het algemeen werken lichtgewicht desktopomgevingen als Lxde en Xfce 4 het beste. De meeste problemen treden op bij Gnome 3, zodat de nieuwere versies daarvan niet zinvol te gebruiken zijn, behalve in de Flashback-modus. De oudere KDE 4 en de van Gnome 2 afstammende Mate-desktop werken daarentegen probleemloos, net als KDE 3 en diens fork Trinity.
Of om het simpel te zeggen: hoe ouder de desktop, des te groter de kans dat hij onder X2Go zal werken – en vloeiend. De ondersteuning voor KDE Plasma 5 en LQXT is daarentegen nog relatief nieuw, en vooral bij KDE Plasma 5 kunnen er daardoor nog problemen voorkomen (zoals langere starttijd, helemaal niet starten, crashen bij het afsluiten of gewoon compleet onbruikbaar). Desktops die niet op het drop-downmenu staan om uit te kiezen, kun je echter toch wel gebruiken als je bij de sessieconfiguratie als sessietype 'Aangepast bureaublad' kiest en het betreffende startcommando invult bij 'Commando'.
Suspend and resume versus erase and rewind
X2Go kan een sessie (of dat nu een desktop is of een afzonderlijke of gepubliceerde applicatie) beëindigen en later weer op hetzelfde punt voortzetten. Daarbij lopen de programma's op de server gewoon door. Op die manier kun je ook vanaf een totaal andere werkplek doorgaan waar je gebleven was. Mocht tijdens het werken de verbinding wegvallen, dan gebeurt dat zelfs automatisch. Net zoals de programma's screen en tmux dat in de terminal doen. Je kunt zelf een sessie onderbreken via het pauze-pictogram bij de pictogrammen op de sessietegel in het X2Go-clientvenster. Het kan ook met de toetsencombinatie Ctrl+Alt+T. Het beëindigen van een sessie kan op een vergelijkbare manier: je kunt klikken op de powerknop in plaats van het pauzepictogram of de toetsencombinatie Ctrl+Alt+R gebruiken. Dat laatste werkt niet altijd en niet overal. Net als de toetsencombinatie Ctrl+Alt+F trouwens, waarmee je zou moeten kunnen schakelen tussen de fullscreenen venstermodus.
Je kunt een sessie ook onderbreken of beëindigen door binnen de X2Go-sessie het commando x2gosession-terminate respectievelijk x2gosession-suspend uit te voeren.
Bij elke verbindingsopbouw probeert X2GoClient een al aanwezige, maar onderbroken sessie te hervatten. Dat gebeurt echter alleen als er precies één gepauzeerde sessie bestaat en de instellingen daarvan overeenkomen met de op dat moment bij de client aangegeven instellingen. Anders verschijnt er een selectiemenu met de nog draaiende sessies. Met de X2GoClient-commandlineparameter --no-autoresume wordt de dialoog ook getoond als de gevraagde en de onderbroken sessie overeenkomen.
Als je wilt dat onderbroken sessies de server minder sterk belasten, dan kun je de SupeReNicer-functie op de server activeren. Daarvoor bewerk je het bestand /etc/x2go/x2goserver.conf als root. Bij het deel [supervisor] verander je de parameter enable=no in enable=yes en commentarieer je de regels normal-nice-level=0 en idle-nice-level=19 uit. Daardoor krijgen alle processen een hele lage prioriteitswaarde toegekend zodra een sessie naar de status onderbroken gaat. Het effect daarvan moet je al bij de eerstvolgende gepauzeerde sessie kunnen merken.
Ook voor ARM
Zowel de server als de client van X2Go zijn niet alleen geschikt voor Linux op 32- en 64-bit x86-systemen, maar ook op het door de Raspberry Pi gebruikte ARM-platform. Daardoor is X2Go zowel geschikt om een Raspberry Pi headless te gebruiken, maar af en toe toch via een GUI te kunnen beheren, als om een Pi als goedkope en vooral stille thin-client te gebruiken. Zelfs een Raspberry Pi van de eerste generatie is voor het gebruik als thin-client met X2Go al prima geschikt als je je beperkt tot e-mails, office-taken en het oproepen van normale websites. Voor video's streamen zijn die oudere Pi's helaas te zwak. Een Raspberry Pi 3 is met X2Go daarentegen als een volwaardige thin-client te gebruiken. Hij speelt ook YouTube-video's in een venster af – maar natuurlijk niet full-screen.
Als je dieper in X2Go wilt duiken, kun je op de project-wiki en de bijbehorende community veel meer informatie vinden, bijvoorbeeld over het doorsturen van printers, het gebruik als RDP-proxy of de inzet van een complete X2Go-serverfarm. (nkr)