-LliureX 15
Es recomendable antes de leer esta entrada que conozcamos un poco que es el sistema n4d. El lenguaje que se usa para programar plugins de n4d es principalmente python. Por eso es recomendable tener unas nociones básicas en este lenguaje de programación para poder seguir esta entrada. Podéis encontrar información detallada al respecto en los siguientes enlaces:
http://mundogeek.net/tutorial-python/
http://librosweb.es/libro/python/
Aunque se encuentren explicaciones sobre código en esta entrada, esta no pretende ser un tutorial de python, por lo que es recomendable tener algunas nociones básicas de programación.
Para invocar funcionalidades n4d sobre un sistema en lenguajes como pyn o javascript, necesitaremos un servidor con n4d corriendo. Así, por ejemplo en python podemos hacer llamadas xmlrpc de la siguiente manera.
En primer lugar, ejecutaremos python:
Python 2.7.12 (default, Nov 19 2016, 06:48:10) [GCC 5.4.0 20160609] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>
Y cargaremos la libreria xmlrpc
>>> import xmlrpclib
Ahora ya tenemos la libreria cargada, habrá que decirle al sistema a que máquina queremos que se conecte, que soporte llamadas xmlrpc.
>>> client=xmlrpclib.ServerProxy("https://IP_DE_NUESTRA_MÁQUINA:9779")
Así ya podemos ejecutar peticiones a nuestra máquina:
>>> mirror=client.get_variable("", "VariablesManager", "LLIUREXMIRROR") >>> print mirror {'llx16': {'exception_msg': '', 'status_mirror': 'Ok', 'mirror_size': '14.258067918', 'progress': 100, 'last_mirror_date': '30/01/2017'}}
Una de las funcionalidades que presenta n4d es el plugin n4d-remote-gui-pluguin que permite lanzar interfície gráfica desde cualquier máquina que tengamos conectada a nuestra red través del servidor gráfico Xephyr.
Este plugin presenta dos clases que podemos utilizar, para conocerlas podemos ejecutar:
n4d-client getmethods | grep Gui
Fíjate que Gui, la G está en mayúscula. Así tendremos la siguiente salida donde podemos ver tres clases: RemoteWebGu, RemoteGuiManager y GuiLauncherManager.
[RemoteWebGui] run_into_connection : anonymous [RemoteWebGui] remote_execute : anonymous [RemoteWebGui] create_connection : anonymous [RemoteWebGui] close_connection : anonymous [RemoteGuiManager] remote_execute : anonymous [GuiLauncherManager] register_display : adm admins [GuiLauncherManager] execute : adm admins
Una es para lanzar interfaces gráficas en local (a una máquina remota), otra interfícies remotas (a una máquina local) y finalmente tenemos uan clase para lanzar interfícies remotas en una página web. RemoteWebGui no forma parte del paquete de n4d-remote-gui-plugin, se usa para el admin-cente en LliureX 16. Vamos a ver algunos ejemplos de utilitzación del paquete.
La clase GuiLauncherManager proporciona un método para lanzar una aplicación en una máquina remota. Vamos a usar el método con n4d-client:
n4d-client -h 172.27.104.107 -c GuiLauncherManager -m execute -u lliurex -p lliurex -a " " lliurex "firefox wiki.lliurex.net"
Vamos a analizar la instrucción:
Opción | Función |
---|---|
-h | Dirección IP del host que servirá la función (host remoto). |
-c | Clase donde se encuentra el método que queremos usar. |
-m | Método que vamos a usar. |
-u | Usuario del host remoto. El método no es anónimo por lo que es necesario proporcionar un usuario del grupo adm. |
-p | Contraseña del host remoto. |
-a | Atributos de la función. En este caso " " es la ip desde dónde se invoca la petición que se autocompleta, lliurex es el usuario que queremos que se ejecute la aplicación y finalmente firefox es la aplicación que queremos lanzar. |
De esta manera se abrirá el firefox en el ordenador remoto.
Otra opción que tenemos es la de ejecutar en nuestra máquina uns instancia remota.
n4d-client -c RemoteGuiManager- m remote_execute -a $USER "caja" 172.27.104.107 lliurex lliurex True
Los parámetros que usamos son:
Opción | Función |
---|---|
-c | Clase donde se encuentra el método que queremos usar. |
-m | Método que vamos a usar. |
-a | |
$USER: Usuario local. | |
"caja": Programa que queremos ejecutar | |
IP: Ip del host remoto. | |
lliurex: Usuario del host remoto. | |
lliurex: Contraseña | |
True: Este parámetro indica que la aplicación se lanzará como sudo |
Lo que estamos haciendo es lanzar el programa caja como sudo en el ordenador donde estamos conectado, de manera que los ficheros que veremos seran los del otro ordenador. Además podremos modificar cualquier archivo ya que hemos lanzado el programa como sudo.