2010-08-10 58 views
30

我有一個python代碼在名爲A的遠程計算機上進行一些計算。我通過名爲B的計算機上的ssh連接到A上。 是否有方法在計算機上顯示圖形B'Matplotlib:遠程計算機上的顯示圖

+0

相關鏈接:http://stackoverflow.com/questions/2801882/generating-a-png-with-matplotlib-when-display-is-上使用ssh -X matplotlib.pyplot

其他有用的故障排除技巧undefined?lq = 1 – 2014-02-28 05:48:16

回答

23

如果您在Mac OS X上使用matplotlib,則必須首先確保您使用的是基於X11的顯示後端之一,因爲本機Mac OS X後端無法導出其圖。選擇後端可以

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

支持後端的列表來實現可以通過給use()不正確的後端名獲得:matplotlib然後打印出錯誤消息,列出了可能的後端。

ssh然後可以使用X11轉發來顯示matplotlib圖。

+2

它會讓你安裝'pygtk'來做到這一點,看起來要麼是不可能的,要麼是用Python 3來完成這個任務。 – sudo 2017-07-20 23:26:16

+1

這絕對取決於你的平臺和包管理器。在macOS上,MacPorts有一個py27-pygtk軟件包,可以使Python 2的安裝順利進行。 – EOL 2017-07-22 13:17:57

+1

@sudo我檢查了所有支持的後端。在我的例子中,'TkAgg'和'GTK3Cairo'後端爲Python 3工作。'TkAgg'似乎更快。 – epokhe 2017-09-09 01:11:22

21

當然,您可以啓用X11轉發。通常,這是通過將-X-Y選項ssh當您連接到遠程計算機

ssh -X computerA 

注意做到這一點在計算機A上的SSH服務也必須被配置爲允許X11轉發。這是通過把

X11Forwarding yes 

在計算機A的sshd_config配置文件。

如果計算機A的SSH守護程序未啓用X11轉發,則可以始終讓Python將計算結果寫入文本文件,將其下載到計算機B,並在本地使用Matplotlib。

+0

謝謝,但sshd_config在哪裏? – Mermoz 2010-08-10 20:57:11

+1

更新:它在/ etc/sshd_config – Mermoz 2010-08-10 21:03:08

+2

對我來說它是/ etc/ssh/sshd_config – zanbri 2015-10-05 13:42:17

9

以下方法適用於本地計算機(計算機B)上的Mac OS X和遠程計算機(計算機A)上的ubuntu。

您需要在本地計算機上安裝X11服務器才能執行此操作。

如果您正在運行最新版本的Mac OSX(OS X Mountain Lion或更新版本),則不會預裝X11(請參閱http://support.apple.com/kb/ht5293)。打開Mac終端檢查是否有X11,並運行命令xterm。 如果打開一個X11窗口,你就全部設置好了。如果它說沒有找到命令,則請轉至http://xquartz.macosforge.org/landing/並安裝X11服務器。然後註銷並重新登錄到您的Mac。

重新登錄後,嘗試再次運行xterm命令。它應該打開X11窗口。 此時您的$ DISPLAY變量也應該正確設置。如果未設置,請確保自XQuartz安裝X11以來已登錄/註銷。

echo $DISPLAY 
/tmp/launch-I9I3aI/org.macosforge.xquartz:0 
從本地機器上,用ssh -X遠程連接到遠程機器

然後:

ssh -X [email protected] 

然後在遠程機器上:

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... 

,請務必讓matplotlib.use前從matplotlib(例如http://oroborosx.sourceforge.net/remotex.html#usessh