I have a python code doing some calculation on a remote machine, named A. I connect on A via ssh from a machine named B.
Is there a way to display the figure on machine B?
I have a python code doing some calculation on a remote machine, named A. I connect on A via ssh from a machine named B.
Is there a way to display the figure on machine B?
GTK seems impossible to get working on Ubuntu with Python3. Instead, I used tkagg (from this answer):
import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt
Test that it's working with this:
import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
plt.show()
I have used IPython to solve the related problem. The steps are as follows:
Step 1: Install IPython and Jupyter in the remote machine (A) locally (assuming no root privilege) using the following commands:
pip install --user ipython
pip install --user jupyter
Update matplotlib:
pip install --user -U matplotlib
Step 2:
Run Jupyter with no browser from the code directory in the remote machine (A):
cd PATH/TO/THE/CODE
jupyter notebook --no-browser --port=8080
After this command, a URL will be given something similar to below:
http://localhost:8080/?token=5528ab1eeb3f621b90b63420f8bbfc510edf71f21437c4e2
Step 3:
Now open another terminal in the local machine (B) and connect to the remote machine (A) using ssh:
ssh -N -L 8080:localhost:8080 user_id@remote.host
The port number has to be same in step 2 and step 3. In this example, the port number is 8080.
Step 4:
Copy and paste the URL in the step 3 to a browser in your local machine (B).
Now, the notebook in the remote machine can be used through the browser and plot can be generated using the data in the remote machine.
export MPLBACKEND="agg" this worked for me.
obviously you can set it via code as well.
if that doesn't work you could also try:
import matplotlib.pyplot as plt
plt.switch_backend('agg')
or
import matplotlib.pyplot as plt
plt.switch_backend('TkAgg')
this seemed to work for me
Yet, if you are trying to get a GUI working I suggest you look at this link: http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/
Just wanted to add - if you're on Windows as the local machine, make sure you've set up Xming (an X Windows server) and Putty so you can see the remote Linux graphical applications.
I followed the instructions from here: http://laptops.eng.uci.edu/software-installation/using-linux/how-to-configure-xming-putty to do this. It also sets your display environment and variable so you don't get an error when using tkagg as the backend.
If you're using a mac as a client machine, try this.
You basically need to make sure two things are working properly.
matplotlib's backend.matplotlib's backendIf you're using python3, you must install cairocffi.
pip install cairocffi
Then use the GTK3Agg as a backend of matplotlib.
import matplotlib
matplotlib.use('GTK3Agg')
import matplotlib.pyplot as plt
See following description from matplotlib document for more detail.
Both GTK2 and GTK3 have implicit dependencies on PyCairo regardless of the specific Matplotlib backend used. Unfortunatly the latest release of PyCairo for Python3 does not implement the Python wrappers needed for the GTK3Agg backend. Cairocffi can be used as a replacement which implements the correct wrapper.
ssh -X. ex) ssh username@ipaddress -XThis is what I did with MacOS and a Linux remote machine.
XAuthLocation /opt/X11/bin/xauth
import matplotlib.pyplot as plt
x = [1,2,3]
y = [2,4,1]
plt.plot(x, y)
plt.show()