LinuxFanClub wiki

Υπηρεσίες, Προγραμματισμός, Εκπαίδευση ..

User Tools

Site Tools


el:linux:debian:server:vnc

VNC (tightvnc) - Aπομακρυσμένη σύνδεση σε γραφικό περιβάλλον

Υπάρχουν πολλές υλοποιήσεις του ανοιχτού πρωτοκόλλου vnc για απομακρυσμένη σύνδεση σε γραφικό περιβάλλον.

Μία από τις πιο δημοφιλείς και αποτελεσματική είναι το tightvnc.

Ρύθμιση server

Για να εγκαταστήσουμε τον tightvnc server

aptitude install tightvncserver

Μετά την εγκατάσταση οι εντολή vncserver είναι πανομοιότυπη με την tightvncserver

Εκκίνηση/τερματισμός

Αρχικά θα ορίσουμε κωδικούς για πλήρη πρόσβαση και μόνο για προβολή

tightvncpasswd 

Καλή πρακτική είναι να γίνεται σύνδεση πρώτα στο απομακρυσμένο μηχάνημα μέσω ssh και να εκκινείται ο tightvnc server ως

tightvncserver

με παραμέτρους

tightvncserver :1 -geometry 1024x768 -depth 16 -pixelformat rgb565

ή απλά

vncserver

Για να τερματίσει η 1η vnc συνεδρία που έχουμε εκκινήσει εκτελούμε

vncserver -kill :1

(Καθώς μπορούμε να εκτελέσουμε αρκετές συνεδρίες για τις τερματίσουμε, βάζουμε παράμετρο 2 για την 2η, 3 για την 3η κτλ)

Εκκίνηση μετά από αίτημα πελάτη - GDM

Για να εκκινήσουμε τον vncserver μετά από αίτημα πελάτη, εγκαθιστούμε το openbsd-inetd

aptitude install openbsd-inetd

Στην συνέχεια προσθέτουμε στο τέλος του αρχείου /etc/services γραμμές όπως οι παρακάτω

# Local services
vnc-640x480x8   5960/tcp
vnc-800x600x8   5961/tcp
vnc-800x600x16  5950/tcp
vnc-800x600x24  5962/tcp
vnc-1024x768x16 5900/tcp
vnc-1024x768x24 5963/tcp

Αυτό σημαίνει ότι μετά από αίτηση στην vnc οθόνη :0 ο vncserver θα εκτελεστεί σε ανάλυση 1024×768 σε 16bit χρώμα. Αντίστοιχα αίτηση στην οθόνη :50 θα εκκινήσει έναν vncserver σε 800×600 ανάλυση σε 16bit χρώμα

ΠΡΟΣΟΧΗ! το αρχείο /etc/services μπορεί να αντικατασταθεί σε αναβάθμιση του πακέτου netbase

Επίσης προσθέτουμε στο αρχείο /etc/inetd.conf, στο τέλος του

vnc-640x480x8   stream  tcp     nowait  nobody.tty      /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 640x480 -depth 8
vnc-800x600x8   stream  tcp     nowait  nobody.tty      /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 800x600 -depth 8
vnc-800x600x16  stream  tcp     nowait  nobody.tty      /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 800x600 -depth 16
vnc-800x600x24  stream  tcp     nowait  nobody.tty      /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 800x600 -depth 24
vnc-1024x768x16 stream  tcp     nowait  nobody.tty      /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 1024x768 -depth 16
vnc-1024x768x24 stream  tcp     nowait  nobody.tty      /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 1024x768 -depth 24

Επανεκκινούμε inetd και gdm

/etc/init.d/openbsd-inetd restart
/etc/init.d/gdm restart

Τώρα αρκεί να εκτελέσουμε το vnc χωρίς να ορίσουμε θύρα (προκαθορισμένη 0) για 1024x768x16bit color, ή ορίζοντας να εκτελεστεί σε άλλη ανάλυση και θα εμφανιστεί η οθόνη σύνδεσης του gdm

xtightvncviewer 192.168.1.100 -fullscreen

Εκκίνηση μετά από αίτημα πελάτη - LIGHTDM

Στο αρχείο /etc/lightdm/lightdm.conf, ενεργοποιούμε XDMCP Server αλλά και VNCServer με κάποιες προκαθορισμένες ρυθμίσεις όπως ανάλυση 1024×768, 16bit ανάλυση χρώματος

[VNCServer]
enabled=true
command=/usr/bin/Xvnc -once -SecurityTypes None
port=5900
width=1024
height=768
depth=16

[XDMCPServer]
enabled=true
port=177

Για επιπλέον αναλύσεις εγκαθιστούμε το xinetd

apt-get install xinetd vnc4server

και δημιουργούμε το αρχείο /etc/xinetd.d/vnc ως εξής

service vnc_netbook
{
   disabled    = no
   socket_type = stream
   protocol    = tcp
   wait        = no
   user        = nobody
   server      = /usr/bin/Xvnc
   server_args = -inetd -once -query localhost -SecurityTypes None -geometry 1024x600 -depth 16
   type        = UNLISTED
   port        = 5901
}
 
