MeltIT
27Jan/105

Linux VNC Server: fluxbox + X11 Server + X / GUI Apps (uTorrent, JDownloader)

El propósito de esta guía es como levantar un VNC Server, con Fluxbox, donde correrán aplicaciones que necesiten GUI. El destino principal es para una maquina que corra como servidor, además del SSH, esta es una linda interfaz, y muy útil, en especial porque muchos programas útiles, por desgracia, no pueden prescindir de la GUI, como el JDownloader.

Estaré mostrando todo en un sistema Debian, con sudo. Por defecto, Debian no trae sudo, pero una instalación de Ubuntu si, en este sistema debería salir andando perfectamente. Todos los comandos que estén precedidos por sudo, deben ser ejecutados por un administrador en el caso de no tener sudo.

¿Que es un Servidor VNC en sí?:

Un servidor VNC, es un servidor X (servidor grafico, ventanas, en Linux), el cual mantiene una sesión, y es visible mediante un visor VNC. Así es entonces, que en el servidor VNC corremos aplicaciones en un entorno grafico, y podemos acceder a estas y mantenerlas abiertas, desde un visor.

Instalando lo necesario:

sudo apt-get install vnc4server xterm fluxbox wine

wine es opcional, ya que es para el uTorrent.

Primer inicio del VNC Server:

Primer Inicio Servidor VNC

En el primer inicio, el vncserver nos pedirá que le ingresemos una nueva contraseña, esta es para conectarnos luego con el visor,  desde otra computadora por red. Entonces ejecutamos vncserver, y nos pedirá contraseña y confirmación, y luego nos mostrara algo como "New `meltitdescargas:1 (c4b3z0n)` desktop is meltitdescargas:1". El :1, indica la ubicación del display, este puede ser, :1, :2, :3, etc. Lo anterior al :, es el nombre de nuestro sistema (uname -n). De abrir sucesivos vncserver, estos serán, :2, :3, etc.

Nota: Se puede iniciar el servidor eligiendo antes cual será el display, ej, vncserver :5, iniciara el servidor VNC en el display 5, de  estar disponible. Útil para siempre saber donde esta el servidor.

Para matar el servidor, se puede matar el proceso, o invocando vncserver -kill :numero, en mi caso, vncserver -kill :1.

Para reasignar la contraseña del servidor vnc, se utiliza vncpasswd.

Probando el servidor VNC:

Estaré utilizando Windows, y demostrare como conectarse con el VNC Viewer de Real VNC, versión ejecutable sin instalador,  freeware.

En linux, se puede utilizar vncviewer, iniciándolo sin parámetros, hace que el mismo pregunte servidor, contraseña, de forma interactiva.

En ambos casos, primero debemos averiguar la IP del servidor. Esto lo podemos hacer mediante, sudo ifconfig (NOTA, de estar ejecutando en un servidor, seguramente ya le has configurado una IP estática. De no ser así, y si se trata de un servidor, te recomiendo que le asignes una IP estática, lo cual te facilitará la tarea de entrar al servidor siempre), y probablemente sea la de eth0 - inet addr:xxxx.xxx.xxx.xxx.

IP ifconfig

El formato para conectarse al servidor VNC es: ip:numero_display. Entonces en mi caso, 10.0.0.201:1. Luego la contraseña es la que creamos al principio, en el primer inicio del servidor.

Iniciando aplicaciones en el servidor VNC, desde cualquier consola (export DISPLAY):

Para utilizar el servidor VNC como display, nada más hace falta asignar la variable DISPLAY, esta apunta a un servidor X, donde correrán las aplicaciones. En la practica, esto puede ser utilizado para apuntar a cualquier servidor X, no únicamente al VNC.

Tip: Para ver hacia donde apunta actualmente el DISPLAY, basta con hacer un echo $DISPLAY, desde bash.

Para asignar DISPLAY, es tan simple como utilizar export. export, lo que hace es asignar variables de entorno, como DISPLAY.
Para ver los valores, se utiliza echo $VARIABLE, o utilizarlas, se antepone el $. Su sintaxis es: export VARIABLE=VALOR.

La sintaxis de DISPLAY, es, servidor:numero. Combinado con export, sería, export DISPLAY=servidor:numero.

Entonces, para efectivamente utilizar el servidor VNC, suponiendo que este se encuentra en :1, si estamos trabajando en la misma pc (en una terminal en PuTTY por ejemplo), bastará con hacer export DISPLAY=localhost:1. Utilizo localhost, porque estoy en la misma PC. Podría haber utilizado su IP de internet ó LAN también, así como la de otro equipo en la red, ej, export DISPLAY=10.0.0.201:1.

