Ejecución de escritorio en servidor remoto
Por lo general, usaría la terminal ssh cuando trabaje en un servidor Linux remoto. Pero puede haber momentos en los que necesite ejecutar una aplicación de interfaz gráfica de usuario en el servidor y mantenerla funcionando durante bastante tiempo.
Recientemente tuve que hacer algo similar y, por lo tanto, configuré un servidor Ubuntu con escritorio y accedí a él a través de VNC.
La idea es sencilla. Instale cualquier entorno de escritorio de su elección en el servidor. En este tutorial usaremos Xfce, ya que tiene un tamaño reducido en comparación con los más grandes como Gnome y KDE.
Luego use el servidor vnc para iniciar el entorno de escritorio y crear una sesión de visualización X a la que accederemos desde nuestra máquina de escritorio local a través de un cliente vnc.
Instalar entorno de escritorio y servidor VNC
Xfce es un escritorio liviano e ideal para usar en un servidor remoto. Primero instale los paquetes xfce y el servidor tightvnc. Sería una buena idea actualizar la memoria caché del paquete antes de realizar la instalación real.
sudo apt-get update sudo apt-get install xfce4 xfce4-goodies tightvncserver
Tenga en cuenta que esto solo instalará los paquetes y no iniciará nada. Iniciaremos vncserver con configuraciones específicas por nuestra cuenta, más adelante en esta guía.
Si el proceso dpkg se cierra inesperadamente, es posible que deba ejecutar el siguiente comando:
# sudo dpkg --configure -a
Crear un nuevo usuario para vnc
Lo siguiente que debe hacer es crear un usuario de Unix que se utilizará durante las sesiones de vnc. El nombre de usuario puede ser cualquier cosa. Use el comando agregar usuario.
# 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] #
El vncserver iniciará el entorno de escritorio con este usuario de Unix. Lo que significa que usted será este usuario cuando trabaje en el escritorio remoto
Configure la "contraseña vnc" para el usuario
El servidor vnc mantiene una contraseña separada que se usa para iniciar sesión en el servidor vnc a través de clientes vnc. Esta contraseña es diferente de la contraseña de usuario de Unix. Se configura mediante el comando vncpasswd.
Primero cambie al usuario "mike" que se creó en el paso anterior y configure la contraseña del servidor vnc.
# su - mike
Luego use el 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]:~$
Tenga en cuenta que el archivo passwd no existía y se creó por primera vez en este paso.
Si ya ha ejecutado el comando vncserver anteriormente, habrá creado los archivos. Cuando ejecuta vncserver por primera vez, crea un script de inicio predeterminado
$ 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
Sin embargo, no necesitamos ejecutar el comando vncserver. Se iniciará automáticamente usando scripts de inicio.
Cree la secuencia de comandos xstartup
El siguiente archivo importante es el script xstartup. Contiene instrucciones sobre qué aplicaciones X iniciar. El entorno de escritorio es la aplicación X que tenemos que iniciar.
Primero haga una copia de seguridad del archivo si ya existe
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
Ahora edítalo usando nano
[email protected]:~$ nano .vnc/xstartup
Nota:esto está dentro del directorio de inicio del usuario vnc, es decir, /home/mike/.vnc/xstartup
Ingrese las siguientes líneas en el script xstartup
#!/bin/bash xrdb $HOME/.Xresources startxfce4 &
El comando startxfce4 iniciará el escritorio xfce. Guarde el archivo y ciérrelo.
Haga que el archivo xstartup sea ejecutable. Esto es necesario para que vncserver pueda ejecutar este archivo.
$ chmod +x ~/.vnc/xstartup
Crear archivo de servicio vnc
El siguiente paso es crear un archivo de servicio vnc para que podamos iniciar el servidor vnc usando el comando de servicio y no tengamos que ejecutar el comando vncserver cada vez.
Asegúrese de ingresar el nombre de usuario correcto en la variable USUARIO. Este es el usuario que el servidor vnc utilizará para iniciar la sesión de escritorio.
[email protected]:~# sudo nano /etc/init.d/vncserver
Pegue el siguiente 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
Guarde el archivo y ciérrelo. Hazlo ejecutable
# chmod +x /etc/init.d/vncserver
Iniciar el servicio
Ahora se lee todo. Es hora de ejecutar vncserver y probar nuestro paso.
Primero vuelva a cargar systemctl para que pueda usar el script de inicio de vncserver.
systemctl daemon-reload
Ahora inicie vncserver. Inicia un servidor en el puerto 5901
# service vncserver start
Comprueba que se está ejecutando
[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]:~#
Compruebe los puertos abiertos del servidor vnc. Necesita el número de puerto correcto cuando se conecta desde el cliente 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
El servidor Vnc también se puede iniciar llamando directamente al script.
# /etc/init.d/vncserver start [ ok ] Starting vncserver (via systemctl): vncserver.service. [email protected]:~#
Para detener vncserver
# service vncserver stop
Instalar el cliente vncviewer en el escritorio
Ahora que tenemos el servidor vnc en funcionamiento con el entorno de escritorio gui, es hora de instalar un cliente vnc y acceder al escritorio remoto.
Instale xtightvncviewer en Ubuntu.
$ sudo apt-get install xtightvncviewer
Ahora conéctese al servidor vnc remoto usando el comando vncviewer.
$ vncviewer -quality 5 -encodings "copyrect tight hextile zlib corre rre raw" -compresslevel 5 IPADDR:5901
Usamos codificaciones de menor calidad y compresión para comprimir los datos de imagen que se transfieren y hacerlos más rápidos.
Usar otros visores vnc como KRDC podría ser más lento.
Recursos
Para obtener más información, consulte estos enlaces útiles -
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 /cómo-configurar-vnc-para-ubuntu-12