我有一个python代码在远程机器上进行一些计算,名为A.我通过ssh
从名为B的机器连接A.
有没有办法在机器B上显示数字?
答案 0 :(得分:24)
当然,您可以启用X11转发。通常,这是通过在连接到远程计算机时将-X
或-Y
选项传递给ssh
来完成的。
ssh -X computerA
请注意,还必须配置计算机A上的SSH守护程序以启用X11转发。这是通过放
来完成的X11Forwarding yes
在计算机A的sshd_config
配置文件中。
如果计算机A的SSH守护程序没有启用X11转发,您可以随时让Python将计算结果写入文本文件,将其下载到计算机B,并在本地使用Matplotlib。
答案 1 :(得分:23)
如果在远程计算机(B)上的Mac OS X上使用matplotlib,则必须首先确保使用基于X11的显示器后端之一,因为本机Mac OS X后端无法导出绘制到另一个显示器。
可以选择后端import matplotlib
matplotlib.use('GTK') # Or any other X11 back-end
可以通过给use()
一个不正确的后端名称来获取支持的后端列表:matplotlib然后打印一条错误消息,列出可能的后端。
答案 2 :(得分:12)
以下内容适用于本地计算机(机器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远程进入远程计算机A:
ssh -X user@machineA
然后在远程机器上:
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
(例如matplotlib.pyplot
)
有关使用ssh -X的其他有用的故障排除提示:http://oroborosx.sourceforge.net/remotex.html#usessh
答案 3 :(得分:7)
GTK似乎无法使用Python3在Ubuntu上工作。相反,我使用了tkagg(来自this回答):
import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt
用这个测试:
import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
plt.show()
答案 4 :(得分:1)
如果这不起作用,您也可以尝试:
import matplotlib.pyplot as plt
plt.switch_backend('agg')
或
import matplotlib.pyplot as plt
plt.switch_backend('TkAgg')
这似乎对我有用
但是,如果您要使GUI正常工作,建议您查看以下链接:http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/
答案 5 :(得分:0)
我已经使用IPython解决了相关问题。步骤如下:
步骤1:使用以下命令在本地计算机(假定没有root特权)中在远程计算机(A)中安装IPython和Jupyter:
pip install --user ipython
pip install --user jupyter
更新matplotlib:
pip install --user -U matplotlib
第2步:
在没有浏览器的情况下从远程计算机(A)的代码目录中运行Jupyter:
cd PATH/TO/THE/CODE
jupyter notebook --no-browser --port=8080
执行此命令后,将给URL类似于以下内容:
http://localhost:8080/?token=5528ab1eeb3f621b90b63420f8bbfc510edf71f21437c4e2
第3步:
现在在本地计算机(B)中打开另一个终端,并使用ssh连接到远程计算机(A):
ssh -N -L 8080:localhost:8080 user_id@remote.host
步骤2 和步骤3 中的端口号必须相同。在此示例中,端口号为8080。
第4步:
将第3步中的URL复制并粘贴到本地计算机中的浏览器(B)。
现在,可以通过浏览器使用远程计算机中的笔记本,并可以使用远程计算机中的数据生成绘图。
答案 6 :(得分:0)
export MPLBACKEND="agg"
对我有用。
显然,您也可以通过代码进行设置。
答案 7 :(得分:0)
只需添加-如果您在Windows上作为本地计算机,请确保已设置Xming(X Windows服务器)和Putty,以便可以查看远程Linux图形应用程序。
我按照此处的说明进行操作:http://laptops.eng.uci.edu/software-installation/using-linux/how-to-configure-xming-putty。它还设置了您的显示环境和变量,因此在使用tkagg
作为后端时不会出现错误。
答案 8 :(得分:0)
如果您使用 Mac 作为客户端机器,请试试这个。
您基本上需要确保两件事正常工作。
matplotlib
的后端。matplotlib
的后端如果您使用 python3
,则必须安装 cairocffi
。
pip install cairocffi
然后使用 GTK3Agg 作为 matplotlib 的后端。
import matplotlib
matplotlib.use('GTK3Agg')
import matplotlib.pyplot as plt
有关详细信息,请参阅以下来自 matplotlib document 的说明。
<块引用>无论是 GTK2 还是 GTK3,都对 PyCairo 有隐式依赖 使用的特定 Matplotlib 后端。不幸的是最新版本 PyCairo for Python3 没有实现所需的 Python 包装器 用于 GTK3Agg 后端。 Cairocffi 可以用作替代品 实现正确的包装器。
ssh -X
连接到远程服务器。例如) ssh username@ipaddress -X
答案 9 :(得分:0)
这就是我在 MacOS 和 Linux 远程机器上所做的。
XAuthLocation /opt/X11/bin/xauth
import matplotlib.pyplot as plt
x = [1,2,3]
y = [2,4,1]
plt.plot(x, y)
plt.show()