No display name and no $DISPLAY environment variable using tkinter through ssh
90,516
Your problem is in ssh command. What you need to do is to write it this way:
ssh -X "your_login"
Author by
Gabriel
Updated on July 31, 2020Comments
-
Gabriel almost 4 years
I'm trying to run a very simple code that outputs a .png file in a cluster. Here's the code:
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)
If I run this code with the command
python simple_code.py
in my system which has matplotlib 1.2.1 installed I get the warning:Unable to load library icui18n "Cannot load library icui18n:
The .png image is still produced so I have no problems here. But if I use the same command and code in a cluster which has matplotlib 1.3.0 installed it fails with the error:
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
What is happening here?
Add, this is the script I use to login into the cluster:
#!/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
-
SethMMorton about 10 yearsAs an FYI, this was not the solution to the OP's problem. I had suggested in my own answer and then deleted it when the OP told me that it did not fix the problem. The problem identical to the one given here, and it also contains the solution: stackoverflow.com/q/2801882/1399279.
-
Ethan Chen about 7 yearsJust a reminder,
ssh -X
may at times give you warnings likeWarning: untrusted X11 forwarding setup failed: xauth key data not generated
in which case you should dossh -Y
instead. -
Serendipity about 5 yearsThe -Y worked for me (the -X didn't). Thanks @YuxuanChen