Desktop in esecuzione su server remoto
Di solito si usa il terminale ssh quando si lavora su un server Linux remoto. Ma ci possono essere momenti in cui è necessario eseguire un'app GUI sul server e mantenerla in esecuzione per un po' di tempo.
Recentemente ho dovuto fare qualcosa di simile e quindi ho configurato un server Ubuntu con desktop e vi ho effettuato l'accesso tramite VNC.
L'idea è semplice. Installa qualsiasi ambiente desktop di tua scelta sul server. In questo tutorial useremo Xfce, poiché ha un ingombro ridotto rispetto a quelli più grandi come Gnome e KDE.
Quindi usa il server vnc per avviare l'ambiente desktop e creare una sessione di visualizzazione X a cui accederemo dal nostro computer desktop locale tramite un client vnc.
Installa l'ambiente desktop e il server VNC
Xfce è un desktop leggero e ideale per l'utilizzo su un server remoto. Per prima cosa installa i pacchetti xfce e il server tightvnc. Sarebbe una buona idea aggiornare la cache del pacchetto prima di eseguire l'installazione effettiva.
sudo apt-get update sudo apt-get install xfce4 xfce4-goodies tightvncserver
Nota che questo installerà solo i pacchetti e non avvierà nulla. Inizieremo autonomamente vncserver con impostazioni specifiche, più avanti in questa guida.
Se il processo dpkg si chiude in modo imprevisto, potrebbe essere necessario eseguire il comando seguente -
# sudo dpkg --configure -a
Crea un nuovo utente per vnc
La prossima cosa da fare è creare un utente unix che verrà utilizzato durante le sessioni vnc. Il nome utente può essere qualsiasi cosa. Usa il comando adduser.
# adduser mike Adding user `mike' ... Adding new group `mike' (1001) ... Adding new user `mike' (1001) with group `mike' ... Creating home directory `/home/mike' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for mike Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] #
Il server vnc avvierà l'ambiente desktop con questo utente Unix. Ciò significa che sarai questo utente quando lavori sul desktop remoto
Imposta la "password vnc" per l'utente
Il server vnc mantiene una password separata che viene utilizzata per accedere al server vnc tramite client vnc. Questa password è diversa dalla password utente unix. Viene configurato utilizzando il comando vncpasswd.
Innanzitutto passa all'utente "mike" creato nel passaggio precedente e imposta la password del server vnc.
# su - mike
Quindi usa il comando vncpasswd
$ vncpasswd Using password file /home/mike/.vnc/passwd VNC directory /home/mike/.vnc does not exist, creating. Password: Verify: Would you like to enter a view-only password (y/n)? [email protected]:~$
Nota che il file passwd non esisteva ed è stato creato per la prima volta in questo passaggio.
Se hai già eseguito il comando vncserver in precedenza, avrebbe creato i file. Quando esegui vncserver per la prima volta, crea uno script di avvio predefinito
$ vncserver You will require a password to access your desktops. Password: Password too short [email protected]:~$ vncserver You will require a password to access your desktops. Password: Verify: Would you like to enter a view-only password (y/n)? n New 'X' desktop is desktop:1 Creating default startup script /home/enlightened/.vnc/xstartup Starting applications specified in /home/enlightened/.vnc/xstartup Log file is /home/enlightened/.vnc/desktop:1.log
Tuttavia, non è necessario eseguire il comando vncserver. Verrà avviato automaticamente utilizzando gli script di avvio.
Crea lo script xstartup
Il prossimo file importante è lo script xstartup. Contiene le istruzioni su quali app X avviare. L'ambiente desktop è l'applicazione X che dobbiamo avviare.
Per prima cosa fai un backup del file se esiste già
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
Ora modificalo usando nano
[email protected]:~$ nano .vnc/xstartup
Nota:si trova all'interno della home directory dell'utente vnc, ovvero /home/mike/.vnc/xstartup
Inserisci le seguenti righe nello script xstartup
#!/bin/bash xrdb $HOME/.Xresources startxfce4 &
Il comando startxfce4 avvierà il desktop xfce. Salva il file e chiudilo.
Rendi eseguibile il file xstartup. Ciò è necessario affinché vncserver possa eseguire questo file.
$ chmod +x ~/.vnc/xstartup
Crea file di servizio vnc
Il passaggio successivo consiste nel creare un file di servizio vnc in modo da poter avviare il server vnc utilizzando il comando service e non è necessario eseguire il comando vncserver ogni volta.
Assicurati di inserire il nome utente corretto nella variabile USER. Questo è l'utente che il server vnc utilizzerà per avviare la sessione desktop.
[email protected]:~# sudo nano /etc/init.d/vncserver
Incolla il seguente script
#!/bin/bash PATH="$PATH:/usr/bin/" export USER="mike" DISPLAY="1" DEPTH="16" GEOMETRY="1024x768" OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}" . /lib/lsb/init-functions case "$1" in start) log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}" su ${USER} -c "/usr/bin/vncserver ${OPTIONS}" ;; stop) log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}" su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}" ;; restart) $0 stop $0 start ;; esac exit 0
Salva il file e chiudilo. Rendilo eseguibile
# chmod +x /etc/init.d/vncserver
Avvia il servizio
Ora si legge tutto. È ora di eseguire il server vnc e testare il nostro passaggio.
Prima ricarica systemctl in modo che possa utilizzare lo script di avvio di vncserver.
systemctl daemon-reload
Ora avvia vncserver. Avvia un server sulla porta 5901
# service vncserver start
Controlla che sia in esecuzione
[email protected]:~# service vncserver status ● vncserver.service Loaded: loaded (/etc/init.d/vncserver; bad; vendor preset: enabled) Active: active (exited) since Thu 2017-03-02 05:36:42 UTC; 6s ago Docs: man:systemd-sysv-generator(8) Process: 24877 ExecStart=/etc/init.d/vncserver start (code=exited, status=0/SUCCESS) Mar 02 05:36:40 bintu systemd[1]: Starting vncserver.service... Mar 02 05:36:40 bintu vncserver[24877]: * Starting vncserver for user 'vnc' on localhost:1... Mar 02 05:36:40 bintu su[24885]: Successful su for vnc by root Mar 02 05:36:40 bintu su[24885]: + ??? root:vnc Mar 02 05:36:40 bintu su[24885]: pam_unix(su:session): session opened for user vnc by (uid=0) Mar 02 05:36:42 bintu vncserver[24877]: New 'X' desktop is bintu:1 Mar 02 05:36:42 bintu vncserver[24877]: Starting applications specified in /home/vnc/.vnc/xstartup Mar 02 05:36:42 bintu vncserver[24877]: Log file is /home/vnc/.vnc/bintu:1.log Mar 02 05:36:42 bintu systemd[1]: Started vncserver.service.
$ cat ~/.vnc/*.pid 18577 18731
# ps -ef | grep tightvnc vnc 24574 1 0 05:32 ? 00:00:00 Xtightvnc :1 -desktop X -auth /home/vnc/.Xauthority -geometry 1024x768 -depth 16 -rfbwait 120000 -rfbauth /home/vnc/.vnc/passwd -rfbport 5901 -fp /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,/usr/share/fonts/X11/100dpi/ -co /etc/X11/rgb root 24744 10412 0 05:33 pts/0 00:00:00 grep --color=auto tightvnc [email protected]:~#
Controlla le porte aperte del server vnc. È necessario il numero di porta corretto quando ci si connette dal client vnc
# netstat -nlp | grep vnc tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 24574/Xtightvnc tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 24574/Xtightvnc unix 2 [ ACC ] STREAM LISTENING 5225386 24574/Xtightvnc /tmp/.X11-unix/X1
Il server Vnc può anche essere avviato chiamando direttamente lo script.
# /etc/init.d/vncserver start [ ok ] Starting vncserver (via systemctl): vncserver.service. [email protected]:~#
Per fermare vncserver
# service vncserver stop
Installa il client vncviewer sul desktop
Ora che abbiamo il server vnc attivo e funzionante con l'ambiente desktop gui, è il momento di installare un client vnc e accedere al desktop remoto.
Installa xtightvncviewer su Ubuntu.
$ sudo apt-get install xtightvncviewer
Ora connettiti al server vnc remoto usando il comando vncviewer.
$ vncviewer -quality 5 -encodings "copyrect tight hextile zlib corre rre raw" -compresslevel 5 IPADDR:5901
Usiamo codifiche di compressione e qualità inferiore per comprimere i dati dell'immagine trasferiti e renderlo più veloce.
L'utilizzo di altri visualizzatori vnc come KRDC potrebbe essere più lento.
Risorse
Per ulteriori letture, controlla questi link utili -
http://tightvnc.com/vncviewer.1.htmlhttps://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-16-04
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-14-04
https://www.digitalocean.com/community/tutorials /come-impostare-vnc-per-ubuntu-12