The word iOS
when transliterated to Greek, it becomes the word ιός
, which means Virus
!
Monthly Archives: February 2018
JavaFX: Could not execute Jar build from artifact, while we could execute from IntelliJ IDEA
One of the applications we recently build on IntelliJ IDEA
was using JavaFX
.
When executing the application from inside IntelliJ
, it would work as expected and load the GUI.
On the other hand, when executing the jar file from the terminal, we would get the following error:
$ java -jar hello.jar 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:280) at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:221) at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:205) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:209) at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:675) at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:337) at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124) at java.lang.Thread.run(Thread.java:745) Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) Caused by: java.lang.RuntimeException: No toolkit found at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:217) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:209) at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:675) at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:337) at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) ... 5 more
As the above information was not very helpful, we executed the jar again using the -Dprism.verbose=true
directive to get more information from the error.
$ java -Dprism.verbose=true -jar hello.jar Prism pipeline init order: es2 sw Using java-based Pisces rasterizer Using dirty region optimizations Not using texture mask for primitives Not forcing power of 2 sizes for textures Using hardware CLAMP_TO_ZERO mode Opting in for HiDPI pixel scaling Prism pipeline name = com.sun.prism.es2.ES2Pipeline Loading ES2 native library ... prism_es2 GraphicsPipeline.createPipeline failed for com.sun.prism.es2.ES2Pipeline java.lang.UnsatisfiedLinkError: Can't load library: /home/user/Projects/Java/hello/out/artifacts/amd64/libprism_es2.so at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1827) at java.lang.Runtime.load0(Runtime.java:809) at java.lang.System.load(System.java:1086) at com.sun.glass.utils.NativeLibLoader.loadLibraryFullPath(NativeLibLoader.java:201) at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:94) at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:39) at com.sun.prism.es2.ES2Pipeline.lambda$static$0(ES2Pipeline.java:68) at java.security.AccessController.doPrivileged(Native Method) at com.sun.prism.es2.ES2Pipeline.(ES2Pipeline.java:50) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.sun.prism.GraphicsPipeline.createPipeline(GraphicsPipeline.java:187) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:91) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124) at java.lang.Thread.run(Thread.java:745) *** Fallback to Prism SW pipeline Prism pipeline name = com.sun.prism.sw.SWPipeline GraphicsPipeline.createPipeline failed for com.sun.prism.sw.SWPipeline java.lang.UnsatisfiedLinkError: Can't load library: /home/user/Projects/Java/hello/out/artifacts/amd64/libprism_sw.so at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1827) at java.lang.Runtime.load0(Runtime.java:809) at java.lang.System.load(System.java:1086) at com.sun.glass.utils.NativeLibLoader.loadLibraryFullPath(NativeLibLoader.java:201) at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:94) at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:39) at com.sun.prism.sw.SWPipeline.lambda$static$0(SWPipeline.java:42) at java.security.AccessController.doPrivileged(Native Method) at com.sun.prism.sw.SWPipeline.(SWPipeline.java:41) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.sun.prism.GraphicsPipeline.createPipeline(GraphicsPipeline.java:187) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:91) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124) at java.lang.Thread.run(Thread.java:745) 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:280) at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:221) at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:205) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:209) at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:675) at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:337) at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124) at java.lang.Thread.run(Thread.java:745) Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) Caused by: java.lang.RuntimeException: No toolkit found at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:217) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:209) at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:675) at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:337) at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) ... 5 more
From the new log, we could see that the application was trying to load some .so
(libprism_es2.so
and libprism_sw.so
) files that were not available in LD_LIBRARY_PATH
.
We used find
, to locate them:
find / -name "libprism_es2.so" 2>/dev/null;
Then we updated the LD_LIBRARY_PATH
variable to include the new path
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/idea-IC/jre64/lib/amd64/; java -jar hello.jar;
Note: Here we used the copies that were available in our IntelliJ IDEA installation.
It is not recommended as you need to deploy them per machine, but in our case it was OK as the development machine was the actual machine to use the tool as well.
Creating Jar with Intellij IDEA 2017.3 – no main manifest attribute, in .jar 1
Recently we tried to create a Jar
file from IntelliJ IDEA 2017.3
using Maven
.
After building the artifact, we got the error no main manifest attribute, in $FILE.jar
while executing the jar
file created by IntelliJ
.
After extracting the jar we observed that there was a manifest file but not the one that was specified while creating the artifact.
After some serious google-fu
, we got to the following bug ticket.
Apparently, IntelliJ
does not read the manifest file that is located in the src/main/java
folder!
Working Solution: As suggested in the ticket, we moved the META-INF
folder to src/main/resources
and rebuild the artifact.
Qubes-OS 3.2: USB printer (and other devices)
Below you will find the commands we used to enable the sys-usb
VM (on an installation of Qubes 3.2
where it was not enabled by default nor was the task of handling USB devices assigned to sys-net
).
On dom0
terminal emulator, we executed the following first to enable sys-usb
.
sudo qubesctl top.enable qvm.sys-usb; sudo qubesctl state.highstate;
Then we modified the configuration files for the mouse
(/etc/qubes-rpc/policy/qubes.InputMouse
) and keyboard
(/etc/qubes-rpc/policy/qubes.InputKeyboard
) so that they will automatically be granted to dom0
without prompting the used each time.
We modified the content /etc/qubes-rpc/policy/qubes.InputMouse
and /etc/qubes-rpc/policy/qubes.InputKeyboard
to be as below:
sys-usb dom0 allow,user=root $anyvm $anyvm deny