VNC a Linux: vzdálená plocha

Adam Štrauch 2. 1. 2009

Ať už potřebujeme pouze pomoci někomu s problémem nebo nastavit klikátkem nějakou službu na serveru, budeme potřebovat protokol, který nám zobrazí, co se na druhém konci děje a doručí naše požadavky od nás na druhou stranu. K tomu se v Linuxu nejčastěji využívá VNC a dnes se podíváme, jak na něj.

Co to je?

VNC slouží k přístupu na plochu vzdáleného počítače. Může být použito i k vytvoření tenkých klientů, kdy se na terminál přenáší jen obraz a většina práce zůstává na hlavním serveru, kterému je terminál připojen. Mnohem častější využití je ale vzdálené ovládání domácího počítače nebo serveru. VNC využijí méně zkušení uživatelé, kteří si na příkazové řádce tolik nevěří a nebo třeba i zkušení administrátoři, kteří určitou činnost vykonávají raději na ploše nějakého desktopového prostředí. Zkrátka každý uživatel si svoji cestu najde a tento článek má sloužit jako návod, jak se poprat s jednou z nich.

Historie

První kód kolem VNC se objevil v laboratoři Olivetti & Oracle Research Lab, kterou později získalo AT&T a v roce 2002 uzavřelo. Původní nápad dostal Tristan Richardson a pod taktovkou Andyho Hartera se tým osmi lidí pustil do návrhu a implementace. Před uzavřením laboratoře dala část vývojového týmu dohromady program RealVNC a ten pak uvolnili ve freeware i komerční licenci.

VNC používá protokol RFB, který se stal natolik populární v open source světě, že dnes existuje řada možností, jak ho na Linuxu použít. My se dnes podíváme na programy X11vnc a TightVNC.

Princip

U VNC se využívá způsobu připojení klient-server. Server sdílí svůj výstup a klient se k němu připojuje. K jednomu serveru a dokonce i k jednomu virtuálnímu monitoru může být připojeno několik klientů najednou. V úvodní komunikaci se obě strany dohodnou na způsobu kódování komunikace a poté si začnou vyměňovat data. Ten nejjednodušší způsob kódování, který také podporují všichni klienti, je odesílání malých obdélníků se změněnou oblastí.

Jako první pošle server klientovi celkový obraz plochy a následně po každé změně, ať už se jedná o kurzor myši nebo celé nové okno, odešle „postižený“ obdélník. Jedná se o nejjednodušší způsob kódování a při změně velké plochy roste velmi rychle zatížení linky. Proto různé implementace přicházejí s vlastními způsoby kódování pro odstranění podobných neduhů.

Největším z celého protokolu je jeho „nebezpečnost“. Data včetně přístupového hesla, které lze nastavit, cestují nezašifrovaným kanálem a díky tomu lze komunikaci jednoduše odposlechnout. Některé implementace přidávají i šifrování, ale nám bude stačit použití SSH tunelu.

Možnosti v Linuxu

X11vnc

Pokud se rozhodneme použít VNC pro přístup na domácí počítač, bude se nám hodit spíše připojení k aktuálnímu sezení. K tomu použijeme nejlépe program X11vnc, který s minimální péčí udělá to, co od něj očekáváme. Po spuštění se napojí na X server a spustí VNC server, přes který se do sezení dostaneme. Jediné, co je potřeba mít dobře nastavené, je proměnná prostředí DISPLAY na hodnotu našeho displaye. Většinou tato hodnota bývá „:0“.

X11vnc umí šifrovat spojení sám. Obsahuje množství voleb, ale nám budou stačit jen některé. Takto si vytvoří zašifrovaný VNC server napojení na aktuální sezení.

cx@godie ~ $ x11vnc -ssl -unixpw cx -display :0 

Pokud vynecháme všechny parametry, server se nahodí také, ale bez jakéhokoli zabezpečení.

TightVNC

Zajímavější variantou je třeba TightVNC. Ten umí vytvořit na stroji několik samostatných sezení, ke kterým mohou vzdáleně přistupovat různí uživatelé. Nevýhodou je absence autentizace přes PAM, ale pokud si tento nedostatek odmyslíme, bude nám tento VNC server sloužit přesně tak, jak potřebujeme.

U TightVNC nejsou k dispozici žádné init skripty, a tak distribuce řeší konfiguraci svou cestou. Začneme nahozením a shozením VNC serveru:

cx@godie ~ $ vncserver

New 'X' desktop is godie:2

Starting applications specified in /home/cx/.vnc/xstartup
Log file is /home/cx/.vnc/godie:2.log

cx@godie ~ $ vncserver -kill :2
Killing Xvnc process ID 30268 

Spuštěním programu vncserver se nahodí VNC server na nejbližším nevyužitém display. Sezení, na které koukáme je většinou :0, takže náš VNC server bude na :1. Bude se jednat o naprosto separátní plochu.

Než začneme s podobnými pokusy, musíme nastavit VNC heslo.

cx@godie ~ $ vncpasswd
Using password file /home/cx/.vnc/passwd
Password: 

To se uloží do „~/.vnc/passwd“. V tomto adresáři najdeme také řadu dalších souborů, které se hodí.