service vnc_workstation
{
   disabled    = no
   socket_type = stream
   protocol    = tcp
   wait        = no
   user        = nobody
   server      = /usr/bin/Xvnc
   server_args = -inetd -once -query localhost -SecurityTypes None -geometry 1400x900 -depth 16
   type        = UNLISTED
   port        = 5902
}

Επανεκκινούμε τις υπηρεσίες

service xinetd restart
service lightdm restart

Για να συνδεθούμε από clients στον vncserver έστω με ip 192.168.1.10 εκτελούμε

xtightvncviewer 192.168.1.10
xtightvncviewer 192.168.1.10:1
xtightvncviewer 192.168.1.10:2

για την κάθε μία από τις 3 αναλύσεις

Θύρες

Οι θύρες που θα πρέπει να ανοίξουν από κάποιον firewall ή router είναι 5500, 5800 και 5900 έως π.χ. 5910 για 10 συνεδρίες vnc

Ρύθμιση client

Εγκατάσταση

Για να εγκαταστήσουμε τον tightvnc client

aptitude install xtightvncviewer

Μετά την εγκατάσταση οι εντολή xvncviewer είναι πανομοιότυπη με την xtightvncviewer

Σύνδεση

Σύνδεση μέσω τερματικού

Για να συνδεθούμε στον υπολογιστή με όνομα myserver.mydomain.com, στον οποίο έχουμε ήδη εκκινήσει μια συνεδρία vnc, εκτελούμε από τον υπολογιστή-πελάτη

xtightvncviewer myserver.mydomain.com:1

Για σύνδεση σε άλλες vnc υλοποιήσεις εξυπηρετητών που δεν κάνουν καλή συμπίεση με ταχύτητες adsl περίπου 256kbps

xtightvncviewer myserver.mydomain.com:1 -bgr233 -compresslevel 9 -quality 0 -depth 8

Για ταχύτητες adsl 192kbps έως 1Μbit

xtightvncviewer myserver.mydomain.com:1 -compresslevel 9 -quality 5 -depth 16 # (or -depth 8)

Για ταχύτητες τοπικού δικτύου

xtightvncviewer myserver.mydomain.com:1 -compresslevel 1 -quality 9 -depth 16 

Σύνδεση μέσω γραφικού πελάτη

Στο kde υπάρχει το krdc

Ασφαλής Σύνδεση

Το πρωτόκολλο vnc από μόνο του δεν υποστηρίζει κρυπτογράφηση. Για το λόγο αυτό συνίσταται να συνδεόμαστε μέσω ssh tunneling, δηλαδή να περνάμε τα δεδομένα μέσω μιας ασφαλής σύνδεσης ssh.

Πριν συνδεθούμε με vnc εκκινούμε μια απλή συνεδρία ssh και στον απομακρυσμένο υπολογιστή εκκινούμε τον vncserver

vncserver

Θα πρέπει να αντιστοιχίσουμε την απομακρυσμένη vnc θύρα π.χ. 5901 σε μια τοπική π.χ. ομοίως στην τοπική 5911. Από το τοπικό μηχάνημα λοιπόν εκτελούμε :

ssh -L 5911:server.mydomain.com:5901 user@server.mydomain.com

Και στην συνέχεια από τον τοπικό υπολογιστή τρέχουμε το πρόγραμμα - πελάτη

xtightvncviewer localhost:11 -encoding tight -compresslevel 9 -quality 5 -depth 16

Αντιμετώπιση Προβλημάτων

Η υπηρεσία inetd στέλνει τα μηνύματά της στο /var/log/auth.log

Δοκιμές

Δοκιμές σε

  • γραμμή 100Mbit
  • athlon 2200+ ως server (1800 MHz)
  • celeron mobile 1300 ως πελάτη (2000 Mhz)

έδειξαν ότι

  • ακόμα και divx μπορεί να μεταδοθεί ομαλά σε ανάλυση 320×240 ή ακόμα και 400×300
    • Καλύτερη απόδοση είχε το xine σε σχέση με τον mplayer
    • O mplayer θα πρέπει να χρησιμοποιείται με παραμέτρους όπως
      • mplayer test.avi -vfm ffmpeg -lavdopts lowres=1:fast:skiploopfilter=all
  • Αν ως πηγή επιλέξουμε τηλεόραση μπορούμε να δούμε ομαλά με
    • mplayer σε αναλύσεις 320×240 ή r 400×300
    • xdtv ρυθμίζοντας το xdtvrc
      • fullscreen = 640×480
      • windowsize = 400×300

Στατιστικά

  1. Οι cpus client και server πιέστηκαν σε πάνω από 80%,
  2. Για tv με xtightvncviewer σε non-compress mode η ταχύτητα μετάδοσης έφτασε τα 6Mb/s
  3. Με xtightvncviewer -compresslevel 9 έπεσε σε 500Kb/s

Πηγές

el/linux/debian/server/vnc.txt · Last modified: Y/m/d H:i by vagk