Cómo instalar y configurar VNC en Ubuntu 22.04

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación del entorno de escritorio y del servidor VNC
  • Paso 2: Configuración del servidor VNC
  • Paso 3: Conexión segura al escritorio VNC
  • Paso 4: Ejecutar VNC como un servicio del sistema
  • Conclusión
  • Virtual Network Computing , o VNC, es un sistema de conexión que permite utilizar el teclado y el ratón para interactuar con un entorno de escritorio gráfico en un servidor remoto. Facilita la gestión de archivos, software y configuraciones en un servidor remoto a los usuarios que aún no se sienten cómodos con la línea de comandos.

    En esta guía, configurará un servidor VNC con TightVNC en un servidor Ubuntu 22.04 y se conectará a él de forma segura a través de un túnel SSH. Luego, utilizará un programa cliente VNC en su máquina local para interactuar con su servidor a través de un entorno de escritorio gráfico.

    Prerrequisitos

    Para completar este tutorial, necesitarás:

    • Un servidor Ubuntu 22.04 con un usuario administrativo que no sea root y un firewall configurado con UFW. Para configurarlo, siga nuestra guía de configuración inicial de servidores para Ubuntu 22.04 .
    • Una computadora local con un cliente VNC instalado. El cliente VNC que utilice debe admitir conexiones a través de túneles SSH:
      • En Windows, puede utilizar TightVNC , RealVNC o UltraVNC .
      • En macOS, puedes usar el programa de uso compartido de pantalla integrado o puedes usar una aplicación multiplataforma como RealVNC .
      • En Linux, puede elegir entre muchas opciones, incluidas vinagre, krdc, RealVNC o TightVNC .

    Paso 1: Instalación del entorno de escritorio y del servidor VNC

    De forma predeterminada, un servidor Ubuntu 22.04 no viene con un entorno de escritorio gráfico ni con un servidor VNC instalado, por lo que comenzará por instalarlos.

    Tiene muchas opciones en cuanto al servidor VNC y el entorno de escritorio que elija. En este tutorial, instalará paquetes para el entorno de escritorio Xfce más reciente y el paquete TightVNC disponible en el repositorio oficial de Ubuntu. Tanto Xfce como TightVNC son conocidos por ser livianos y rápidos, lo que ayudará a garantizar que la conexión VNC sea fluida y estable incluso en conexiones a Internet más lentas.

    Después de conectarse a su servidor con SSH, actualice su lista de paquetes:

    1. sudo apt update

    Ahora instale Xfce junto con el xfce4-goodiespaquete, que contiene algunas mejoras para el entorno de escritorio:

    1. sudo apt install xfce4 xfce4-goodies

    Durante la instalación, es posible que se le solicite que elija un administrador de pantalla predeterminado para Xfce. Un administrador de pantalla es un programa que le permite seleccionar e iniciar sesión en un entorno de escritorio a través de una interfaz gráfica. Solo usará Xfce cuando se conecte con un cliente VNC y, en estas sesiones de Xfce, ya habrá iniciado sesión como usuario no root de Ubuntu. Por lo tanto, para los fines de este tutorial, su elección de administrador de pantalla no es pertinente. Seleccione cualquiera de los dos y presione ENTER.

    Una vez completada la instalación, instale el servidor TightVNC:

    1. sudo apt install tightvncserver

    A continuación, ejecute el vncservercomando para establecer una contraseña de acceso a VNC, crear los archivos de configuración inicial e iniciar una instancia de servidor VNC:

    1. vncserver

    Se le pedirá que ingrese y verifique una contraseña para acceder a su máquina de forma remota:

    OutputYou will require a password to access your desktops.Password:Verify:

    La contraseña debe tener entre seis y ocho caracteres. Las contraseñas con más de ocho caracteres se truncarán automáticamente.

    Una vez que verifique la contraseña, tendrá la opción de crear una contraseña de solo lectura. Los usuarios que inicien sesión con la contraseña de solo lectura no podrán controlar la instancia de VNC con el mouse o el teclado. Esta es una opción útil si desea demostrar algo a otras personas que usan su servidor VNC, pero no es obligatoria.

    A continuación, el proceso crea los archivos de configuración predeterminados necesarios y la información de conexión para el servidor. Además, inicia una instancia de servidor predeterminada en el puerto 5901. Este puerto se denomina puerto de pantalla y VNC lo denomina :1. VNC puede iniciar varias instancias en otros puertos de pantalla, haciendo :2referencia al puerto 5902, :3haciendo referencia a 5903, etc.:

    OutputWould you like to enter a view-only password (y/n)? nxauth:  file /home/sammy/.Xauthority does not existNew 'X' desktop is your_hostname:1Creating default startup script /home/sammy/.vnc/xstartupStarting applications specified in /home/sammy/.vnc/xstartupLog file is /home/sammy/.vnc/your_hostname:1.log

    Tenga en cuenta que si alguna vez desea cambiar su contraseña o agregar una contraseña de solo lectura, puede hacerlo con el vncpasswdcomando:

    1. vncpasswd

    En este punto, el servidor VNC ya está instalado y funcionando. Ahora lo configuraremos para que inicie Xfce y nos dé acceso al servidor a través de una interfaz gráfica.

    Paso 2: Configuración del servidor VNC

    El servidor VNC necesita saber qué comandos ejecutar al iniciarse. En concreto, VNC necesita saber a qué entorno de escritorio gráfico debe conectarse.

    Los comandos que ejecuta el servidor VNC al iniciarse se encuentran en un archivo de configuración llamado xstartupen la .vnccarpeta que se encuentra debajo de su directorio de inicio. El script de inicio se creó cuando ejecutó el vncservercomando en el paso anterior, pero creará el suyo propio para iniciar el escritorio Xfce.

    Dado que va a cambiar la forma en que está configurado el servidor VNC, primero detenga la instancia del servidor VNC que se está ejecutando en el puerto 5901con el siguiente comando:

    1. vncserver -kill :1

    La salida se verá así, aunque verás un PID diferente:

    OutputKilling Xtightvnc process ID 17648

    Antes de modificar el xstartuparchivo, haga una copia de seguridad del original:

    1. mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

    Ahora crea un nuevo xstartuparchivo y ábrelo en un editor de texto, como por ejemplo nano:

    1. nano ~/.vnc/xstartup

    Luego agregue las siguientes líneas al archivo:

    ~/.vnc/xstartup

    #!/bin/bashxrdb $HOME/.Xresourcesstartxfce4 

    La primera línea es un shebang . En los archivos de texto sin formato ejecutables en plataformas *nix, un shebang le indica al sistema a qué intérprete pasar ese archivo para su ejecución. En este caso, estás pasando el archivo al intérprete de Bash. Esto permitirá que cada línea sucesiva se ejecute como comandos, en orden.

    El primer comando del archivo, xrdb $HOME/.Xresources, le indica al marco de la interfaz gráfica de usuario de VNC que lea el .Xresourcesarchivo del usuario del servidor. .Xresourceses donde un usuario puede realizar cambios en ciertas configuraciones del escritorio gráfico, como colores de terminal, temas del cursor y representación de fuentes. El segundo comando le indica al servidor que inicie Xfce. Siempre que inicie o reinicie el servidor VNC, estos comandos se ejecutarán automáticamente.

    Guarde y cierre el archivo después de agregar estas líneas. Si utilizó nano, hágalo presionando CTRL + X, Yy luego ENTER.

    Para garantizar que el servidor VNC pueda usar este nuevo archivo de inicio correctamente, deberá hacerlo ejecutable:

    1. chmod +x ~/.vnc/xstartup

    Luego reinicie el servidor VNC:

    1. vncserver -localhost

    Tenga en cuenta que esta vez el comando incluye la -localhostopción que vincula el servidor VNC a la interfaz de bucle invertido de su servidor. Esto hará que VNC solo permita conexiones que se originen en el servidor en el que está instalado.

    En el siguiente paso, establecerá un túnel SSH entre su máquina local y su servidor, lo que básicamente engañará a VNC para que piense que la conexión desde su máquina local se originó en su servidor. Esta estrategia agregará una capa adicional de seguridad a VNC, ya que los únicos usuarios que podrán acceder a él serán aquellos que ya tengan acceso SSH a su servidor.

    Verás un resultado similar a este:

    OutputNew 'X' desktop is your_hostname:1Starting applications specified in /home/sammy/.vnc/xstartupLog file is /home/sammy/.vnc/your_hostname:1.log

    Con la configuración establecida, está listo para conectarse al servidor VNC desde su máquina local.

    Paso 3: Conexión segura al escritorio VNC

    VNC no utiliza protocolos seguros al conectarse. Para conectarse de forma segura a su servidor, deberá establecer un túnel SSH y luego indicarle a su cliente VNC que se conecte mediante ese túnel en lugar de realizar una conexión directa.

    Cree una conexión SSH en su computadora local que reenvíe de forma segura a la localhostconexión para VNC. Puede hacerlo a través de la terminal en Linux o macOS con el siguiente sshcomando:

    1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

    Esto es lo que sshsignifican las opciones de este comando:

    • -L 59000:localhost:5901: El -Lconmutador especifica que el puerto dado en la computadora local ( 59000) se debe reenviar al host y puerto dados en el servidor de destino ( localhost:5901, es decir, puerto 5901en el servidor de destino, definido como your_server_ip). Tenga en cuenta que el puerto local que especifique es algo arbitrario; siempre que el puerto no esté ya vinculado a otro servicio, puede usarlo como puerto de reenvío para su túnel.
    • -C:Esta bandera habilita la compresión, lo que puede ayudar a minimizar el consumo de recursos y acelerar las cosas.
    • -N: Esta opción indica sshque no desea ejecutar ningún comando remoto. Esta configuración es útil cuando solo desea reenviar puertos.
    • -l sammy your_server_ip: El -lmodificador le permite especificar el usuario con el que desea iniciar sesión una vez que se conecte al servidor. Asegúrese de reemplazar sammyy your_server_ipcon el nombre de su usuario no root y la dirección IP de su servidor.

    Nota : este comando establece un túnel SSH que reenvía información desde el puerto 5901de su servidor VNC al puerto 59000de su máquina local a través del puerto 22de cada máquina, el puerto predeterminado para SSH. Suponiendo que haya seguido la guía de configuración inicial del servidor para Ubuntu 22.04 , habrá agregado una regla UFW para permitir conexiones a su servidor a través de OpenSSH.

    Esto es más seguro que simplemente abrir el firewall de su servidor para permitir conexiones al puerto 5901, ya que eso permitiría que cualquiera acceda a su servidor a través de VNC. Al conectarse a través de un túnel SSH, está limitando el acceso a VNC a las máquinas que ya tienen acceso SSH al servidor.

    Si está utilizando PuTTY para conectarse a su servidor, puede crear un túnel SSH haciendo clic derecho en la barra superior de la ventana del terminal y luego haciendo clic en la opción Cambiar configuración… :

    Busque la rama Connection en el menú de árbol del lado izquierdo de la ventana PuTTY Reconfiguration. Expanda la rama SSH y haga clic en Tunnels . En la pantalla Options (Opciones) que controla el reenvío de puertos SSH , ingrese 59000como Source Port (Puerto de origen) y localhost:5901como Destination (Destino) , de la siguiente manera:

    Luego haga clic en el botón Agregar y luego en el botón Aplicar para implementar el túnel.

    Una vez que el túnel esté en funcionamiento, use un cliente VNC para conectarse a localhost:59000. Se le solicitará que se autentique con la contraseña que estableció en el paso 1.

    Una vez que estés conectado, verás el escritorio Xfce predeterminado. Debería verse así:

    Puede acceder a los archivos de su directorio de inicio con el administrador de archivos o desde la línea de comandos, como se ve aquí:

    Pulsa CTRL+Cen tu terminal local para detener el túnel SSH y volver al mensaje de aviso. Esto también desconectará tu sesión VNC.

    Ahora puede configurar su servidor VNC para que se ejecute como un servicio systemd.

    Paso 4: Ejecutar VNC como un servicio del sistema

    Si configura el servidor VNC para que se ejecute como un servicio systemd, podrá iniciarlo, detenerlo y reiniciarlo según sea necesario, como cualquier otro servicio. También puede usar los comandos de administración de systemd para garantizar que VNC se inicie cuando se inicie el servidor.

    Primero, crea un nuevo archivo de unidad llamado /etc/systemd/system/vncserver@.service:

    1. sudo nano /etc/systemd/system/vncserver@.service

    El @símbolo al final del nombre nos permitirá pasar un argumento que puedes usar en la configuración del servicio. Lo usarás para especificar el puerto de pantalla VNC que quieres usar cuando administres el servicio.

    Agregue las siguientes líneas al archivo. Asegúrese de cambiar el valor de User , Group , WorkingDirectory y el nombre de usuario en el valor de PIDFILE para que coincidan con su nombre de usuario:

    /etc/systemd/system/vncserver@.servicio

    [Unit]Description=Start TightVNC server at startupAfter=syslog.target network.target[Service]Type=forkingUser=sammyGroup=sammyWorkingDirectory=/home/sammyPIDFile=/home/sammy/.vnc/%H:%i.pidExecStartPre=-/usr/bin/vncserver -kill :%i  /dev/null 21ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%iExecStop=/usr/bin/vncserver -kill :%i[Install]WantedBy=multi-user.target

    El ExecStartPrecomando detiene VNC si ya se está ejecutando. El ExecStartcomando inicia VNC y establece la profundidad de color en 24 bits con una resolución de 1280×800. También puede modificar estas opciones de inicio para satisfacer sus necesidades. Además, tenga en cuenta que el ExecStartcomando incluye nuevamente la -localhostopción.

    Guarde y cierre el archivo.

    A continuación, haga que el sistema conozca el nuevo archivo de unidad:

    1. sudo systemctl daemon-reload

    Habilitar el archivo de unidad:

    1. sudo systemctl enable vncserver@1.service

    El 1siguiente @signo indica sobre qué número de pantalla debe aparecer el servicio, en este caso el predeterminado :1como se explicó en el Paso 2.

    Detenga la instancia actual del servidor VNC si aún está en ejecución:

    1. vncserver -kill :1

    Luego, inícielo como lo haría con cualquier otro servicio systemd:

    1. sudo systemctl start vncserver@1

    Puedes verificar que se inició con este comando:

    1. sudo systemctl status vncserver@1

    Si comenzó correctamente, el resultado debería verse así:

    Output● vncserver@1.service - Start TightVNC server at startup     Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)     Active: active (running) since Mon 2022-04-18 16:57:26 UTC; 20s ago    Process: 97088 ExecStartPre=/usr/bin/vncserver -kill :1  /dev/null 21 (code=exited, status=2)    Process: 97092 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :1 (code=exited, status=0/SUCCESS)   Main PID: 97103 (Xtightvnc)      Tasks: 77 (limit: 4665)     Memory: 146.7M        CPU: 4.459s     CGroup: /system.slice/system-vncserver.slice/vncserver@1.service. . .

    Su servidor VNC ahora está listo para usarse cada vez que se inicia el servidor y puede administrarlo con systemctlcomandos como cualquier otro servicio systemd.

    Sin embargo, no habrá ninguna diferencia en el lado del cliente. Para volver a conectarse, inicie nuevamente el túnel SSH:

    1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

    Luego, realice una nueva conexión utilizando su software cliente VNC para localhost:59000conectarse a su servidor.

    Conclusión

    Ahora tienes un servidor VNC seguro en funcionamiento en tu servidor Ubuntu 22.04. Ahora podrás administrar tus archivos, software y configuraciones con una interfaz gráfica fácil de usar y podrás ejecutar software gráfico como navegadores web de forma remota.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion