Hi Community,
I just started with Ignition on Linux (Ubuntu) and my gateway is running fine now. However, I can't startup the designer launcher and the log file shows that I'm having some issue with the Java toolkit.
Here's the designerlauncher.log
INFO [CompositeClassRejectListFilter] [2025/03/02 13:15:17]: Initialization performed successfully
INFO [CompositeClassRejectListFilter] [2025/03/02 13:15:17]: JVM-wide ObjectInputFilter set up successfully
INFO [CompositeClassRejectListFilter] [2025/03/02 13:15:17]: Platform serialFilter has 88 pattern(s)
INFO [DesignerLauncher ] [2025/03/02 13:15:18]: Set initial logging level to INFO
ERROR [RuntimeException ] [2025/03/02 13:15:18]: Uncaught exception in thread: main
java.lang.RuntimeException: No toolkit found
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:276)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:679)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
at java.base/java.lang.Thread.run(Thread.java:840)
And this is my java version.
openjdk version "21.0.6" 2025-01-21
OpenJDK Runtime Environment (build 21.0.6+7-Ubuntu-124.04.1)
OpenJDK 64-Bit Server VM (build 21.0.6+7-Ubuntu-124.04.1, mixed mode, sharing)
I also have javafx.
javafx.version=11.0.11-internal
javafx.runtime.version=11.0.11-internal+0-2024-04-13-050451
javafx.runtime.build=0
And I have the environment variables configured, too.
JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"
JAVAFX_HOME="/usr/share/openjfx"
However, none of the above solved the problem.
Does anyone have any idea how to fix this?
Thank you 
Having Java/JavaFX shouldn’t matter, Ignition comes with its own runtimes.
You are running this in a graphical environment, right? What Window Manager are you using?
Hi Kevin, thank you for your reply.
Yes, I'm running it in GNOME and Ubuntu 24.04.
Well, it makes sense that my environment variables didn't fix the issue then😂.
Does the Designer Launcher need to reside in a certain directory relative to the gateway directory?
Thanks again 
No, a Designer Launcher doesn't even need to be on the same computer as a Gateway at all.
This is happening when you running the designerlauncher.sh
script?
Hi Kevin,
Yes.
I ran the application in the root of the Designer Launcher files downloaded from the gateway. I checked the code and it should be running the .sh file and the .sh file generated the logs that I posted in my original question.
Thank you for your time 
Can you try executing the shell script directly and then also post the full designerlauncher.log file?
Better, before doing the above, change the last line of designerlauncher.sh
to this:
APP_DIR="$REALDIR" "${REALDIR}/../runtime/bin/java" -Djavafx.verbose=true -jar "${REALDIR}/launcher-designer-linux.jar" "$@"
(add verbose flag, remove output redirect).
Then run app/designerlauncher.sh
and copy/paste the output from your terminal as well as the designerlauncher.log
file.
I run 8.1.45 on some HMIs runing 22.04 without issue.
For a single user installation:
I go to the gateway webpage in my web browser, download ignition designer for linux off the webpage.
Then I go to my Downloads folder and extract the files them move the designerlauncher folder to ~/.local/share/applications and it all magically appears in the gnome menus and runs ok.
for multi user setups I think you have to place the designerlauncher in /usr/share/applications but I run designer on a single user instaces as above. Maybe try that and see if it runs?
Hi Kevin,
Here's the output.
Error: --module-path requires module path specification
INFO [CompositeClassRejectListFilter] [2025/03/03 19:27:59]: Initialization performed successfully
INFO [CompositeClassRejectListFilter] [2025/03/03 19:27:59]: JVM-wide ObjectInputFilter set up successfully
INFO [CompositeClassRejectListFilter] [2025/03/03 19:27:59]: Platform serialFilter has 88 pattern(s)
INFO [DesignerLauncher ] [2025/03/03 19:27:59]: Set initial logging level to INFO
Mar 03, 2025 7:27:59 PM com.sun.javafx.application.PlatformImpl startup
WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @27f674d'
WARNING: java.lang.UnsatisfiedLinkError: Can't load library: /home/weiming/Downloads/designerlauncher/app/libprism_es2.so
Loaded library /libprism_es2.so from resource
WARNING: java.lang.UnsatisfiedLinkError: Can't load library: /home/weiming/Downloads/designerlauncher/app/libprism_sw.so
Loading library prism_sw from resource failed: java.nio.file.AccessDeniedException: /home/weiming/.openjfx/cache/17.0.2-ea/libprism_sw.so
java.nio.file.AccessDeniedException: /home/weiming/.openjfx/cache/17.0.2-ea/libprism_sw.so
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:218)
at java.base/java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:484)
at java.base/java.nio.file.Files.newOutputStream(Files.java:228)
at java.base/java.nio.file.Files.copy(Files.java:3160)
at com.sun.glass.utils.NativeLibLoader.cacheLibrary(NativeLibLoader.java:301)
at com.sun.glass.utils.NativeLibLoader.installLibraryFromResource(NativeLibLoader.java:215)
at com.sun.glass.utils.NativeLibLoader.loadLibraryFromResource(NativeLibLoader.java:197)
at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:138)
at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:54)
at com.sun.prism.sw.SWPipeline.lambda$static$0(SWPipeline.java:43)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at com.sun.prism.sw.SWPipeline.<clinit>(SWPipeline.java:42)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:375)
at com.sun.prism.GraphicsPipeline.createPipeline(GraphicsPipeline.java:218)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:92)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
at java.base/java.lang.Thread.run(Thread.java:840)
Graphics Device initialization failed for : es2, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:283)
at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:254)
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:264)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:679)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:95)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
... 1 more
ERROR [RuntimeException ] [2025/03/03 19:27:59]: Uncaught exception in thread: main
java.lang.RuntimeException: No toolkit found
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:276)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:679)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
at java.base/java.lang.Thread.run(Thread.java:840)
And here's the log
INFO [CompositeClassRejectListFilter] [2025/03/03 19:24:32]: Initialization performed successfully
INFO [CompositeClassRejectListFilter] [2025/03/03 19:24:32]: JVM-wide ObjectInputFilter set up successfully
INFO [CompositeClassRejectListFilter] [2025/03/03 19:24:32]: Platform serialFilter has 88 pattern(s)
INFO [DesignerLauncher ] [2025/03/03 19:24:32]: Set initial logging level to INFO
ERROR [RuntimeException ] [2025/03/03 19:24:32]: Uncaught exception in thread: main
java.lang.RuntimeException: No toolkit found
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:276)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:679)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
at java.base/java.lang.Thread.run(Thread.java:840)
INFO [CompositeClassRejectListFilter] [2025/03/03 19:27:59]: Initialization performed successfully
INFO [CompositeClassRejectListFilter] [2025/03/03 19:27:59]: JVM-wide ObjectInputFilter set up successfully
INFO [CompositeClassRejectListFilter] [2025/03/03 19:27:59]: Platform serialFilter has 88 pattern(s)
INFO [DesignerLauncher ] [2025/03/03 19:27:59]: Set initial logging level to INFO
ERROR [RuntimeException ] [2025/03/03 19:27:59]: Uncaught exception in thread: main
java.lang.RuntimeException: No toolkit found
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:276)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:679)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
at java.base/java.lang.Thread.run(Thread.java:840)
Thank you for your help.
Hi Craig,
Thank you for sharing your experience. I've tried it but received the same error...
The issue is this... not sure why you get AccessDeniedException.
Try deleting /home/weiming/.openjfx
and launching again. If that doesn't work check the permissions on that file assuming it gets re-created.
Hi Kevin,
Thanks, it was a stupid mistake and I should have thought about it. I just need to run the shell script with sudo...
Thanks for the help 
?!?
No, that shouldn't be necessary, unless you unzipped the launcher with sudo?
Hi pturmel,
No, I didn't unzip the launcher with sudo...
You may want to use ldd
to explore what system libs are being requested by libprism_sw.so
. Based on your success with sudo
, I suspect one of them is not flagged for all users to execute.
Yup, by removing ~/.openjfx the issue is fully resolved. This folder for some reason got its access authorization changed.
Either run the shell script with sudo or delete the folder does the trick.
Thank you.
1 Like
Hi pturmel,
Thank you for your reply.
I deleted ~/.openjfx and ran the shell script again and it re-created the folder with the correct access.
I'll keep an eye on this and if I find anything, I'll come back and update this post.
1 Like
Yeah, you shouldn't need sudo.
You probably ran a command at some point using sudo or as root that created those folders or files with the elevated permissions required.
Maybe...
I was busy with other stuff and just came back to look at this project.
Thank you for your help again 
FWIW, the native Linux launchers don’t work struggle in LinuxServer.io webtop/rdesktop docker containers if anyone at IA might be interested in debugging