{{{#!vorlage Wissen [:Autostart: Automatischer Start von Programmen] [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis(3)]] Mit '''VNC''' kann ein entfernter Rechner bedient werden. VNC ist die Abkürzung für [wikipedia:Virtual_Network_Computing:Virtual Network Computing] und basiert auf dem [github:rfbproto/rfbproto:RFB-Protokoll]. Praktisch wird der Bildschirminhalt eines anderen Rechners auf dem lokalen Rechner angezeigt. Maus- und Tastatureingaben werden vom lokalen Rechner (hier läuft der Client, auch ''Viewer'' genannt) zurück an den entfernten Rechner (dort auf dem ''Host'' läuft der ''VNC-Server'') gesendet. Es existieren zwei unterschiedliche Konzepte für VNC-Server. Der übliche Server (z.B. x11vnc) bietet den tatsächlichen Bildschirm des Host-Rechners zur Anwenderunterstützung an. Weil am entfernten Rechner Tastatur und Maus benutzbar bleiben, ist eine Absprache empfehlenswert. Eine zweite Gruppe von Server-Programmen (z.B. tightvnc) ermöglicht die Benutzeranmeldung an virtuelle [:XServer:Sitzungen], ähnlich dem Terminalserver-Konzept. Server- und Viewer-Programme für VNC gibt es für alle gängigen Betriebssysteme. Daher werden viele IT-Dienstleistungen mit VNC durchgeführt. Ähnliche Einsatzzwecke haben der proprietäre [:TeamViewer:], [wikipedia:Remote_Desktop_Protocol:RDP] und der NX-Nachfolger [:X2Go:]. Es gibt drei verschiedene Wege, um die Verbindung zwischen den Rechnern aufzubauen: 1. Beim traditionellen Weg lauscht der VNC-Server auf TCP-Port `5900`. Er bietet dort sein Display `0` an. Weitere Displays können über zusätzliche Ports angeboten werden. Diese sind meistens `590n`, wobei `n` die Displaynummer ist. Falls der Host hinter einer Firewall (z.B. einem Hardware-Router) erreichbar sein soll, müsste der auf den entsprechende TCP-Port [:Portweiterleitung:weitergeleitet] werden. Bei von außen (= über das Internet) erreichbaren Rechnern wäre dies ohne verschlüsselte Verbindung grob fahrlässig. Für die einfache Anwenderunterstützung ist dieser Weg daher nicht zu empfehlen. 1. Beim umgekehrten Weg lauscht der Client auf eingehende Anfragen von hilfsbedürftigen Anwendern. Diese Benutzer starten dazu einen VNC-Server, der sich dann mit dem wartenden Client auf TCP-Port `5500` verbindet. Für solche ''Reverse-Connections'' muss die IP-Nummer oder der Hostname des Client-Rechners bekannt sein. Das Programme [https://www.uvnc.com/products/uvnc-sc.html UVNC SC] {en} (nur für Windows) unterstützen diesen Verbindungsweg. 1. Beim indirekten Weg verbinden sich sowohl Server als auch Client zu einem dritten, offen erreichbaren Rechner. Dieser stellt dann die Verbindung her. {{{#!vorlage Warnung VNC-Verbindungen sind grundsätzlich unverschlüsselt! Sämtliche Passwörter werden im Klartext übertragen. Am Ende des Artikels wird beschrieben, wie man VNC-Verbindungen mit SSH oder VPN absichern kann. }}} = Server = Das Server-Programm läuft auf dem Host-Rechner, auf dessen Desktop zugegriffen werden soll. Hierbei handelt es sich also um den Hilfesuchenden. Einige Distributionen bieten vorinstallierte VNC-Server an. Deren Einrichtung ist im nächsten Abschnitt beschrieben. [[Anker(vino)]] [[Bild(./vnc_vino-preferences.png, 300, align=right)]] [[Bild(./vnc_vino-preferences_Xu1404.png, 300, align=right, alt="screenshot", title="vino-preferences in Xubuntu 14.04")]] == GNOME == GNOME bringt das Programm [https://wiki.gnome.org/action/show/Projects/Vino Vino] {en} als VNC-Server mit. Dieses bietet den Bildschirm der Sitzung an, aus der er gestartet wurde. Die Konfiguration erfolgt durch das Programm '''vino-preferences''', das über den Begriff ''"Freigabe der Arbeitsfläche"'' zu finden ist. Unter dem Punkt ''"Sicherheit"'' sollte mindestens eine der beiden Sicherheits-Optionen aktiviert sein – entweder nur auf Bestätigung und oder mit Passworteingabe. Wenn im Autostart [1] ''"Entfernter Desktop"'' nicht aktiviert ist, wird der Vino-Server nicht gestartet und eine Fernwartung ist nicht möglich. Den Server kann man dann auch manuell über das Terminal starten: {{{#!vorlage Befehl /usr/lib/vino/vino-server }}} Bei aktivierten 3D-Effekten können Darstellungsprobleme auftreten. So bekommt der VNC-Client nur eine Bildschirmansicht übertragen, die sich bei Maus- und Tastatureingaben nicht mehr verändert. Bei Desktop-Umgebungen, die einen 3D-Desktop zwingend voraussetzen ([:Unity:], [:GNOME:]), empfiehlt sich eine Sitzung mit einer 2D-Oberfläche (soweit vorhanden). Speziell bei GNOME heißt diese Variante [:GNOME_Flashback:]. Dies verbessert die Geschwindigkeit und Stabilität von VNC deutlich. Auch mangelhafte Grafikkarten-Treiber können Darstellungsproblem verursachen. Bei Xfce bzw. Xubuntu kann man den Vino-Server über ''"Einstellungen -> System -> Sitzung und Startverhalten -> Automatisch gestartete Anwendungen -> Hinzufügen"'' zu den Startprogrammen hinzufügen (siehe auch [:Xfce-Einstellungen:]). [[Anker(krfb)]] == KDE == [[Bild(./krfb.png, 300, align=right)]] Die KDE Applications bieten [https://www.kde.org/applications/system/krfb/ krfb] {en} als VNC-Server. Das Paket kann nachinstalliert [2] werden: {{{#!vorlage Paketinstallation krfb, universe }}} Nach der Installation ist er unter * ''"K-Menü -> Internet -> Krfb - Arbeitsfläche freigeben"'' zu finden. Um den Server zu starten, muss eine Einladung ausgesprochen werden. Im nächsten Schritt erhält man die IP des Host-Rechners und ein Passwort. Beides wird von einem Client benötigt, der sich verbinden möchte (siehe auch [#KDE-2 krdc]). == Manuelle Einrichtung == {{{#!vorlage Experten Auf Systemen mit Fenstermanagern, die keinen eigenen VNC-Server mitbringen, kann ein solcher zusätzlich installiert werden. Auch wenn die mitgelieferten VNC-Server für bestimmte Anforderungen nicht ausreichen, kann dieser Weg gewählt werden. Der folgende Abschnitt richtet sich vor allem an fortgeschrittene Benutzer. }}} Im folgenden sind Implementierungen von VNC-Servern aufgeführt. Von diesen gibt x11vnc einen tatsächlichen Bildschirm wieder und die anderen erzeugen jeweils virtuelle X-Sitzungen. Häufig verwenden die Programme dieselben Konfigurationsdateien. === x11vnc === x11vnc gibt den aktuellen Bildschirm des Hosts-Rechners wieder. Dies ermöglicht den VNC-Zugriff auf die grafische Benutzeranmeldung nach dem Booten. Die Installation erfolgt mit {{{#!vorlage Paketinstallation x11vnc, universe }}} Nach der Installation ist ein Passwort für den VNC-Server zu setzen: {{{#!vorlage Befehl sudo x11vnc -storepasswd KENNWORT /etc/x11vnc.pass }}} Das weitere Vorgehen zum Autostart findet sich [#VNC-Server-bei-jedem-Bootvorgang-starten weiter unten] im Artikel. Ein Schnelltest kann z. B. mit folgendem Kommando im Terminal erfolgen: {{{#!vorlage Befehl sudo x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/myuser/.vnc/passwd -rfbport 5900 -shared }}} Hierbei ist es '''wichtig''', den im jeweiligen Fall gültigen Pfad bzw. Dateinamen zur ''Passwortdatei'' hinter der Option -rfbauth einzutragen. === TightVNC === [https://www.tightvnc.com/ TightVNC] {en} führte als Neuerung eine Dateiübertragung ins VNC-Protokoll ein. Ältere Versionen bereiteten teilweise Probleme (bspw. Abstürze, wenn vom Vollbildmodus zurückgeschaltet wird). Daher sind mehrere Abspaltungen (Forks) entstanden, die diese Probleme nicht haben. {{{#!vorlage Paketinstallation tightvncserver, universe xtightvncviewer, universe tightvnc-java, universe, optional für Java-Clients }}} [[Bild(./tigervnc_logo.png, 48, align=right)]] === TigerVNC === [https://tigervnc.org/ TigerVNC] {en} ist eine Abspaltung von TightVNC, die noch aktiv gepflegt wird. Die Installation und die Nutzung wird in [:Howto/TigerVNC:] beschrieben. === UltraVNC === [https://www.uvnc.com/ UltraVNC] {en} ist ebenfalls eine Abspaltung von TightVNC und kommt auf Windows- und Mac-OS-X-Rechnern zum Einsatz (siehe [heise:netze/tools/fernwartung/:heise tools - Fernwartung] {de}). Eine Linux-Version ist nicht vorhanden. [[Anker(vnc)]] === RealVNC === [https://www.realvnc.com/ RealVNC] {en} wird von den ursprünglichen Entwicklern des VNC-Protokolls angeboten. Auf diesen Server kann auch mit einem Webbrowser als Klienten zugegriffen werden. Die in den Paketquellen enthaltene letzte freie Version 4.x ist von Anfang 2006. Folgende Pakete müssen installiert werden: {{{#!vorlage Paketinstallation vnc4server, universe vnc-java, multiverse, optional für Java-Clients }}} === Anpassungen für Ubuntu-Server === Falls ein VNC-Server auf einem Ubuntu-Server installiert werden soll, muss zusätzlich folgendes Paket installiert werden. {{{#!vorlage Paketinstallation xfonts-base }}} === Konfiguration === Damit eine Verbindung hergestellt werden kann, muss noch im Terminal [3] ein Passwort eingestellt werden. Es ist darauf zu achten, einen lokalen Benutzer zu verwenden. {{{#!vorlage Befehl vncpasswd }}} ==== KDE ==== Um einen VNC-Server mit KDE / Plasma parallel zu einer bestehenden Plasma-Session nutzen zu können, empfiehlt sich folgende Konfigurationsdatei '''~/.vnc/xstartup''' {{{ export XKB_DEFAULT_RULES=base export QT_XKB_CONFIG_ROOT=/usr/share/X11/xkb kstart5 plasmashell & dbus-launch startplasma-x11 }}} === Starten und Stoppen === Um den VNC-Server zu starten, wird folgender Befehl im Terminal eingegeben (man sollte sich die angezeigte Displaynummer merken!): {{{#!vorlage Befehl # Für VNC und TigerVNC vncserver # Für tightvncserver tightvncserver }}} Der VNC-Server sollte nicht mit [:kill:] beendet werden. Unter Angabe der Displaynummer bietet der VNC-Server eine eigene Routine zum Beenden: {{{#!vorlage Befehl # Für VNC und TigerVNC vncserver -kill : # Für tightvncserver tightvncserver -kill : }}} = Viewer = Das Viewer-Programm läuft auf dem Client-Rechner, der auf den entfernten Server zugreift. Dies geschieht meist mittels eines speziellen VNC-Viewers. Einige Server lassen es auch zu, mit einem Webbrowser auf den entfernten Desktop zuzugreifen. == Unity / GNOME == === Remmina === Ab [:Oneiric:Ubuntu 11.10] wird [:Remmina:] empfohlen. Es ist standardmäßig installiert und lässt sich in Unity mit dem Begriff ''"Zugriff auf entfernte Arbeitsflächen"'' starten. === Vinagre === [[Bild(./vinagre.png, 250, right)]] [:Vinagre:] ist ein VNC-Client, der erstmals in [:Hardy:Ubuntu 8.04] integriert wurde. Man findet das Programm bei Ubuntu-Varianten mit einem Anwendungsmenü unter ''"Internet -> Betrachter für entfernte Desktops"''. Vinagre kann gleichzeitig mehrere Verbindungen mit verschiedenen VNC-Servern aufbauen. Diese werden in der Bedienoberfläche als Reiter (Tabs) dargestellt und können als Lesezeichen gespeichert werden. Passwörter für VNC-Server werden im GNOME-Schlüsselbund gespeichert. Vinagre kann über [:Avahi:] im lokalen Netzwerk nach verfügbaren VNC-Servern suchen. [[Anker(krdc)]] == KDE == Um sich zu einem System zu verbinden, auf dem ein VNC-Server läuft, ist in der Standardinstallation von Kubuntu das Programm [https://www.kde.org/applications/internet/krdc/ KRDC] {en} enthalten. [[Bild(./krdc.png, 250, align=right)]] Um es manuell zu installieren, wird das folgende Paket benötigt: {{{#!vorlage Paketinstallation krdc, universe }}} Nach der Installation ist es unter ''"K-Menü -> Internet -> Krdc - Verbindung zu Fremdrechner"'' zu finden. Neben VNC unterstützt es auch RDP-Verbindungen, wie sie beispielsweise unter Windows für die Desktop-Freigabe benutzt werden. Um eine Verbindung herzustellen, muss in das Eingabefeld des Programms die IP-Adresse des Systems eingetragen werden, zu dem man sich verbinden möchte. Im davor liegenden Auswahlmenü muss gewählt werden, ob es sich um eine VNC- oder eine RDP-Verbindung handelt. Nach Klicken auf ''"Verbinden"'' wird versucht, das andere System zu erreichen. Wurde ein Passwort vergeben, so muss es in das erscheinende Dialogfeld eingetragen und bestätigt werden. == Xfce == Benutzer von [:Xfce:] können [:Remmina:] als Client verwenden. == LXDE == Auch hier ist [:Remmina:] der Client der Wahl. == Weitere == === noVNC (BrowserClient) === [[Bild(./novnc1.png, 250, align=right)]] [[Bild(./novnc2.png, 250, align=right)]] [https://github.com/novnc/noVNC noVNC] {en} ist ein HTML5 VNC Client, der mit jedem modernen Browser funktioniert (inkl. mobile Browser von iOS und Android). Zusätzlichen Browser Plugins/Addons sind nicht notwendig. Serverseitig muss lediglich ein VNC Server laufen, auf dem sich noVNC verbinden kann. {{{#!vorlage Paketinstallation novnc, universe }}} noVNC starten auf dem Server starten (VNC-Server muss aktiv sein): {{{#!vorlage Befehl /usr/share/novnc/utils/launch.sh --vnc : # z.B. /usr/share/novnc/utils/launch.sh --vnc 192.168.1.1:5900 }}} Beispielausgabe: {{{ Warning: could not find self.pem Starting webserver and WebSockets proxy on port 6080 WebSocket server settings: - Listen on :6080 - Flash security policy server - Web server. Web root: /home//noVNC - No SSL/TLS support (no cert file) - proxying from :6080 to localhost:5900 Navigate to this URL: http://192.168.1.1:6080/vnc.html?host=server&port=6080 Press Ctrl-C to exit }}} === SSVNC === [http://www.karlrunge.com/x11vnc/ssvnc.html SSVNC] {en} ist eine Abspaltung von TightVNC und in den offiziellen Paketquellen enthalten. Die Verbindung wird grundsätzlich über TLS bzw. SSL verschlüsselt. Nach der Installation steht das Programm bei Ubuntu-Varianten mit einem Anwendungsmenü über den Eintrag ''"SSL/SSH VNC Viewer"'' zur Verfügung. Weitere Details sind der Homepage zu entnehmen. {{{#!vorlage Paketinstallation ssvnc, universe }}} == Kommandozeile == Auf der Kommandozeile steht der Befehl `vncviewer` aus dem Paket '''xvncviewer''' zur Verfügung. Dieses ist bei einer Standardinstallation von Ubuntu bereits vorinstalliert, kann bei Bedarf wie folgt installiert werden: {{{#!vorlage Paketinstallation xvnc4viewer, universe }}} Die Verbindung zu einem VNC-Server kann mit dem Befehl: {{{#!vorlage Befehl # Für VNC und TigerVNC vncviewer host:display # Für TightVNC xtightvncviewer host:display [OPTIONEN] }}} hergestellt werden. `host` ist dabei der Hostname oder die IP-Adresse des Servers, `display` die Nummer des angesprochenen Displays - in der Regel `0`. Ist ein Passwort erforderlich, wird es nach der Verbindungsherstellung abgefragt. Falls der vncviewer nicht aus der Kommandozeile heraus gestartet wird (sondern beispielsweise aus einem Skript), wird das Passwort in einem kleinen Eingabefenster eingegeben. Damit nicht mehrere Benutzer gleichzeitig auf den VNC-Server zugreifen können, kann im TightVNC-Viewer die Option `-noshare` gesetzt werden. [[Anker(vncoverssh)]] = Gesicherte Verbindung über SSH = Um eine sichere VNC-Verbindung zu aufzubauen, kann man einen verschlüsselten [:SSH:]-Tunnel benutzen. Voraussetzung hierfür ist, dass eine SSH-Verbindung zwischen Host und Client hergestellt werden kann. == Automatisch durch den VNC-Viewer == Das Programm vncviewer kann selbst einen SSH-Tunnel herstellen: {{{#!vorlage Befehl vncviewer -via user@host localhost:0 }}} == Manuell über SSH == Alternativ kann man auch zunächst den Tunnel auf dem Client-Rechner aufbauen. Danach wird die VNC-Verbindung aufgerufen: {{{#!vorlage Befehl ssh -4 -N -L 5900:localhost:5900 user@host vncviewer localhost:0 }}} Bei beiden Methoden steht `host` für den Hostnamen oder die IP-Adresse des Rechners mit dem VNC-Server und `user` für den Benutzernamen, mit dem dort die SSH-Anmeldung erfolgen soll. Die VNC-Verbindung erfolgt nicht zum Host, sondern zum Eingang des SSH-Tunnels auf dem lokalen Client `localhost`. Wenn hinter der Server-IP-Adresse mehrere Rechner laufen, z. B. wenn über das Internet gezielt hinter einem privaten Internet-Router unterschiedliche Rechner angesprochen werden sollen, so ist zunächst das [:Portweiterleitung:Port-Forwarding] am Router entsprechend einzurichten. So können beispielsweise die eingehenden SSH-Ports 22001, 22002 usw. an den Standard-SSH-Port 22 des jeweiligen Rechners weitergeleitet werden. Unter dieser Konfiguration kann es passieren, dass das `vncviewer -via`-Kommando nicht mehr funktioniert; dann muss man mit dem expliziten SSH-Tunnel-Aufbau arbeiten: {{{#!vorlage Befehl ssh -4 -f -L 5900:localhost:5900 -p 22001 user@host sleep 10 vncviewer localhost:0 }}} Die Option `-f` sorgt dafür, dass der SSH-Tunnel, nachdem er aufgebaut wurde, im Hintergrund ausgeführt wird. Um den Tunnel automatisch wieder zu schließen, wenn er nicht mehr benötigt wird, wird im Gegensatz zum weiter oben genannten Tunnelaufbau die Option `-N` (=keinen Befehl auf Server-Seite ausführen) weggelassen und stattdessen serverseitig `sleep 10` (=mache 10 Sekunden lang nichts) ausgeführt. Da aber der Tunnel auch von dem `vncviewer`-Kommando belegt ist, schließt sich der Tunnel erst, wenn die 10 Sekunden vorbei sind __und__ der `vncviewer` beendet wurde. (Quelle: [https://unix.stackexchange.com/a/83812] {en}) == Authentifizierung über Public Keys == Damit die vorgenannten Methoden funktionieren, ist ein Benutzerkonto auf dem Host-Rechner notwendig. Eine Alternative besteht in der Benutzung von "Public keys". Dazu sind [:SSH#Authentifizierung-ueber-Public-Keys: SSH-Schlüsselpaare] notwendig. Der oder die public-keys der zugelassenen VNC-Benutzer sind auf dem Host in der Datei '''/home/user/.ssh/authorized_keys''' abzuspeichern. Damit der Nutzer des public-key nur auf den VNC-Server zugreifen kann, müssen dessen Rechte in der Datei '''/home/user/.ssh/authorized_keys''' noch beschränkt werden (s.a. [ubuntu_doc:community/VNC#Let_other_people_view_your_desktop:VNC] {en}): {{{ command="/bin/sleep 4294967295",no-agent-forwarding,no-pty,no-user-rc,no-X11-forwarding,permitopen="localhost:5900" PUBLIC_KEY }}} Danach hat der Besitzer des passenden private-keys [#Automatisch-durch-den-VNC-Viewer automatisch] oder [#Manuell-ueber-SSH manuell] Zugriff auf den VNC-Server. Die Anmeldung muss dabei auch als Benutzer `user` erfolgen, da sonst nicht auf die Datei '''/home/user/.ssh/authorized_keys''' zugegriffen werden kann, in welcher der public-key gespeichert ist. == VNC-Server auf lokale Verbindungen beschränken == Wenn die Verbindung zum VNC-Server über den SSH-Tunnel klappt, kann man noch einen Schritt weitergehen und den VNC-Server auf lokale Verbindungen beschränken. Damit wird die Benutzung des SSH-Tunnels erzwungen und Angreifer können sich nicht mehr direkt mit dem VNC-Server verbinden. TightVNC startet man dazu mit der zusätzlichen Option `-localhost`: {{{#!vorlage Befehl tightvncserver -localhost }}} Für Vino kann man die Einstellung wie folgt setzen (Information übernommen von [ubuntu_doc:community/VNC/Servers#vino:vino] {en}): {{{#!vorlage Befehl gsettings set org.gnome.Vino network-interface lo }}} = Reverse VNC-Verbindung = Hier initiiert der Server den Verbindungsaufbau zum Viewer. Diese Art ist hilfreich, wenn der Hilfesuchende keine Netzwerkkenntnisse besitzt und zudem hinter einem Router sitzt. Die Einrichtung ist sehr einfach, da der Hilfesuchende nur ein Paket zu installieren hat. Hier werden drei mögliche Wege zu einer reversen VNC-Verbindung beschrieben – es gibt noch einige mehr. {{{#!vorlage Experten Bei manchen Arten von Reverse-Verbindungen hat nicht nur der Helfer Zugriff auf das System des Hilfesuchenden, sondern auch der Hilfesuchende Zugriff auf das System des Helfers. Eine einfache Schutzmaßnahme ist zum Beispiel, als Helfer eine [:Gastsitzung:] zu nutzen. }}} == DynDNS == Da im Regelfall keine statische IP-Adresse vorhanden ist, muss man zuerst einen DynDNS-Account einrichten. Zudem sollte der Helfende wissen, wie man sich, wenn man hinter einem Router sitzt, eine korrekte [:Portweiterleitung:] oder Portfreischaltung einrichtet. Meistens muss man – je nach Routermodell – Einstellungen für DynDNS im Router vornehmen. Zu diesem Zwecke sollte man das Handbuch des Routers konsultieren. Wenn man diesen Weg beschreiten will, bitte weiterlesen unter [#Weitere-Schritte Weitere Schritte]. == Dynamische IP-Adresse === Hier muss man keine DynDNS-Adresse einrichten, dafür hat man den Nachteil, dass man vor jeder Verbindung die IP des Helfenden bzw. die des vorhandenen Routers herausfinden muss - z.B. bei [https://www.wieistmeineip.de/ wieistmeineip.de] {de}. Der Helfende muss dann jedes mal dem Hilfesuchenden mitteilen, wie die IP lautet. Dieser Umstand wird durch DynDNS umgangen. Der Helfer muss sich auch hier mit [:Portweiterleitung:] oder Portfreischaltung auseinandergesetzt haben, wenn er hinter einem Router sitzt. Eine DynDNS-Einrichtung am Router entfällt hier natürlich. === Weitere Schritte === Folgende Pakete müssen installiert sein: * Beim Helfenden das Paket: {{{#!vorlage Paketinstallation xvnc4viewer }}} * Beim Hilfesuchenden das Paket: {{{#!vorlage Paketinstallation x11vnc }}} Nach der Installation und für jede weitere Verbindung muss der Helfende immer vor dem Hilfesuchenden in einem Terminal folgenden Befehl eingeben, da sonst die Verbindung nicht aufgebaut werden kann: {{{#!vorlage Befehl xvnc4viewer -listen 5500 }}} Der Helfer hört kontinuierlich auf Port `5500`, der im Router freigeschaltet sein muss, ob jemand bei ihm anklopft. Der Hilfesuchende sollte dann mit dem Befehl anklopfen: * bei Verwendung von DynDNS: {{{#!vorlage Befehl x11vnc -connect name.dyndns.org }}} * bei statischer IP-Adresse: {{{#!vorlage Befehl x11vnc -connect 123.456.789.123 }}} Die IP-Adresse `123.456.789.123` ist nur ein Beispiel und muss durch diejenige ersetzt werden, die der Helfer bei sich herausgefunden hat. Diese kann er z.B. über [https://www.wieistmeineip.de/ wieistmeineip.de] {de} ermitteln. Dort wird gegebenenfalls die IP des Routers angezeigt; dies ist dann die richtige. Nun sollte sich ein Fenster öffnen, auf dem der Helfer den Desktop des Hilfesuchenden sehen und steuern kann. == Weitere Tipps und Optionen == === Anlegen eines Starters === Wenn die erste Verbindung steht, ist es meist praktisch, dem Hilfesuchenden einen Starter auf den Desktop zu legen, der den Befehl im Terminal für ihn ausführt. Oftmals werden Befehle im Terminal seitens des Hilfesuchenden vergessen, mit Tippfehlern eingegeben oder es besteht eine Hemmschwelle in der Benutzung des Terminals. Außerdem ist dieser Weg am wenigsten störanfällig. === Verkleinerte Darstellung ohne Rollbalken === Es ist zu empfehlen, sich den Desktop etwas verkleinert darstellen zu lassen, da der Desktop des Hilfesuchenden manchmal nicht ganz auf den Bildschirm des Helfers passt. Das kann zwar zu minimalen Verzerrungen in der Darstellung führen, ist beim Arbeiten jedoch meist praktischer. Dazu sollte der Hilfesuchende zum Anklopfen folgenden Befehl mit der zusätzlichen Option `-scale X/Y` eingeben: * bei Verwendung von DynDNS: {{{#!vorlage Befehl x11vnc -connect name.dyndns.org -scale 9/10 }}} * bei statischer IP-Adresse: {{{#!vorlage Befehl x11vnc -connect 123.456.789.123 -scale 9/10 }}} Dadurch wird der Bildschirm des Hilfesuchenden vor der Übertragung auf 9/10 verkleinert. Statt 9/10 kann man jeden anderen Wert eingeben, z.B. 2/3, wenn der Desktop auf 2/3 verkleinert dargestellt werden soll. === Volle Farbdarstellung === Die aufgebaute Verbindung hat meist nur eine sehr geringe Farbdarstellung, damit VNC möglichst wenige Daten übermitteln muss. Dies ergibt Sinn, wenn die Verbindung relativ langsam ist. Will man sich alle Farben beim Hilfesuchenden anzeigen lassen, muss man die Option `-FullColor` beim Helfenden setzen. Entsprechend sieht der Befehl dann so aus: {{{#!vorlage Befehl xvnc4viewer -FullColor -listen 5500 }}} Nun wird der Bildschirmaufbau langsamer, jedoch mit allen Farben erfolgen. Noch mehr Optionen, Beispiele und Erklärungen findet man in den [:man:Manpages] von x11vnc und xvnc4viewer. = Reverse VNC-Verbindung über SSH-Verbindung = Auch diese Methode verfolgt das Ziel, den Konfigurationsaufwand für den Hilfesuchenden so gering wie möglich zu halten. Deshalb baut der Hilfesuchende hier mit dem schon vorinstallierten SSH-Client eine normale SSH-Verbindung zum Helfer auf. Durch diese wird dann eine umgekehrte VNC-Verbindung getunnelt. Folgende Schritte sind dabei bei Hilfesuchenden und Helfer vorzunehmen: == Vorbereitungen auf der Seite des Helfers == 1. Sofern der Helfer hinter einem Router sitzt, ist dort eine [:Portweiterleitung:] für die SSH-Verbindung einzurichten. Läuft eine Firewall auf dem System des Helfers, so muss diese so konfiguriert werden, dass sie die SSH-Anfrage des Hilfesuchenden durchlässt. 1. Installation des [:SSH#Der-SSH-Server: SSH-Servers] 1. Installation des '''vncviewers''': {{{#!vorlage Paketinstallation xvnc4viewer }}} 1. [:Benutzer_und_Gruppen: Anlegen eines Benutzers], mit dem sich der Hilfesuchende dann per SSH auf dem Rechner des Helfers anmelden kann 1. Ermittlung der [#Dynamische-IP-Adresse eigenen IP] oder alternativ Einrichtung von [#DynDNS DynDNS] == Vorbereitungen auf der Seite des Hilfesuchenden == * Installation des VNC-Servers: {{{#!vorlage Paketinstallation x11vnc }}} == Aufbau der Verbindung == * Helfer: 1. Start des SSH-Servers: {{{#!vorlage Befehl sudo /etc/init.d/ssh restart }}} 1. Start des VNC-Viewers im Listen-Modus:{{{#!vorlage Befehl vncviewer -listen }}} * Hilfesuchender: 1. Start der SSH-Verbindung mittels SSH-Client und Verbindung zum lauschenden VNC-Viewer: {{{#!vorlage Befehl ssh -NfL 5500:localhost:5500 hilflos@IP-ADRESSE-HELFER sleep 2 && x11vnc -connect_or_exit localhost:5500 -scale 9/10 }}} Der erste Teil des Befehls startet vom System des Hilfesuchenden eine SSH-Verbindung zum System des Helfers. Diese SSH-Verbindung läuft im Hintergrund und benötigt keine Shell(`-Nf`). Mit `-L` wird der angegebene Port an den Server weitergeleitet. Durch `sleep 2` wird die Verbindung aufrecht erhalten, bis die VNC-Verbindung "übernimmt". Der Teil rechts vom `&&` verbindet den VNC-Server des Hilfesuchenden über die SSH-Verbindung mit dem lauschenden VNC-Viewer des Helfers. Das Elegante an dieser Lösung ist, dass mit dem Schließen des VNC-Viewers auf der Helferseite zugleich der VNC-Server und die SSH-Verbindung auf Seiten des Hilfesuchenden sauber geschlossen werden. Die Option `-scale 9/10` sorgt dafür, dass der entfernte Desktop beim Helfer etwas verkleinert dargestellt wird und kann je nach Auflösung angepasst bzw. weggelassen werden. = Server-Informationen ermitteln = Wenn der Hilfesuchende über das Internet von einem Helfer unterstützt werden soll, benötigt der Helfer (Client) Informationen über den Server des Hilfesuchenden. Diese muss ihm der Hilfe-Suchende mitteilen. Notwendig sind - sofern nicht DynDNS verwendet wird - IP-Adresse und Display-Nummer. Letztere kann von `0` abweichen, wenn auf dem Server-Rechner z.B. mehrere Benutzer angemeldet sind. Um es dem Hilfe-Suchenden möglichst einfach zu machen, kann für diesen (im Voraus) einen Programmstarter im Menü oder Panel angelegt werden, der die Informationen ermittelt und ausgibt. Dieser Starter ruft folgendes ausführbares Skript auf: {{{#!code bash #!/bin/bash DISPLAY_NUMBER=`echo $DISPLAY | cut -c 2` IP_ADDRESS=`wget http://checkip.dyndns.com/ -O - 2>/dev/null | grep "Current IP Address" | cut -d ":" -f 2- | sed 's###g' | sed 's/ //'` zenity --info --text "IP-Adresse: $IP_ADDRESS\nDisplay-Nummer: $DISPLAY_NUMBER" --title "VNC-Info" }}} Dazu muss [:Zenity:] beim Hilfesuchenden installiert sein. = Problembehebung = == Tastaturproblem == Unter [:Xfce:] (Xubuntu) wird in der Standard-Einstellung das Tastatur-Layout nicht korrekt übertragen. Das Problem wird behoben, indem man im Hauptmenü ''"Einstellungen -> Tastatur -> Tastaturbelegung"'' aufruft, dort die Option ''"Systemweite Einstellungen benutzen"'' deaktiviert und bei ''"Tastaturbelegung"'' die gewünschte Sprache einstellt. Nach einem Neustart des VNC-Servers sollte das Tastaturproblem behoben sein. === Tastaturbelegung des Betrachters entspricht in Teilen nicht der Tastaturbelegung auf der entfernten Arbeitsfläche === Es ist möglich, dass Tastatureingaben auf dem Betrachter andere (nicht gewollte) Tastaturausgaben auf der entfernten Arbeitsfläche auslösen. Je nach Betrachter ist es möglich dies über eine separate Zuordnungsdatei aufzulösen. Bei Remmina erfolgt dies über die Datei '''~/.config/remmina/remmina.keymap'''. Siehe hierzu diese [:Remmina/#Tastaturbelegung-des-Betrachters-entspricht-in-Teilen-nicht-der-Tastaturbelegung-auf-der-entfernten-Arbeitsflaeche:Beschreibung] im Wiki. == Keine Panels in Unity == Wenn bei den anderen VNC-Servern die Leisten in [:Unity:] fehlen, kann man `x11vnc` als VNC-Server verwenden. Dieser leitet die komplette X11-Ausgabe von Display `:0` direkt auf VNC um. {{{ x11vnc -storepasswd x11vnc -usepw -display :0 }}} Je nach Anwendungsfall nützlicher oder störender Nebeneffekt ist, dass man die Ein- und Ausgaben sowohl auf dem fernsteuernden als auch auf dem ferngesteuerten Rechner beobachten kann. == Datenvolumen/Bandbreite zu hoch == Bei z.B. dem VNC-Viewer xtightvncviewer kann man unter anderem die Option `-compresslevel 9` für die höchste Kompressionsstufe setzen. Weitere Optimierungen sind möglich. == Authentifizierungsproblem vino-server == Der vino-server meldet: > "The authentication mechanism requested cannot be provided by the computer." bzw. > "Server did not offer supported security type" bzw. > "No matching security types" Lösung: Die Verschlüsselung von vino-server kann mit dem [:dconf-editor:] unter ''"org.gnome.desktop.remote-access"'' mit dem Schlüssel ''"require-encryption"'' deaktiviert werden. = Spezielle Anwendungsfälle = == VNC-Sitzung gemeinsam nutzen == Wenn man gemeinsam in derselben Sitzung arbeiten möchte, z.B. um etwas vorzuführen, kann man dazu x11vnc als VNC-Server verwenden. Siehe [#Keine-Panels-in-Unity Keine Panels in Unity]. == VNC-Server bei jedem Bootvorgang starten == === System mit systemd === Unter [:systemd:] muss ein Dienst angelegt und gestartet werden. Hierzu ist zunächst eine Beschreibung für die x11vnc-Einheit anzulegen. Wie üblich gilt auch hier, dass rechnerspezifische Beschreibungen unter '''/etc/systemd/system/''' Vorrang haben vor etwaigen distributionsgelieferten in'''/lib/systemd/system/'''. Die Datei '''/etc/systemd/system/x11vnc.service''' sollte enthalten: {{{ [Unit] Description=x11vnc-Server [Service] ExecStart=/usr/bin/x11vnc -auth guess -forever -localhost -loop -noxdamage -o /var/log/x11vnc.log -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared [Install] WantedBy=multi-user.target }}} '''Hinweis:''' Durch den Parameter "-localhost" werden nur lokale Verbindungen angenommen (z.b. für eine Tunnelung bei einer ssh-Portweiterleitung). Möchtest du, dass dein PC von außen erreichbar ist, lasse diesen Parameter weg! Danach ist diese Einheit bei systemd anzumelden mit: {{{#!vorlage Befehl sudo systemctl enable x11vnc.service }}} Der x11vnc-Server kann dann direkt aktualisiert, gestartet und kontrolliert werden mit: {{{#!vorlage Befehl sudo systemctl daemon-reload sudo systemctl restart x11vnc sudo systemctl status x11vnc }}} Mit den drei vorstehenden Befehlen können Änderungen an der `x11vnc.service` unmittelbar in Betrieb genommen werden. Ansonsten geschieht dies beim nächsten Systemstart. === GDM konfigurieren === Um sich am System anzumelden, kann [:GDM:] (fast) genauso verwendet werden wie bei einer lokalen Authentifizierung. Damit dieser jedoch auch in einer Session mit `Xvnc` als X-Server startet, müssen noch ein paar Änderungen durchgeführt werden. Dazu öffnet man mit einem beliebigen Texteditor mit Root-Rechten die Datei '''/etc/gdm/gdm.conf''' (bzw. '''/etc/gdm/gdm.conf-custom''') und kommentiert folgende Zeile ein: {{{ RemoteGreeter=/usr/lib/gdm/gdmlogin }}} Schließlich aktiviert man noch XDMCP. Hierfür sucht man sich den Eintrag `[xdmcp]`. == Einzelnes Fenster freigeben == Manchmal kann es sinnvoll sein, nicht den gesamten Desktop, sondern nur ein Fenster freizugeben. Dazu ist folgendes Vorgehen notwendig (siehe diesen [https://nicktj.tumblr.com/post/17166592046/share-a-single-x-window-with-someone-over-vnc Blogeintrag] {en}). Dazu muss man zunächst die Fenster-ID des freizugebenden Fensters feststellen. Man startet das Programm {{{#!vorlage Befehl xwininfo }}} Nun ändert sich der Mausanzeiger. Dann klickt man auf das entsprechende Fenster und u.a. wird die Fenster-ID ausgegeben. Anschließend kann nur das spezielle Fenster und nicht der gesamte Desktop freigegeben werden: {{{#!vorlage Befehl x11vnc -id WINDOW_ID }}} wobei `WINDOW_ID` durch den ermittelten Hex-Wert von xwininfo zu ersetzen ist. Wählt man als Fenster-ID `pick`, dann wird im Hintergrund automatisch xwininfo gestartet und man kann das zu exportierende Fenster durch einfache Auswahl anklicken: {{{#!vorlage Befehl x11vnc -id pick }}} Zusätzliche Optionen (bspw. `-xkb`, `-usepw`, `-capslock`, `-nodpms`) für x11vnc können wie bei der Desktop-Variante mit angegeben werden. Der Zugriff auf das Einzelfenster erfolgt wie zum Desktop mit Hilfe eines Clients. Falls eine Applikation exportiert werden soll, welche aus mehreren Einzelfenstern besteht (bspw. [:GIMP:]), empfiehlt sich die Option `-appshare`. Eine ausführlichere Anleitung findet sich in den Manpages von x11vnc. {{{#!vorlage Befehl x11vnc -appshare -help }}} == Freigeben einer einzelnen Anwendung == Um ein einzelnes Programm auf einem (meist an einen Beamer angeschlossen) Rechner z.B. Schülern freizugeben, damit diese mit dem eigenen Rechner etwas demonstrieren können, nutzt man folgendes Skript. Voraussetzung sind [packages:xnest:] und der Fenstermanager [:Archiv/Ratpoison:Ratpoison]: {{{#!code bash #!/bin/bash passwortdatei=$(mktemp) # Passwort erstellen date +%N | grep -o ^.... > $passwortdatei; hinweise="Passwort: $(cat $passwortdatei) $(/sbin/ifconfig | grep -o inet\ Adresse:[0-9\.]*)" programm="$*" # Unterfenster erzeugen Xnest -geometry 1024x720 :4 & # VNC aufschalten x11vnc -shared -forever -zeroconf -noshm -passwdfile $passwortdatei -display :4 & lxterm -fs 40 -display :4 -e "ratpoison & $programm; rm $passwortdatei" & sleep 5; ratpoison --display :4 -c "echo $hinweise" sleep 5; ratpoison --display :4 -c "echo $hinweise" sleep 5; ratpoison --display :4 -c "echo $hinweise" sleep 5; ratpoison --display :4 -c "echo $hinweise" }}} Das Skript kann ausführbar im Suchpfad liegen, z.B. mit dem Dateinamen '''start-vnc'''. Ein Programm lässt sich dann mit {{{#!vorlage Befehl start-vnc PROGRAMM PARAMETER }}} starten. ==== Desktopumgebung ==== Möchte man, dass die komplette Desktopumgebung - also z.B. GNOME oder KDE - des Benutzers, der VNC startet, geladen wird, so kann man dies in der Konfigurationsdatei '''/etc/vnc.conf''' des VNC-Dienstes für alle Benutzer des Systems definieren. Ist die Datei '''/etc/vnc.conf''' nicht vorhanden, muss sie mit Root-Rechten aus '''/usr/share/doc/tightvncserver/examples/vnc.conf.gz''' bzw. '''/usr/share/doc/vnc4server/examples/vnc.conf.gz''' nach '''/etc/vnc.conf''' extrahiert werden. {{{#!vorlage Befehl sudo cp /usr/share/doc/vnc4server/examples/vnc.conf.gz /etc/ sudo gunzip -d /etc/vnc.conf.gz }}} bzw. für den Tightvncserver: {{{#!vorlage Befehl sudo cp /usr/share/doc/tightvncserver/examples/vnc.conf.gz /etc/ sudo gunzip -d /etc/vnc.conf.gz }}} Anschließend muss die Zeile {{{ # $vncStartup points to a script that will be started at the very beginning. [mark]$vncStartup = "/etc/X11/Xsession";[/mark] }}} einkommentiert werden. Von da an startet automatisch die Desktopumgebung, wenn ein Benutzer einen VNC-Server startet. Alternativ kann dies auch jeder Benutzer für sich selbst festlegen. Dazu muss man in der Datei '''~/.vnc/xstartup''' im [:Homeverzeichnis:] Folgendes eintragen: {{{#!code bash #!/bin/sh unset SESSION_MANAGER exec /etc/X11/Xsession }}} Anschließend muss die Datei ausführbar gesetzt werden: {{{#!vorlage Befehl chmod +x ~/.vnc/xstartup }}} ==== Fenstermanager ==== Oftmals soll nicht eine komplette Desktopumgebung geladen werden; dies würde recht viel Last erzeugen, nur damit eine Desktopumgebung bereit steht, deren Möglichkeiten kaum genutzt werden. Um dem VNC-Server einen bestimmten Fenstermanager zuzuweisen, muss die Datei '''~/.vnc/xstartup''' editiert werden [4]. Im Original sieht die Datei so aus: {{{#!code bash #!/bin/sh [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic & x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & x-window-manager & }}} Um einen bestimmten Fenstermanager zu starten, ersetzt man `x-window-manager`. Natürlich muss der gewünschte Fenstermanager installiert sein. Man kann dort zum Beispiel `openbox` oder `fluxbox` eintragen. Mit "&" kann man weitere Programme hinzufügen, die automatisch mit gestartet werden sollen. Das Ganze sieht danach zum Beispiel so aus: {{{#!code bash x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & fluxbox & firefox & }}} Hier werden der Fenstermanager [:Fluxbox:] und der Webbrowser [:Firefox:] gestartet. Im nächsten Beispiel wird eine [:LXDE:]-Sitzung mit speziellen Optionen für `vncconfig` gestartet: {{{#!code bash vncconfig -sendPrimary=0 -nowin & x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & startlubuntu }}} Der bisher undokumentierte Schalter `-sendPrimary=0` schaltet die Option "Send primary selection to viewers" von `vncconfig` aus (die "primary selection" ist der von der Maus markierte Text), der Parameter `-nowin` versteckt das Fenster. Mit dem Befehl `startlubuntu` wird schlussendlich [:Lubuntu:] gestartet. = Links = * [man:x11vnc:] {en} - Beschreibung und Startbefehle für den VNC-Server x11vnc * [https://linuxundich.de/de/ubuntu/das-eigene-pc-helpdesk/ Das eigene PC-Helpdesk] {de} - Blogbeitrag 09/2009 * [heise:-221463:Fernhilfe - X-Window-Desktop fernsteuern per Shell-Skript und VNC] {de} - heise Netze, 05/2008 # tag: Internet, Netzwerk, Server, Fernwartung, Remotedesktop, VNC