摘要:当本地计算机运行OS X时,如何通过SSH将数字绘制到远程计算机上?
我有计算机A,我正在尝试使用matplotlib在计算机B上绘图。我遇到的问题是,当我使用matplotlib时,图表只显示在计算机A上。我VNC进入并观看它们弹出。我可以将ssh -X / -Y插入计算机A并运行xcalc,它将显示在计算机B上。我可以将计算机B连接到第三台计算机,运行Red Hat,并且计算机B上将显示绘图。我确信它不是电脑B就是问题所在。 I believe my problem is the same as this problem: none of the package installers support X11 backends for matplotlib.我无法发表评论,所以我在新问题中坚持把我尝试过的东西放进去。 This is another description of the same problem with multiple solution attempts that do not work.
如上所述,我在installing backends for matplotlib on Computer A方面尝试了很多解决方案。我已经尝试了所有的macports和自制和pip组合。我很确定混合这么多的包处理程序是一个坏主意,但是很多解决方案似乎都是“sudo ***** install package-name”。
要测试matplotlib是否正在执行我想要的操作,请使用以下python代码段:
import matplotlib
matplotlib.use('gtk') # gtk is an example, I change it
import matplotlib.pyplot as plt
plt.ion()
plt.figure(1)
plt.plot([1]*10)
我不记得我尝试过的所有事情。我试过的一些事情:
I tried using GTK和GTKCairo,因为我无法让GTK工作而无法解决我的问题。 Homebrew GTK does not support X11 anymore anyway, so even if it did install properly I don't think it will solve my problem.我还没有尝试过以其他方式安装GTK。我是否必须从源代码安装它?有人有这个工作吗?
GTK错误:
ImportError: No module named _backend_gdk
后端MacOS,TkAgg,qt5agg都工作但数字显示在计算机A上。我必须安装pyqt5。如果我没有通过VNC连接,那么python将抛出一个关于没有显示的错误。这三个都给出了同样的错误:
Feb 22 13:00:22 Python[57649] <Error>: Set a breakpoint at CGSLogError to catch errors as they are logged.
Feb 22 13:00:22 Python[57649] <Error>: This user is not allowed access to the window system right now.
_RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
This does not solve my problem. This doesn't either.
详细说明:
计算机A运行OS X 10.11 计算机B运行OS X 10.12
编辑: 我从源代码安装了PyQt4(以及QT)并没有帮助。我明确下载并安装了X11版本。我设置matplotlib.use('qt4agg')并且数字仍然出现在计算机A上。也许这是我为“macosx”安装的QT?我不知道
答案 0 :(得分:0)
This ended up leading me to the right answer.问题是我无法安装使用X11的后端。事实证明,macports有一个使用x11的tk版本。我认为这实际上是使用macports安装python时的默认设置。
我从OS X服务器(计算机A)获取matplotlib绘制ssh / X11的步骤是:
1)卸载matplotlib的先前macports安装和tk:
sudo port uninstall py27-matplotlib
sudo port uninstall py27-tkinter
sudo port uninstall tk
2)重新安装matplotlib以使用X11
sudo port install tk
sudo port install py27-tkinter
sudo port install py27-matplotlib -cairo +tkinter
可能没有必要使用“-iro”。 tk没有标志,因为x11是默认值。
3)测试python + matplotlib:
import matplotlib
matplotlib.use('tkagg') # set the backend to tk, using agg renderer
import matplotlib.pyplot as plt
plt.ion()
plt.figure(1)
plt.plot([1]*10)
这会在计算机B上打开一个数字。
一些注意事项:
1)确保$ PYTHONPATH环境变量中没有任何内容指向由另一个安装程序执行的python安装,如homebrew或system python。它可能导致错误安装matplotlib加载。
3)正如我原来的帖子所述,Homebrew does not support X11 anymore for GTK.有,apparently a way to get homebrew to use tk with X11,但我还没弄清楚如何让它发挥作用。