Convertir una Raspberry Pi en un escritorio remoto para máquinas virtuales Proxmox (parte 2)
Si has aterrizado directamente en este artículo, habrás deducido por el título que existe una primera parte. Pues bien, antes de continuar te aviso de que te va a resultar imprescindible haberla leído antes de continuar aquí.
Si ya la has leído, o lo que sería aún mejor, la has puesto en práctica, probablemente te habrás planteado algunas cuestiones como las siguientes:
-
Al final de la primera parte comprobamos que todo funcionaba correctamente desde la cuenta de usuario predeterminada de la Raspberry Pi pero, ¿qué pasaría si en nuestra Raspberry Pi tenemos más de una cuenta de usuario y quisiéramos que todas ellas se beneficiaran de esta nueva característica?
-
¿Podríamos conseguir que la Raspberry Pi se comportara como un verdadero cliente ligero y no permitiera realizar ninguna tarea de forma local?. Así podríamos obligar a un futuro usuario a utilizar únicamente las máquinas virtuales que le facilitáramos en Proxmox VE.
-
Si hemos evitado que la Raspberry Pi se utilice de forma local, podríamos revertir la situación.
Pues bien, hoy en SomeBooks.es estamos a punto de dar respuesta a todas esas inquietudes. Así es que, si estás listo, comencemos…
Tanto este artículo como el anterior se basan en el contenido del artículo PVE-VDIClient – A Python Graphical VDI Client for Proxmox que, a su vez, utiliza la interfaz gráfica para seleccionar clientes ligeros de Josh Patten.
Conseguir que otras cuentas de usuario utilicen escritorios remotos
Como hemos dicho más arriba, al final del artículo anterior dejamos todo listo para que la cuenta predeterminada, o la que estemos utilizando en ese momento, siempre que forme parte del grupo administradores, pueda usar de forma remota una máquina virtual almacenada en un servidor Proxmox VE.
Sin embargo, si lo que necesitamos es que, cualquier cuenta local en la Raspberry Pi pueda utilizar esa funcionalidad, basta con copiar copiar el archivo vdiclient.py a la carpeta /usr/local/bin/.
Primero nos aseguramos de encontrarnos en la carpeta apropiada:
cd ~/PVE-VDIClient
Y a continuación realizamos la copia del archivo:
sudo cp vdiclient.py /usr/local/bin/vdiclient
De paso, podemos aprovechar para copiar las imágenes que utiliza el programa, aunque ten en cuenta que puedes utilizar las tuyas propias:
sudo cp vdiclient.png /etc/vdiclient/ sudo cp vdiicon.ico /etc/vdiclient/
Con esto, habremos completado el primer objetivo de este artículo.
Evitar que la cuenta de usuario funcione de forma local
Imagina que estás preparando este sistema para utilizarlo con los trabajadores de una empresa o con los alumnos de un colegio. En estos casos, puede que no te interese que la Raspberry Pi se utilice de forma local.
Si obligas al usuario a utilizar siempre un escritorio remoto, estarás forzándolo a utilizar un entorno controlado. Me resulta sencillo pensar, por ejemplo, en un script que recupere el estado original de algunas (o todas) las máquinas de un servidor Proxmox VE todas las noches a una hora concreta. Así, los trabajadores (o los alumnos) se encontrarían todas las mañanas sus máquinas como recién instaladas, sin importar los cambios que hicieran el día anterior.
Pues bien, la idea que te proponemos consiste en iniciar sesión automáticamente en la Raspberry Pi con la cuenta predeterminada. Después, durante el inicio de sesión ejecutamos un script que lance el cliente VDI que instalamos en el artículo anterior. Si esto lo ponemos en un bucle infinito, el usuario no podrá dejar de ejecutarlo.
Le quedaría la alternativa de mostrar el modo consola para tratar de revertir los cambios que vamos a implementar ahora, pero necesitará la contraseña de la cuenta, que no debemos darle.
Pues bien, una vez fijado el objetivo, comencemos…
Como hemos dicho antes, lo primero será conseguir que la cuenta de usuario inicie sesión automáticamente. Si utilizas, como yo, la cuenta de usuario predefinida en la Raspberry Pi (que siempre se llama pi), este comportamiento es el predeterminado, luego lo tenemos resuelto.
En el contexto que nos encontramos, la cuenta predeterminada no tiene por qué estar sometida a ataques externos. Sin embargo, debes pensar que la cuenta pi es conocida por todos los hackers del planeta.
En muchos lugares se aconseja deshabilitarla y sustituirla por otra cuenta, con el nombre que tú elijas y que forme parte del grupo sudo. Si decides tomar esta precaución, puedes necesitar la ejecución del programa raspi-config para conseguir que esa nueva cuenta inicie sesión de forma automática.
A continuación, evitaremos que la interfaz gráfica de la Raspberry Pi (que es LXDE) se inicie automáticamente. Para ello, sustituiremos su archivo de inicio automático por uno en blanco.
Comenzamos desplazándonos al directorio /etc/xdg/lxsession/LXDE-pi:
cd /etc/xdg/lxsession/LXDE-pi
Y renombrando el archivo original, como precaución por si lo necesitamos más adelante. Así, el sistema no lo encontrará, pero no lo habremos eliminado:
sudo mv autostart autostart.bak
A continuación, creamos un nuevo archivo vacío para asegurarnos de que LXDE no produce un error durante su inicio:
sudo touch autostart
Lo siguiente será crear un archivo de inicio automático para la cuenta de usuario. Debemos hacerlo en la ruta ~/.config/lxsession/LXDE-pi (recuerda que el carácter ~ representa de forma abreviada al directorio de inicio de la cuenta actual, en nuestro ejemplo, equivale a /home/pi).
Primero, creamos la ruta:
mkdir -p ~/.config/lxsession/LXDE-pi
El argumento -p se encarga de crear la parte del árbol de directorios que falte en la ruta indicada.
Y, a continuación, nos desplazamos hasta ella:
cd ~/.config/lxsession/LXDE-pi
A continuación, cambiamos el nombre del archivo de inicio automático predeterminado de la cuenta de usuario. Como hicimos con el archivo de la interfaz gráfica, así evitamos que el sistema lo encuentre, pero podremos recuperarlo en cualquier momento.
Al diferencia, en este caso, es que el archivo puede no existir. En ese caso recibiremos un error, pero no te preocupes, es algo normal.
mv autostart autostart.bak
A continuación, crearemos un archivo nuevo:
nano autostart
Y dentro del archivo escribimos una orden como esta:
@/usr/bin/bash /home/pi/thinclient
Básicamente, estamos diciendo que se utilice el intérprete de comandos Bash para ejecutar el script llamado thinclient que almacenaremos en la ruta /home/pi.
Una vez completado el contenido, pulsamos la combinación de teclas Control + X para salir del editor… Pero debes asegurarte de guardar los cambios.
Lógicamente, ahora falta crear el script al que hemos hecho referencia arriba.
En su interior, escribiremos un contenido como este:
#nos cambiamos al directorio PVE-VDIClient de la ruta donde se encuentra la imagen cd ~/PVE-VDIClient #Ejecutamos el cliente en un bucle para que el usuario no pueda cerrarlo while true do /usr/bin/python3 ~/PVE-VDIClient/vdiclient.py done
Como antes, al final pulsamos la combinación de teclas Control + X para salir del editor, asegurándonos de guardar los cambios.
Después de esto, solo nos quedará reiniciar. Por ejemplo, ejecutando lo siguiente:
sudo reboot
Un momento más tarde, nos encontraremos con un escritorio vacío que solo nos muestra la ventana del cliente VDI.
Recuperar el estado original del escritorio
Afortunadamente, todos los cambios que hemos venido implementando en este artículo son reversibles. Así, si necesitas volver atrás en algún momento, solo tienes que abrir una nueva ventana de terminal y aplicar los pasos que te indicamos a continuación.
Puedes abrir la ventana de terminal usando la combinación de teclas Alt + Control + T.
Lo primero será conseguir que el escritorio del usuario se vuelva a cargar con normalidad. Para conseguirlo, volveremos al directorio ~/.config/lxsession/LXDE-pi que ya visitamos en el apartado anterior:
cd ~/.config/lxsession/LXDE-pi
Y cambiamos el nombre del archivo autostart, que creamos entonces por autostart.new. Así conseguimos dos cosas: que el sistema no lo encuentre al iniciarse y conservarlo, por si necesitamos utilizarlo más adelante para revertir el cambio que estamos haciendo.
mv autostart autostart.new
Por úiltimo, restituimos el archivo autostart original, que en estos momentos se llama autostart.bak:
mv autostart.bak autostart
Observa que, en mi imagen, aparece un error en este punto. El motivo es que el archivo autostart original no existía y, por lo tanto, no hay nada que recuperar.
A continuación, debemos recuperar el inicio normal de la interfaz gráfica. Lo conseguiremos volviendo al directorio /etc/xdg/lxsession/LXDE-pi y deshaciendo los cambios que hicimos:
cd /etc/xdg/lxsession/LXDE-pi
Como antes, cambiamos el nombre del archivo autostart por autostart.new para evitar que el sistema lo encuentre y poder utilizarlo más adelante, si es necesario:
sudo mv autostart autostart.new
Y recuperamos el archivo autostart original, que habíamos renombrado en su momento como autostart.bak:
sudo mv autostart.bak autostart
Llegado este momento, solo nos queda reiniciar el sistema para comprobar que todo funciona correctamente.
sudo reboot
Un momento más tarde, estaremos ante el escritorio de nuestra Raspberry Pi como si nada hubiese ocurrido.
Y hasta aquí el contenido de este artículo. Espero que te haya resultado útil.