【问题标题】:No display name and no $DISPLAY environment variable using tkinter through ssh [duplicate]通过 ssh 使用 tkinter 没有显示名称和 $DISPLAY 环境变量 [重复]
【发布时间】:2013-10-18 23:59:01
【问题描述】:

我正在尝试运行一个在集群中输出 .png 文件的非常简单的代码。代码如下:

import matplotlib.pyplot as plt
import numpy as np

x = np.random.randn(60)
y = np.random.randn(60)

plt.scatter(x, y, s=20)

out_png = 'path/to/store/out_file.png'
plt.savefig(out_png, dpi=150)

如果我在安装了 matplotlib 1.2.1 的系统中使用命令 python simple_code.py 运行此代码,我会收到警告:

Unable to load library icui18n "Cannot load library icui18n:

.png 图像仍然生成,所以我在这里没有问题。但是,如果我在安装了 matplotlib 1.3.0 的集群中使用相同的命令和代码,则会失败并出现错误:

Traceback (most recent call last):
  File "simple_code.py", line 33, in <module>
    plt.scatter(x, y, s=20)
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 3078, in scatter
    ax = gca()
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 803, in gca
    ax =  gcf().gca(**kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 450, in gcf
    return figure()
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 423, in figure
    **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 79, in new_figure_manager
    return new_figure_manager_given_figure(num, figure)
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 87, in new_figure_manager_given_figure
    window = Tk.Tk()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1712, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable

这里发生了什么?


添加,这是我用来登录集群的脚本:

#!/usr/bin/expect

set login "user"
set addr "address1"
set addr2 "address2"
set pw "password"

spawn ssh -X $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "$login@host:"
send "ssh -X $addr2\r"
expect "$login@$addr\'s password:"
send "$pw\r"
interact

【问题讨论】:

  • 你是通过ssh运行这个吗?
  • 是的,我是赛斯莫顿。我设置了作业,让它通过ssh在集群中运行。
  • 当你调用ssh时,你使用-X标志吗?
  • 我在这篇文章中添加了ssh 标签。我认为您应该将标题更改为“通过 ssh 使用 tkinter 没有显示名称和没有 $DISPLAY 环境变量”,因为这是真正的问题,并且更容易搜索具有相同问题的其他人(我不喜欢更改其他人的标题。) .
  • 我将删除我的答案并将您定向到以下 SO 问题。它实际上几乎是这个问题的完全重复。 stackoverflow.com/q/2801882/1399279。它会解决你的问题。

标签: python numpy ssh matplotlib tkinter


【解决方案1】:

您的问题出在 ssh 命令中。你需要做的就是这样写:

ssh -X "your_login"

【讨论】:

  • 作为仅供参考,这不是解决 OP 问题的方法。我在自己的答案中提出了建议,然后当 OP 告诉我它没有解决问题时将其删除。问题与此处给出的问题相同,并且还包含解决方案:stackoverflow.com/q/2801882/1399279
  • 提醒一下,ssh -X 有时可能会给你类似Warning: untrusted X11 forwarding setup failed: xauth key data not generated 这样的警告,在这种情况下你应该改用ssh -Y
  • -Y 对我有用(-X 没有)。谢谢@YuxuanChen
猜你喜欢
  • 1970-01-01
  • 2016-10-02
  • 2015-05-08
  • 2018-09-03
  • 2019-11-03
  • 1970-01-01
  • 2019-10-09
  • 2020-10-24
  • 1970-01-01
相关资源
最近更新 更多