4
votes

I am trying to run a java program I made in a RHEL7 server through remote desktop under windows7.

All the java programs in the server fail to render through the remote desktop. They look ok if I access to the server itself at the server place.

enter image description here

I've seen in other threads that changing the nvidia color scheme and such can help, however the server is using the default graphics.

5

5 Answers

4
votes

I figured it out:

  • When launching the remote connection, open the connection options.
  • Go to Screen
  • Go to color
  • Choose 16 bits color.

Done.

2
votes

When connecting to a Windows 7 machine via RDP, this worked:

  • When launching the remote connection, open the connection options;
  • Go to Display tab;
  • In Colors, choose High Color (15 bit).

The accepted answer didn't work for me, but pointed to this direction (I would post a comment, but currently I have not enough reputation).

1
votes

This answer expands upon the solution detailed on the TeamViewer thread regarding 'Some applications does not show content (white window) Windows 10 host'.

See 'Solution' below.

 

Abstract

I have noticed this issue commonly relates to Java applications when the primary monitor is no-longer attached to the device; such as certain laptops which "disconnect" the built-in screen when the lid is shut or workstations when no screens are attached.

Based upon the behaviour of applications with and without a monitor attached, a surface level understanding of graphics accelerators, and experiences in the forum posts I've referenced below, I believe the cause of the contentless windows is the result of application dependencies upon either the DirectDraw or Direct3D sub-systems - which interface with 3D acceleration hardware - when the accelerators are disabled as a result of the monitor being disconnected.

I think I've also experienced similar problems when attempting to run applications which depend upon 3D acceleration within a Linux environment using the Wine compatibility layer (https://bugs.winehq.org/buglist.cgi?component=directx-d3d&product=Wine&resolution=---)

Perhaps this is a power-saving feature of 3D graphics processors which activates when no screens are detected, or perhaps this is related to the framebuffer being unaware of the supported output resolutions and so disables access to the GPU for the Windows shell, which causes Windows to revert to software-only rendering; or some other reason.

Whatever the cause, my assumption that the dedicated graphics hardware was unavailable for 3D processing when the monitor is disabled, and the common denominator for all software experiencing the problem was Java, I questioned whether the JVM was depending upon D3D for rendering, even though Windows only had software-only rendering available.

   

Solution

Ref: https://superuser.com/a/496775

Using DXDiag, I checked the status of Display DirectX Features:

DirectDraw Acceleration: Enabled

Direct3D Acceleration: Enabled

AGP Texture Acceleration: Enabled

I manually created these registry values, in addition to creating the Direct3D\Drivers key:

Reg Add HKLM\SOFTWARE\Microsoft\DirectDraw /V EmulationOnly /T REG_DWORD /D %_Mode% /F

Reg Add HKLM\SOFTWARE\Microsoft\Direct3D\Drivers /V SoftwareOnly /T REG_DWORD /D %_Mode% /F

Then, using DXDiag, I checked the new status of Display DirectX Features:

DirectDraw Acceleration: Disabled

Direct3D Acceleration: Disabled

AGP Texture Acceleration: Not Available

The Java program window now rendered content correctly via VNC Viewer, when monitor is detached.

I've not tried the suggestion of using the "ForceDirectDrawEmulation" option within the Compatibility Wizard, referenced in the SuperUser thread.

   

Research and references

Within each heading below is a record of forums posts considered as part of the research which lead to the solution detailed above.

Each section concludes with either a record of the result of applying the solutions proposed in the referenced threads, or the reason the thread wasn't relevant to my environment; but the solutions may be relevant for others.

 

Disable hardware acceleration in Windows Display Settings

Ref: https://www.auslogics.com/en/articles/disable-hardware-acceleration-in-windows/

Not tried because Display Settings window crashes

 

Attempt to prevent GPU (ATI Mobility Radeon HD 4500) from disabling hardware acceleration when monitor disconnects

Ref: https://social.technet.microsoft.com/forums/windows/en-us/8a9b5aa7-fe33-4e6d-b39b-8ac80a21fdc2/disable-monitor-off-detection-how?forum=w7itprogeneral

Disabled ?Display Detection?, to prevent disconnection being detected to avoid disabling of HW acceleration

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000]
"Display_Detection_DEF"=dword:00000001

Create/NULL DMMEnableDDCPolling for ATI cards - Ref: Post by NetMage

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000]
"DMMEnableDDCPolling"=dword:00000000

Didn't have any affect following system restart, though the laptop lid was closed during reboot. Though even if it did work, this likely would not have been a suitable solution.

A much more appropriate solution would be if the 3D hardware acceleration could be forced 'always-on', regardless of monitor detection.

 

System-wide (Java Control Panel) disabling of D3D acceleration for Java applications

Ref: https://forums.guru3d.com/threads/disable-hardware-acceleration-for-java.296918/#post-4096709

Not tried because Java Control Panel isn't present on my system

 

System-wide (Envionment variables) disabling of D3D acceleration for Java applications

Ref: https://stackoverflow.com/a/36235217

System Properties for Java 2D: http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html

Setting user Environment Variables:

_JAVA_OPTION=-Dsun.java2d.d3d=false -Dsun.java2d.noddraw=true

J2D_D3D=false

If this had worked, it would have been the ideal solution, since it is a Java specific configuration, as opposed to the solution presented above, which requires a full system change in order to compensate for a Java-specific issue.

However, setting the Environment Variables didn't resolve the contentless Window issue for me.

Perhaps the documentation for JRE 8 is outdated, and an alternate method is available for newer releases. Once I'd realised the solution, I didn't go searching for more recent documentation or an alternate solution.

 

Disable Direct3D acceleration on Windows 7

Ref: How to disable Direct3D Acceleration on Windows 7?

Guide for directx.cpl - changes 32-bit DirectDraw and Direct3D, but not 64-bit (dxdiag 32/64-bit): https://stackoverflow.com/a/25508331

I'm not running a 32-bit version of Windows 7

 

Disable DirectDraw and Direct3D acceleration on Windows 8[/10]

Ref: https://superuser.com/questions/495303/how-do-i-disable-directdraw-and-direct3d-acceleration-on-windows-8

Guide for directx.cpl - changes 32-bit DirectDraw and Direct3D, but not 64-bit (dxdiag 32/64-bit): https://superuser.com/a/504510

I'm running a 64-bit version of Windows 10, and the Java applications are also 64-bit, so 32-bit DirectDraw and Direct3D settings aren't relevant for me, though the 32-bit directx.cpl did disable the 32-bit DirectDraw and Direct3D as verified by the 32-bit DXDiag.

The registry keys and procedure for disabling the 64-bit DirectDraw and Direct3D are detailed in the solution section above.

1
votes

Logout (not just disconnect) from the remote session changed it for me. Maybe this answer helps for some who end in this post because they have a funny oversized border on a Java App after fooling around a bit with the remote connection.

I remote connected using mac parallels software through windows 10. Then I made a config change on parallels. Then I set up a vpn and remote connection on my mac and had the problem. I logged off and on at the remote site and it became "normal".

0
votes

The reason for your problems could be that you're connected as another user and/or have different rights as a remote desktop user. I've had theese issues with xrdp. Try TeamViewer or other remote desktop solutions.