Vissa användare hyr relativt billiga VPS med Windows för att köra en tjänst för fjärrskrivbord. Det går också att göra detta med Linux utan att behöva ha egen hårdvara i datacentret eller hyra en dedikerad server. Vissa behöver en välbekant grafisk miljö för tester och utveckling eller fjärrskrivbord med stor bandbredd för arbete från mobila enheter. Det finns massor av användningsområden för systemet Virtual Network Computing (VNC) som är baserat på protokollet Remote FrameBuffer (RFB). I denna artikel ska vi berätta hur man kan ställa in det på en virtuell maskin med vilken hypervisor som helst.
Innehåll:
Val av VNC-server
VNC-tjänsten kan integreras i virtualiseringssystemet, där hypervisorn kopplar den till de emulerade enheterna och ingen ytterligare konfiguration behövs. Detta alternativ innebär betydande overhead och stöds inte av alla leverantörer — även i en mindre resurskrävande implementation, där en förenklad abstraktion (framebuffer) överförs till den virtuella maskinen istället för att emulera en riktig grafisk enhet. Ibland kopplas VNC-servern till en aktiv X-server, men detta sätt är mer lämpligt för åtkomst till en fysisk maskin, medan det skapar ett antal tekniska utmaningar på en virtuell. Det enklaste är att installera en VNC-server med en inbyggd X-server. Den kräver inte att fysiska enheter (grafikkort, tangentbord och mus) finns eller emuleras med hjälp av hypervisorn, och passar därför för VPS av alla typer.
Installation och konfiguration
Vi kommer att behöva en virtuell maskin med Ubuntu Server 18.04 LTS i standardkonfiguration. I de officiella repositoryn för denna distribution finns flera VNC-servrar: , , och andra. Vi har valt TigerVNC - en aktuell fork av den icke-understödda TightVNC. Inställningen av andra servrar utförs på liknande sätt. Det krävs också att man väljer ett skrivbordsmiljö: vi anser att det optimala alternativet är XFCE på grund av de relativt låga kraven på datorkraft. De som vill kan installera en annan DE eller WM: här beror allt på personliga preferenser, men valet av programvara påverkar direkt behovet av RAM-minne och processorkärnor.

Installation av skrivbordsmiljön med alla beroenden utförs med följande kommando:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsDärefter måste VNC-servern installeras:
sudo apt-get install tigervnc-standalone-server tigervnc-commonAtt köra den med superanvändarrättigheter är en dålig idé. Skapa en användare och en grupp:
sudo adduser vnc 
Vi lägger till användaren i sudo-gruppen så att han kan hantera administrativa uppgifter. Om det inte finns något behov av detta kan detta steg hoppas över:
sudo gpasswd -a vnc sudoNästa steg är att starta VNC-servern med användarrättigheterna för vnc-användaren för att skapa ett säkert lösenord och konfigurationsfiler i katalogen ~/ .vnc/. Lösenordet kan vara mellan 6 och 8 tecken långt (överskott klipps av). Om nödvändigt kan ett endast visningslösenord sättas, det vill säga utan åtkomst till tangentbordet och musen. Följande kommandon utförs under användaren vnc:
su - vnc
vncserver -localhost no 
Som standard använder RFB-protokollet ett intervall av TCP-portar från 5900 till 5906 — detta kallas för displayerportar, där varje motsvarar en X-server skärm. Portarna är associerade med skärmar från :0 till :6. Den VNC-serverinstans vi har startat lyssnar på port 5901 (skärm :1). Andra instanser kan köras på andra portar med skärmar :2, :3 osv. Innan vidare konfiguration behöver servern stoppas:
vncserver -kill :1Kommandot bör ge ett meddelande som ungefär lyder: "Killing Xtigervnc process ID 18105… success!".
Vid start av TigerVNC körs skriptet ~/ .vnc/ xstartup för att ställa in konfigurationsinställningar. Vi skapar vårt eget skript och gör en säkerhetskopia av det som finns, om det existerar:
mv ~/ .vnc/ xstartup ~/ .vnc/ xstartup.b
nano ~/ .vnc/ xstartupXFCE-skrivbordsmiljön startas med följande xstartup-skript:
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
xrdb $HOME/.Xresources
exec /usr/bin/startxfce4 &Kommandot xrdb är nödvändigt för att VNC-systemet ska läsa in .Xresources-filen i hemkatalogen. Här kan användaren definiera olika inställningar för det grafiska skrivbordet: rendering av tecken, terminalfärger, pekarteman osv. Skriptet måste göras körbart:
chmod 755 ~/ .vnc/ xstartupHär slutförs konfigurationen av VNC-servern. Om den startas med kommandot vncserver -localhost no (under användaren vnc), kan man ansluta med det tidigare angivna lösenordet och se följande bild:

Starta tjänsten via systemd
Manuell start av VNC-servern är dålig för produktionsanvändning, så vi konfigurerar en systemtjänst. Kommandona utförs som root (använd sudo). Först skapar vi en ny enhetsfil för vår server:
sudo nano /etc/systemd/system/vncserver@.serviceSymbolen @ i namnet gör det möjligt att skicka ett argument för att konfigurera tjänsten. I vårt fall ställer det in porten för VNC-displayen. Enhetsfilen består av flera sektioner:
[Unit]
Description=TigerVNC-server
After=syslog.target network.target
[Service]
Type=simple
User=vnc
Group=vnc
WorkingDirectory=\/home\/vnc
PIDFile=\/home\/vnc\/.vnc\/%H:%i.pid
ExecStartPre=-\/usr\/bin\/vncserver -kill :%i > \/dev\/null 2>&1
ExecStart=\/usr\/bin\/vncserver -depth 24 -geometry 1280x960 :%i
ExecStop=\/usr\/bin\/vncserver -kill :%i
[Install]
WantedBy=multi-user.targetDärefter måste vi meddela systemd om den nya filens existens och aktivera den:
sudo systemctl daemon-reload
sudo systemctl enable vncserver@1.serviceSiffran 1 i namnet anger skärmens nummer.
Vi stoppar VNC-servern, startar den som en tjänst och kontrollerar status:
# от имени пользователя vnc
vncserver -kill :1# с привилегиями суперпользователя
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1Om tjänsten är aktiv ska vi få ungefär det här resultatet.

Anslutning till skrivbordet
Vår konfiguration använder ingen kryptering, så nätverkspaket kan fångas av illvilliga aktörer. Dessutom hittar man ofta , så det är inte säkert att öppna dem för tillgång från internet. För en säker anslutning på den lokala datorn måste vi paketera trafiken i en SSH-tunnel och sedan konfigurera VNC-klienten. På Windows kan du använda en grafisk SSH-klient (t.ex. PuTTY). För säkerhet lyssnar TigerVNC på servern endast på localhost och är inte direkt tillgänglig från offentliga nätverk:
sudo netstat -ap |more 
I Linux, FreeBSD, OS X och andra UNIX-liknande operativsystem sker tunneln från klientdatorn med hjälp av ssh-verktyget (sshd måste vara aktivt på VNC-servern):
ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ipOptionen -L kopplar port 5901 för fjärranslutningen till port 5901 på localhost. Alternativet -C aktiverar komprimering, och -N talar om för ssh-verktyget att ingen fjärrkommando ska utföras. Alternativet -l ställer in inloggningen för fjärråtkomst.
När tunneln är konfigurerad på den lokala datorn måste VNC-klienten startas och en anslutning göras till värden 127.0.0.1:5901 (localhost:5901), med det tidigare angivna lösenordet för att få åtkomst till VNC-servern. Nu kan vi säkert interagera via en krypterad tunnel med XFCE-skrivbordsmiljön på VPS. På skärmdumpen i terminalemulatorn körs top-verktyget för att visa den minimala resursförbrukningen på den virtuella maskinen. Framtiden beror på användarapplikationerna.

Att ställa in och konfigurera en VNC-server i Linux kan göras på praktiskt taget vilken VPS som helst. Det behövs ingen dyr och resurskrävande konfiguration med en videoadapter-emulator eller köp av kommersiella licenser för programvara. Utöver den metod vi har diskuterat finns det andra alternativ: starta i demonläge (via /etc/rc.local) vid systemstart eller på begäran via inetd. Den sista metoden är intressant för att skapa flermedlemskonfigurationer. Internet-superservern kommer att starta VNC-servern och koppla en klient till den, medan VNC-servern skapar en ny skärm och startar en session. För autentisering inuti sessionen kan man använda en grafisk displayhanterare (till exempel, ), och efter att klienten kopplar bort kommer sessionen att stängas och alla program som körs på skärmen avslutas.
Källa: habr.com