godie:1.log      log soubor pro sezení na display :1
godie:1.pid      PID se sezením na display :1
godie:2.log      log soubor pro sezení na display :2
godie:2.pid      PID se sezením na display :2
passwd           heslo pro přístup k VNC serveru
xstartup         skript, který se spustí po nahození sezení 

Každý uživatel tak má vlastní VNC server a spouští se pod jeho právy. Stejně tak si ho každý uživatel může vypnout. Některé distribuce řeší nahazování sami, např. Gentoo, na kterém mám VNC server rozchozený. V souboru /etc/conf.d/vnc najdeme kromě komentářů následující řádky:

cx@godie ~ $ cat /etc/conf.d/vnc
DISPLAYS="cx:1"
VNC_OPTS="-geometry 1024x600 -depth 16" 

Na prvním z nich vyplníme jméno uživatele a za dvojtečku číslo displaye, na kterém chceme spustit jeho VNC server. Více uživatelů oddělíme mezerou. O řádek níž doplníme informace k velikosti obrazovky a barevné hloubce, případně jiné parametry VNC serveru.

Než nastartujeme VNC server, ať už přes příkazovou řádku nebo vlastním či distribučním init skriptem, musíme u uživatelů vytvořit startovací skript, který spustí potřebné programy a hlavně správce oken.

Příklad s openboxem může vypadat třeba takto:

cx@godie ~ $ cat .vnc/xstartup
#!/bin/sh

xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
sh /home/cx/openbox/run.sh
nohup openbox 

Nejdříve spustíme xterm, minimálně se nám bude hodit při ladění našeho sezení. Pak spustíme skript, který spustí další programy. Ten může být stejný, jako používáte teď ve svém správci oken. Nakonec nahodíme nějakého správce oken. V tomto případě je to openbox, ale může se jednat o cokoli jiného.

Pokud máme nastavené heslo a startovací skript, nebrání nám nic v používání VNC serveru.

Šifrování

Zabezpečení přístupu k našemu vzdálenému počítači se dá řešit, jak už bylo řečeno, u samotného VNC serveru nebo např. přes SSH. Vyzkoušíme tedy tu univerzálnější a bezpečnější cestu přes SSH. Princip je takový, že si zpřístupníme port vzdáleného počítače, na kterém máme účet, na lokálním počítači. Toto přesměrování bude šifrované, takže to, co vejde do lokálního portu, se zašifruje a vyleze rozšifrované na původním místě.

widgety

cx@godie ~ $ ssh -L 55901:10.1.3.57:5901 10.1.3.57 

Tímto jsme zpřístupnili port 5901 stroje 10.1.3.57 na lokálním stroji na portu 55901. Místo 55901 můžeme použít i 5901, ale pro odlišení jsem vybral tyto. Když je spojení vytvořeno, můžeme se připojit zabezpečeně i s klientem, který zabezpečení nepodporuje. Tato můžeme tunelovat většinu běžných služeb, které používáme.

cx@delorean:~$ vncviewer localhost::5901
Connected to RFB server, using protocol version 3.8
Enabling TightVNC protocol extensions
Performing standard VNC authentication
Password:
Authentication successful
Desktop name "cx's X desktop (godie:1)"
[...] 

Závěr

VNC se dá využít mnoha způsoby. Výuka, kooperace několika lidí, tencí klienti, hlídání dětí atd. Každopádně se ani na rychlých linkách nedá očekávat, že by VNC mělo stejné odezvy, jako když sedíme přes monitorem. Je potřeba si zkusit různé způsoby kódování (volba -encodings u programu vncviewer) a poté se rozhodnout, jestli to má pro vás smysl nebo ne.

Odkazy

Našli jste v článku chybu?
120na80.cz: Galerie: Čínští policisté testují českou minerálku

Galerie: Čínští policisté testují českou minerálku

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

DigiZone.cz: Ultra HD v praxi a v Portugalsku

Ultra HD v praxi a v Portugalsku

Vitalia.cz: Test dětských svačinek: Tyhle ne!

Test dětských svačinek: Tyhle ne!

Podnikatel.cz: Letáky? Lidi zuří, ale ony stále fungují

Letáky? Lidi zuří, ale ony stále fungují

Vitalia.cz: Muž, který miluje příliš. Ženám neimponuje

Muž, který miluje příliš. Ženám neimponuje

Podnikatel.cz: Tyto pojmy k #EET byste měli znát

Tyto pojmy k #EET byste měli znát

Lupa.cz: Proč jsou firemní počítače pomalé?

Proč jsou firemní počítače pomalé?

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

Podnikatel.cz: ČSSZ posílá přehled o důchodovém kontě

ČSSZ posílá přehled o důchodovém kontě

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

DigiZone.cz: Digi Slovakia zařazuje stanice SPI

Digi Slovakia zařazuje stanice SPI

Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

Vitalia.cz: Antibakteriální mýdla nepomáhají, spíš škodí

Antibakteriální mýdla nepomáhají, spíš škodí

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

Lupa.cz: Cimrman má hry na YouTube i vlastní doodle

Cimrman má hry na YouTube i vlastní doodle

120na80.cz: Nejsilnější alergeny jsou pryč

Nejsilnější alergeny jsou pryč