TigerVNC (Español)
Vncserver es un demonio de visualización remota que permite a usuarios situados a distancia realizar distintas funciones, incluyendo:
- Sesiones de X virtuales (sin cabeza) y totalmente en paralelo que se ejecutan en segundo plano (es decir, no en el monitor físico, sino virtualmente) en una máquina. Todas las aplicaciones que se ejecutan en el servidor pueden seguir funcionando, incluso cuando el usuario se desconecta.
- Control directo de la sesión(s) local X (es decir, X se ejecuta en el monitor físico).
Instalación
Vncserver es proporcionado por tigervnc y también por tightvncAUR desde AUR.
Ejecutar vncserver para sesiones (sin cabeza) virtuales
Ajustes iniciales
Crear archivos de entorno y contraseña
Vncserver creará el archivo del entorno inicial y el archivo de la contraseña del usuario la primera vez que se ejecute:
$ vncserver
You will require a password to access your desktops. Password: Verify: New 'mars:1 (facade)' desktop is mars:1 Creating default startup script /home/facade/.vnc/xstartup Starting applications specified in /home/facade/.vnc/xstartup Log file is /home/facade/.vnc/mars:1.log
El puerto predeterminado en el que vncserver se ejecuta es: 1, que corresponde al puerto TCP en el que el servidor se está ejecutando (donde 5900 + n = número de puerto). En este caso, se está ejecutando en 5900 + 1 = 5901. Ejecutar vncserver por segunda vez creará una segunda instancia que se ejecuta en el siguiente puerto más alto, libre, es decir: 2 o 5902.
Apague vncserver usando el parámetro -kill:
$ vncserver -kill :1
Editar el archivo xstartup
El archivo fuente de Vncserver es ~/.vnc/xstartup
que funciona como un archivo .xinitrc. Como mínimo, los usuarios deben definir un entorno de escritorio para empezar, si se desea un entorno gráfico. Por ejemplo, para iniciar xfce4:
#!/bin/sh export XKL_XMODMAP_DISABLE=1 exec startxfce4
XKL_XMODMAP_DISABLE
es conocida por corregir los problemas asociados con las pulsaciones del teclado «scrambled» al escribir en las terminales bajo algún entorno de escritorio virtualizado.Permisos
Es una buena práctica asegurar ~/.vnc
al igual que ~/.ssh
, aunque esto no es un requisito. Ejecute lo siguiente para hacerlo:
$ chmod 700 ~/.vnc
Iniciar el servidor
Vncserver ofrece flexibilidad mediante la utilización de parámetros. El ejemplo siguiente inicia un vncserver con una resolución específica, lo que permite a múltiples usuarios ver/controlar de forma simultánea, y establece el dpi en el servidor virtual a 96:
$ vncserver -geometry 1440x900 -alwaysshared -dpi 96 :1
Para obtener una lista completa de opciones, pase el parámetro -help a vncserver.
$ vncserver -help
Ejecutar vncserver para controlar directamente la pantalla local
Usar x0vncserver de tigervnc
TigerVNC ofrece el binario x0vncserver que tiene una funcionalidad similar a x11vnc por ejemplo,
$ x0vncserver -display :0 -passwordfile ~/.vnc/passwd
Para más información, véase
man x0vncserver
Usar x11vnc
Otra opción es utilizar el paquete x11vnc. Esto tiene la ventaja o desventaja, dependiendo de su perspectiva, de que requiere root para iniciar el acceso. Para más información, véase X11vnc.
Conectar a vncserver
Cualquier número de cliente se puede conectar a un vncserver. Un ejemplo sencillo se muestra abajo donde vncserver está ejecutandose en 10.1.10.2 en el puerto 5901 (:1) en notación abreviada:
$ vncviewer 10.1.10.2:1
Autenticación sin contraseña
El parámetro -passwd
permite definir la ubicación del archivo ~/.vnc/passwd
en el servidor. Se espera que el usuario tenga acceso a este archivo en el servidor a través de SSH. En cualquier caso, coloque ese archivo en el sistema de archivos del cliente en un lugar seguro, es decir, que tenga acceso de lectura SOLO para el usuario cliente.
$ vncviewer -passwd /ruta/al/archivo-passwd-del-servidor
Ejemplo de clientes basados en interfaz gráfica
Asegurar vncserver por túneles SSH
En el servidor
Si se que quiere acceso a vncserver desde fuera de la protección de una LAN, debe preocuparse por las contraseñas en texto plano y el tráfico sin cifrar desde/hacia el cliente y el servidor. Vncserver es fácilmente asegurable por túneles SSH. Además, no se necesita abrir otro puerto hacia el exterior usando este método, ya que el tráfico se canaliza literalmente a través del puerto SSH que el usuario ya tiene abierto en la WAN. Se recomienda utilizar el parámetro -localhost al ejecutar vncserver en este escenario. Este parámetro solo permite conexiones desde el localhost —y, por analogía, solo los usuarios físicamente autenticados y asegurados en el entorno—.
$ vncserver -geometry 1440x900 -alwaysshared -dpi 96 -localhost :1
En el cliente
Con el servidor funcionando, ahora solo basta aceptar la conexión del equipo local, y conectarse al entorno a través de ssh usando la opción -L para activar los túneles. Por ejemplo:
$ ssh IP_DE_LA_MÁQUINA_DE_DESTINO -L 8900:localhost:5901
Esto redirecciona el puerto 5901 del servidor al escenario del cliente en el pueto 8900. Una vez conectado a través de SSH, deje abierto el termina xterm o la ventana de la shell; ello actuará como un túnel seguro a/desde el servidor. Para conectar a través de VNC, abra un segundo terminal xterm y no se conecte a la dirección IP remota, sino al localhost del cliente, utilizando así la canalización de seguridad:
$ vncviewer localhost::8900
Desde la página de manual de ssh: -L [bind_address:] port:host:hostport
Esto especifica que el puerto dado en el equipo (cliente) local se rediccionará al equipo y al puerto dado en el lado remoto. Esto funciona mediante la asignación de un socket para escuchar al puerto en el lado local, opcionalmente unido al bind_address especificado. Cada vez que se realiza una conexión a este puerto, la conexión se envía a través del canal seguro, y se realiza una conexión al hostport de puerto del equipo desde la máquina remota. Las redirecciones de puertos también se pueden especificar en el archivo de configuración. Las direcciones IPv6 se pueden especificar con una sintaxis alternativa:
[bind_address/] port/host/ hostport o encerrando la dirección entre corchetes. Solo el superusuario puede redireccionar puertos privilegiados. Por defecto, el puerto local está condicionado a la configuración de los puertos de la puerta de enlace. Sin embargo, un bind_address explícito se puede utilizar para obligar a realizar la conexión a una dirección específica. El bind_address de ``localhost'' indica que el puerto de escucha está disponible para uso local solamente, mientras que una dirección vacía o `*' indica que el puerto debe estar disponible en todas las interfaces.
Conectar a un vncserver desde dispositivos Android a través de SSH
Para conectarse a un vncserver sobre SSH usando un dispositivo Android:
1. Ejecutar el servidor SSH en la máquina para conectarse. 2. Ejecutar vncserver en la máquina para conectarse. (ejecutar el servidor con el parámetro -localhost como se mencionó arriba) 3. Cliente SSH en el dispositivo Android (ConnectBot es una opción popular y será utilizada en esta guía como ejemplo). 4. Cliente VNC en el dispositivo Android (androidVNC).
Considere la posibilidad de utilizar algún servicio de DNS dinámico para objetivos que no tienen direcciones IP estáticas.
En ConnectBot, escriba la IP y conéctese a la máquina deseada. Pulse la tecla Opciones, seleccione Redireccionar Puertos y añada un nuevo puerto:
Nickname: vnc Type: Local Source port: 5901 Destination: 127.0.0.1:5901
Guarde esto.
En androidVNC:
Nickname: apodo Password: la contraseña utilizada para configurar vncserver Address: 127.0.0.1 (estamos en local después de la conexión a través de SSH) Port: 5901
Conectar.
Consejos y trucos
Iniciar y detener vncserver en el arranque y apagado a través de systemd
Cree /etc/systemd/system/vncserver@:1.service
y modifíquelo definiendo el usuario para ejecutar el servidor. Utilice esto con systemd para gestionarlo.
/etc/systemd/system/vncserver@:1.service
# Archivo de unidad de servicio de vncserver # # 1. Copiar este archivo a /etc/systemd/system/vncserver@:<display>.service # 2. Edite User= # ("User=foo") # 3. Edite y ajuste adecuadamente los parámetros de vncserver # ("/usr/bin/vncserver %i -arg1 -arg2 -argn") # 4. Ejecute `systemctl daemon-reload` # 5. Ejecute `systemctl enable vncserver@:<display>.service` # # NO EJECUTAR ESTE SERVICIO si su red de área local no es de confianza # # Lea la página wiki para más información sobre seguridad # https://wiki.archlinux.org/index.php/Vncserver [Unit] Description=Servicio de escritorio remoto (VNC) After=syslog.target network.target [Service] Type=simple User= PAMName=login # Limpiar los archivos existentes en el entorno /tmp/.X11-unix ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' ExecStart=/usr/bin/vncserver -geometry 1440x900 -fg -alwaysshared -dpi 100 %i ExecStop=/usr/bin/vncserver -kill %i [Install] WantedBy=multi-user.target
Cambie las opciones en ExecStart, pero mantenga el parámetro -fg para permitir funcionalidades.
Copiar contenidos del portapapeles desde la máquina remota a la local
Si la copia de la máquina remota a la máquina local no funciona, ejecute autocutsel en el servidor, como se menciona a continuación referencia:
$ autocutsel -fork
Ahora presione F8 para mostrar el menú emergente de VNC y seleccione la opción Clipboard: local -> remote
.
Se puede poner la orden anterior en ~/.vnc/xstartup
para que se ejecute automáticamente al arrancar vncserver.
Arreglo cuando no hay ningún cursor del ratón
Si no hay ningún cursor del ratón visible cuando se utiliza x0vncserver
, inicie vncviewer de la siguiente manera:
$ vncviewer DotWhenNoCursor=1 <server>
O ponga DotWhenNoCursor=1
en el archivo de configuración, que se encuentra en ~/.vnc/default.tigervnc
por defecto.
Conectar a un sistema OS X
Véase https://help.ubuntu.com/community/AppleRemoteDesktop. Probado con Remmina.