2010-08-10 16 views
30

Tengo un código python haciendo algunos cálculos en una máquina remota, llamada A. Me conecto en A a través de ssh desde una máquina llamada B. ¿Hay alguna manera de mostrar la figura en la máquina? ¿SEGUNDO?Matplotlib: mostrar el diagrama en una máquina remota

+0

relacionadas: http://stackoverflow.com/questions/2801882/generating-a-png-with-matplotlib-when-display-is- undefined? lq = 1 –

Respuesta

23

Si usa matplotlib en Mac OS X, primero debe asegurarse de utilizar uno de los servidores de la pantalla basados ​​en X11, ya que el back-end nativo de Mac OS X no puede exportar sus gráficos. Selección de un programa de fondo se puede lograr con

import matplotlib 
matplotlib.use('GTK') # Or any other X11 back-end 

La lista de back-ends soportados se pueden obtener dando use() un nombre de back-end incorrecto: matplotlib luego imprime un mensaje de error que enumera los posibles fines de la espalda.

ssh El reenvío de X11 se puede usar para mostrar tramas de matplotlib.

+2

Te hará instalar 'pygtk' para hacer eso, y parece que es imposible o una molestia total hacerlo con Python 3. – sudo

+1

Esto definitivamente depende de tu plataforma y administrador de paquetes. En macOS, MacPorts tiene un paquete py27-pygtk que debe hacer que la instalación sea sencilla para Python 2. – EOL

+1

@sudo Comprobé todos los back-ends compatibles. En mi caso, los back-ends de 'TkAgg' y' GTK3Cairo' funcionaron para Python 3. 'TkAgg' parece ser más rápido. – epokhe

21

Claro, puede habilitar el reenvío X11. Por lo general, esto se hace pasando la opción -X o -Y a ssh cuando se conecta a la computadora remota

ssh -X computerA 

Tenga en cuenta que el demonio SSH en el equipo A también tendrá que ser configurado para activar el reenvío de X11. Esto se hace poniendo

X11Forwarding yes 

en el archivo de configuración de un equipo sshd_config.

Si el daemon SSH de la computadora A no tiene habilitado el reenvío X11, siempre puede hacer que Python escriba el resultado del cálculo en un archivo de texto, lo descargue a la computadora B y use Matplotlib localmente.

+0

gracias, pero ¿dónde está el sshd_config? – Mermoz

+1

actualización: está en/etc/sshd_config – Mermoz

+2

para mí fue/etc/ssh/sshd_config – zanbri

9

Lo siguiente funcionó para mí usando Mac OS X en la máquina local (máquina B) y ubuntu en el control remoto (máquina A).

Necesita el servidor X11 instalado en su máquina local para hacer esto.

Si está ejecutando una versión reciente de Mac OSX (OS X Mountain Lion o posterior), NO vendría con X11 preinstalado (consulte http://support.apple.com/kb/ht5293). Compruebe si tiene X11 abriendo el terminal Mac y ejecute el comando xterm. Si se abre una ventana X11, ya está todo listo. Si dice que no se encontró el comando, vaya a http://xquartz.macosforge.org/landing/ e instale el servidor X11. Luego cierre la sesión y vuelva a iniciar sesión en su mac.

Después de volver a iniciar sesión, intente ejecutar de nuevo el comando xterm. Debería abrir la ventana X11. En este punto, su variable $ DISPLAY también debe configurarse correctamente. Si no está configurado, asegúrese de haber ingresado/desconectado desde la instalación de X11 de XQuartz.

echo $DISPLAY 
/tmp/launch-I9I3aI/org.macosforge.xquartz:0 

Luego de su máquina local, el uso de ssh -X a distancia en un equipo remoto:

ssh -X [email protected] 

A continuación, en la máquina remota:

python 
>>> import matplotlib 
>>> matplotlib.use('GTKAgg') #I had to use GTKAgg for this to work, GTK threw errors 
>>> import matplotlib.pyplot as plt #... and now do whatever you need... 

Asegúrate de que llamar matplotlib.use ANTES importar cualquier cosa desde matplotlib (por ej.matplotlib.pyplot)

Otros consejos útiles para solucionar problemas sobre el uso de ssh -X: http://oroborosx.sourceforge.net/remotex.html#usessh

Cuestiones relacionadas