Java swing 应用程序无法使用 VNC 正确呈现
Java swing applications not rendering properly with VNC
Swing 应用程序在使用 Java 8 在 VNC 桌面上启动时显示空白 window。我在 JRE 7
和非 swing 应用程序(例如Eclipse) 使用相同的设置正常运行。
是否有某种默认设置,例如 3D 加速或在 JRE 8
上默认启用的某些设置?我该如何禁用它?
在 Linux 系统上,我发现使用 -Dsun.java2d.xrender=false
选项可以解决问题。我认为 xrender 现在默认启用 Java 8.
Java 2D 的系统属性可在此处找到:http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html
TL;DR
- Java 和 glxgears 期望颜色深度为 24。
- 确保 X 和 VNC 设置为使用 24 深度,而不是其他深度,如 16 或 32。
详情:
我在 VNC 中也有空白 Java windows,但是 Java 7 和 Java 8,所以禁用 xrender
没有帮助我。这可能严重违反了 post 此处的 Whosebug 协议,但我在这里找到了自己的方式,所以其他人肯定也会这样做。 -Dsun.java2d.opengl=true
使文本可见,虽然抗锯齿就像 1980 年代的东西,调色板一团糟,但后来我得到了 windows 的虚假透明部分,总是相同的部分,干净地合成,所以不像驱动程序错误。注意到 glxgears 也显示了一个整洁的透明背景,当它在其他系统上是不透明的黑色时,我发现了一个针对“compton”的周到且信息丰富的错误报告,RGBA windows are always transparent #179. Inspired to look at xdpyinfo
, I found my VNC server was offering "visuals" of depth 32 only, ie visuals with 8 bits each of red, green and blue and eight bits of alpha. It seems Java, and glxgears, want an opaque visual, so one of depth 24. My normal :0 X server has that as its default. For the -depth switch, man Xtigervnc
says "Default is 24, other possible values are 8, 15, and 16 - anything else is likely to cause strange behaviour by applications", yet Debian's provisional packaging for TigerVNC,特别是在 /etc/vnc.conf
和 /usr/bin/tigervncserver
,将其设置为默认值 32。-depth 24
突然之间,一切又变得美丽起来,只有需要的地方才具有半透明性。 xdpyinfo
透露了许多提供的“视觉效果”,包括深度 32。
我今天在将 JetBrains pycharm 升级到 2019.x.x 版本后遇到了这个问题(尝试了其中的几个)。
与上面不同的是,我在 vnc 客户端和服务器上都配置了 16 位深度,这导致在我开始升级 pycharm(较早的 2018版本工作正常)。
将客户端(remmina - 编辑单独的连接配置)和服务器(tigervncserver / Xtigervnc)切换到 24 位深度解决了我的问题。
在 Red Hat Enterprise Linux 上 /etc/xrdp/xrdp.ini 文件中有两个设置:
未注释:serverbpp=24
更改了现有项目:max_bpp=24
Swing 应用程序在使用 Java 8 在 VNC 桌面上启动时显示空白 window。我在 JRE 7
和非 swing 应用程序(例如Eclipse) 使用相同的设置正常运行。
是否有某种默认设置,例如 3D 加速或在 JRE 8
上默认启用的某些设置?我该如何禁用它?
在 Linux 系统上,我发现使用 -Dsun.java2d.xrender=false
选项可以解决问题。我认为 xrender 现在默认启用 Java 8.
Java 2D 的系统属性可在此处找到:http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html
TL;DR
- Java 和 glxgears 期望颜色深度为 24。
- 确保 X 和 VNC 设置为使用 24 深度,而不是其他深度,如 16 或 32。
详情:
我在 VNC 中也有空白 Java windows,但是 Java 7 和 Java 8,所以禁用 xrender
没有帮助我。这可能严重违反了 post 此处的 Whosebug 协议,但我在这里找到了自己的方式,所以其他人肯定也会这样做。 -Dsun.java2d.opengl=true
使文本可见,虽然抗锯齿就像 1980 年代的东西,调色板一团糟,但后来我得到了 windows 的虚假透明部分,总是相同的部分,干净地合成,所以不像驱动程序错误。注意到 glxgears 也显示了一个整洁的透明背景,当它在其他系统上是不透明的黑色时,我发现了一个针对“compton”的周到且信息丰富的错误报告,RGBA windows are always transparent #179. Inspired to look at xdpyinfo
, I found my VNC server was offering "visuals" of depth 32 only, ie visuals with 8 bits each of red, green and blue and eight bits of alpha. It seems Java, and glxgears, want an opaque visual, so one of depth 24. My normal :0 X server has that as its default. For the -depth switch, man Xtigervnc
says "Default is 24, other possible values are 8, 15, and 16 - anything else is likely to cause strange behaviour by applications", yet Debian's provisional packaging for TigerVNC,特别是在 /etc/vnc.conf
和 /usr/bin/tigervncserver
,将其设置为默认值 32。-depth 24
突然之间,一切又变得美丽起来,只有需要的地方才具有半透明性。 xdpyinfo
透露了许多提供的“视觉效果”,包括深度 32。
我今天在将 JetBrains pycharm 升级到 2019.x.x 版本后遇到了这个问题(尝试了其中的几个)。
与上面不同的是,我在 vnc 客户端和服务器上都配置了 16 位深度,这导致在我开始升级 pycharm(较早的 2018版本工作正常)。
将客户端(remmina - 编辑单独的连接配置)和服务器(tigervncserver / Xtigervnc)切换到 24 位深度解决了我的问题。
在 Red Hat Enterprise Linux 上 /etc/xrdp/xrdp.ini 文件中有两个设置:
未注释:serverbpp=24 更改了现有项目:max_bpp=24