WSL2中Ubuntu22.x无法运行VisualVM的问题求助
WSL2 Ubuntu 22.04中运行VisualVM报错缺失libXtst.so.6的解决方法
问题背景
使用Windows 11系统,Windows版本VisualVM可正常运行。在WSL2的Ubuntu 22.04.3 LTS环境中通过sdkman配置好Java(8/17/21多个版本)、Maven后,运行Linux版VisualVM 2.1.7失败,报错提示缺失libXtst.so.6库,手动指定jdkhome参数仍无法解决。
相关版本信息
ahroo@AhrooranR:/mnt/c/Users/AhrooranRavindran$ sdk default java 17.0.9-amzn 21.0.1-amzn 8.0.392-amzn ahroo@AhrooranR:/mnt/c/Users/AhrooranRavindran$ java -version openjdk version "21.0.1" 2023-10-17 LTS OpenJDK Runtime Environment Corretto-21.0.1.12.1 (build 21.0.1+12-LTS) OpenJDK 64-Bit Server VM Corretto-21.0.1.12.1 (build 21.0.1+12-LTS, mixed mode, sharing) ahroo@AhrooranR:/mnt/c/Users/AhrooranRavindran$ mvn -v Apache Maven 3.9.4 (dfbb324ad4a7c8fb0bf182e6d91b0ae20e3d2dd9) Maven home: /mnt/c/AHROO/programs/apache-maven-3.9.2 Java version: 21.0.1, vendor: Amazon.com Inc., runtime: /home/ahroo/.sdkman/candidates/java/21.0.1-amzn Default locale: en, platform encoding: UTF-8 OS name: "linux", version: "5.15.133.1-microsoft-standard-wsl2", arch: "amd64", family: "unix" ahroo@AhrooranR:/mnt/c/Users/AhrooranRavindran$ sdk default visualvm 2.1.7 setting visualvm 2.1.7 as the default version for all shells. ahroo@AhrooranR:/mnt/c/Users/AhrooranRavindran$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy
报错日志
运行visualvm时的错误:
ahroo@AhrooranR:/mnt/c/Users/AhrooranRavindran$ visualvm java.lang.UnsatisfiedLinkError: /home/ahroo/.sdkman/candidates/java/21.0.1-amzn/lib/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:331) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:197) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:139) at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2418) at java.base/java.lang.Runtime.load0(Runtime.java:852) at java.base/java.lang.System.load(System.java:2021) at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:331) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:197) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:139) at java.base/jdk.internal.loader.NativeLibraries.findFromPaths(NativeLibraries.java:259) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:249) at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2427) at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:916) at java.base/java.lang.System.loadLibrary(System.java:2059) at java.desktop/sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:67) at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) at java.desktop/sun.awt.X11GraphicsEnvironment.initStatic(X11GraphicsEnvironment.java:64) at java.desktop/sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:59) at java.desktop/sun.awt.PlatformGraphicsInfo.createGE(PlatformGraphicsInfo.java:37) at java.desktop/java.awt.GraphicsEnvironment$LocalGE.createGE(GraphicsEnvironment.java:93) at java.desktop/java.awt.GraphicsEnvironment$LocalGE.<clinit>(GraphicsEnvironment.java:84) at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:106) at org.netbeans.core.startup.Main.start(Main.java:245) at org.netbeans.core.startup.TopThreadGroup.run(TopThreadGroup.java:98) at java.base/java.lang.Thread.run(Thread.java:1583)
开启控制台日志后的输出:
ahroo@AhrooranR:/mnt/c/Users/AhrooranRavindran$ visualvm -J-Dnetbeans.logger.console=true java.lang.UnsatisfiedLinkError: /home/ahroo/.sdkman/candidates/java/21.0.1-amzn/lib/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:331) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:197) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:139) at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2418) at java.base/java.lang.Runtime.load0(Runtime.java:852) at java.base/java.lang.System.load(System.java:2021) at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:331) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:197) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:139) at java.base/jdk.internal.loader.NativeLibraries.findFromPaths(NativeLibraries.java:259) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:249) at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2427) at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:916) at java.base/java.lang.System.loadLibrary(System.java:2059) at java.desktop/sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:67) at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) at java.desktop/sun.awt.X11GraphicsEnvironment.initStatic(X11GraphicsEnvironment.java:64) at java.desktop/sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:59) at java.desktop/sun.awt.PlatformGraphicsInfo.createGE(PlatformGraphicsInfo.java:37) at java.desktop/java.awt.GraphicsEnvironment$LocalGE.createGE(GraphicsEnvironment.java:93) at java.desktop/java.awt.GraphicsEnvironment$LocalGE.<clinit>(GraphicsEnvironment.java:84) at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:106) at org.netbeans.core.startup.Main.start(Main.java:245) at org.netbeans.core.startup.TopThreadGroup.run(TopThreadGroup.java:98) at java.base/java.lang.Thread.run(Thread.java:1583) ------------------------------------------------------------------------------- >Log Session: Sunday, January 7, 2024, 6:02:00 PM India Standard Time >System Info: Product Version = VisualVM 2.1.7 Operating System = Linux version 5.15.133.1-microsoft-standard-WSL2 running on amd64 Java; VM; Vendor = 21.0.1; OpenJDK 64-Bit Server VM 21.0.1+12-LTS; Amazon.com Inc. Runtime = OpenJDK Runtime Environment 21.0.1+12-LTS Java Home = /home/ahroo/.sdkman/candidates/java/21.0.1-amzn System Locale; Encoding = en (visualvm); UTF-8 Home Directory = /home/ahroo Current Directory = /mnt/c/Users/AhrooranRavindran User Directory = /home/ahroo/.visualvm/2.1.7 Cache Directory = /home/ahroo/.cache/visualvm/2.1.7 Installation = /home/ahroo/.sdkman/candidates/visualvm/current/visualvm /home/ahroo/.sdkman/candidates/visualvm/current/platform Boot & Ext. Classpath = Application Classpath = /home/ahroo/.sdkman/candidates/visualvm/current/platform/lib/boot.jar:/home/ahroo/.sdkman/candidates/visualvm/current/platform/lib/org-openide-modules.jar:/home/ahroo/.sdkman/candidates/visualvm/current/platform/lib/org-openide-util-lookup.jar:/home/ahroo/.sdkman/candidates/visualvm/current/platform/lib/org-openide-util-ui.jar:/home/ahroo/.sdkman/candidates/visualvm/current/platform/lib/org-openide-util.jar Startup Classpath = /home/ahroo/.sdkman/candidates/visualvm/current/platform/core/org-openide-filesystems.jar:/home/ahroo/.sdkman/candidates/visualvm/current/platform/core/core-base.jar:/home/ahroo/.sdkman/candidates/visualvm/current/platform/core/org-netbeans-libs-asm.jar:/home/ahroo/.sdkman/candidates/visualvm/current/platform/core/core.jar:/home/ahroo/.sdkman/candidates/visualvm/current/platform/core/asm-commons-9.2.jar:/home/ahroo/.sdkman/candidates/visualvm/current/platform/core/asm-tree-9.2.jar:/home/ahroo/.sdkman/candidates/visualvm/current/platform/core/asm-9.2.jar:/home/ahroo/.sdkman/candidates/visualvm/current/visualvm/core/org-graalvm-visualvm-modules-startup.jar:/home/ahroo/.sdkman/candidates/visualvm/current/visualvm/core/locale/core_visualvm.jar -------------------------------------------------------------------------------
解决步骤
安装缺失的X11依赖库
在WSL2的Ubuntu终端执行以下命令,安装libXtst.so.6及其关联的X11库:sudo apt update sudo apt install libxtst6 libxrender1 libxi6 libxrandr2 libxcursor1 libxinerama1这些库是Java AWT/Swing GUI程序在Linux环境运行必需的依赖。
确保WSL2的X11转发配置正确
- Windows端需安装X服务器(如VcXsrv、X410),启动时勾选"Disable access control"选项。
- 在WSL2的
~/.bashrc或~/.zshrc中添加以下环境变量配置:export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0 export LIBGL_ALWAYS_INDIRECT=1 - 执行
source ~/.bashrc(或对应的shell配置文件)使配置生效。
重新运行VisualVM
配置完成后,直接在终端执行visualvm即可启动程序。如果之前指定过jdkhome,也可以继续使用该参数:visualvm --jdkhome=/home/ahroo/.sdkman/candidates/java/17.0.9-amzn
内容的提问来源于stack exchange,提问作者ahrooran
相关产品推荐
相关产品推荐

