I use the following type of code to create a gif animation:
using Plots
anim = Animation();
for it = 1:nt
contourf(...);
frame(anim);
end
gif(anim, "test.gif", fps = 15);
This works fine on my local notebook or when I connect to a compute node with X server (ssh -X). However, I need to be able to do that without any X server (for distributed jobs). When I run it without an X server available, I get the following error:
gksqt: cannot connect to X server localhost:12.0
connect: Connection refused
GKS: can't connect to GKS socket application
Did you start 'gksqt'?
GKS: Open failed in routine OPEN_WS
GKS: GKS not in proper state. GKS must be either in the state WSOP or WSAC in routine ACTIVATE_WS
Could you tell me how to avoid the need for an X server, i.e. how I can deactivate any display / how I can deactivate GKS?
You can set the output type before using the gr backend using ENV["GKSwstype"]=100 or ENV[“GKSwstype”]=“nul”`, which activates the NULL device.
You can remove or reset the environment variable with delete!(ENV, "GKSwstype") or ENV["GKSwstype"] = "" and then force GR to reload its graphics subsystem using GR.emergencyclosegks() (or Plots.GR.emergencyclosegks() in Plots.)
Just came here to say THANK YOU! I am running scripts on an external server that generate figures saved as pdf. The script prints a log file with diagnostics, and those log files were 95% errors related to GKS and GR from trying to plot the figures on the server. This thread finally solved my problem!
I now create a dummy xdg-open and put it before the path. Seems to have worked.
Also, suprisingly, when I simply run a julia files myfile.jl which uses normal plot(…) commands using julia myfile.jl, no error is thrown. Looks like Plots already comes with some display logic depending on how it is started