Configurando el servidor VNC - ejecución automática de aplicaciones al inicio del servidor:

El archivo ~/.vnc/xstartup, es un script de bash, que se ejecuta cuando inicia el servidor VNC. Aquí podemos automatizar tareas como ser, abrir el fluxbox, abrir un xterm (por defecto viene así), ó talvez iniciar alguna aplicación. También por defecto se abre el x-window-manager, pero nosotros queremos utilizar fluxbox, entonces:

nano ~/.vnc/xstartup, para editar el archivo.

En la línea x-window-manager &, agregamos un #, al principio de esta, para comentar esa línea, y así evitar la apertura automática del x-window-manager. Debajo de esa línea, agregamos fluxbox &. Si deseamos evitar el inicio de la consola automática, debemos comentar la línea que comienza con x-terminal-emulator, agregando un # al inicio de esta.

Auto-iniciar servidor VNC al prender la PC:

nano /etc/rc.local
El archivo rc.local, en pocas palabras, se ejecuta luego de terminar el proceso de inicio, en ultima instancia. Lo que vamos a hacer, es agregar una línea donde correremos el vncserver así este se inicia automáticamente. Utilizaremos su, que nos permite, mediante el modificador -c, correr un comando como otro usuario, ya que no vamos a correr el servidor como root.

Sintaxis: su -c "comando" nombre_usuario.

Mi usuario es c4b3z0n, y el comando es vncserver :1. La línea nos quedara en: su -c "vncserver :1" c4b3z0n, esta hará que se inicie un servidor vnc, en el display :1, y que se ejecute como el usuario c4b3z0n.

Entonces, en la línea arriba de exit 0, escribimos, su -c "vncserver :1" c4b3z0n &, notar el &, para que se inicie y continúe.

El servidor VNC esta listo en este punto.


Configurando fluxbox:

Esto es totalmente opcional, pero voy a agregarlo ya que me parece útil.
nano ~/.fluxbox/menu
En fluxbox, al presionar el botón derecho, aparece un menú. Este es personalizable, y su ubicación es ~/.fluxbox/menu.

Por defecto en Debian, el archivo es así:

[begin] (fluxbox)
[include] /etc/X11/fluxbox-menu
[end]

La primera línea, [begin], define el comienzo del menú, con título "fluxbox". La segunda línea, [include], define que se incluya el archivo, en este caso, /etc/X11/fluxbox-menu. Esto significa, que utiliza lo que dice el archivo ese al que apunta, que en este caso, es el menú de debian, con todas las aplicaciones. La ultima línea, [end], indica que finaliza el
menú.

Personalmente, voy a sacar la línea [include], ya que tiene muchos programas que no voy a utilizar. Podemos comentarla, agregandole un # al inicio, ó borrarla.

Agregando entradas:
Yo voy a mantener mi menú de fluxbox a lo más chico posible.
La sintaxis para agregar un comando es: [exec] (texto_mostrar) { comando }. Ejemplo de un menú de
fluxbox:

[begin] (fluxbox)
[exec] (Bash) { x-terminal-emulator -T "Bash" -e /bin/bash --login}
[exec] (Leafpad) { leafpad }
[exec] (uTorrent) { wine ~/utorrent.exe /NOINSTALL }
[exec] (JDownloader) { sh ~/startjd.sh }
[end]

Bash, ejecuta la terminal.

Leafpad es un editor de texto liviano para X, esta interesante. (sudo apt-get install leafpad).

En el caso de uTorrent, wine ~/utorrent.exe /NOINSTALL, es un caso de una línea bastante completa y fácil de explicar. En primer lugar, llamamos a wine, quien recibe de parámetro la ubicación del ejecutable y asimismo, le pasamos el parámetro /NOINSTALL, al utorrent.exe. Es un simple proceso, como ejecutar en una terminal.

JDownloader, sh ~/startjd.sh, Utilizamos sh para ejecutar un script, startjd.sh.

En esta configuración se explica básicamente como usar el menú de fluxbox. Es bastante simple, y se pueden usar scripts, como en el caso del JDownloader, para simplificar una línea compleja.

Hasta aquí llega la idea básica de la guía. En otras guías explico como instalar el JDownloader y el uTorrent, como soluciones a un
servidor de descargas básico. Esta guía es una parte importante de la de instalación desde cero de un servidor Linux.