我明白了:
完成。
当通过RDP连接到Windows 7机器时,可以按以下步骤操作:
对于我来说,接受的答案不起作用,但指向了这个方向(我想发表评论,但目前我的声望还不够)。
退出(而不仅仅是断开)远程会话对我产生了影响。也许这个答案可以帮助那些因为在远程连接后对Java应用程序进行了一些操作而导致出现有趣的超大边框的人。
我使用Mac Parallels软件通过Windows 10进行远程连接。然后我在Parallels上进行了配置更改。然后我在我的Mac上设置了VPN和远程连接,并遇到了问题。我在远程站点上注销并重新登录,问题就变得“正常”了。
我注意到这个问题通常与Java应用程序有关,当主监视器不再连接到设备时,比如某些笔记本电脑在关闭盖子时“断开”内置屏幕或工作站没有连接屏幕。
基于有无监视器附加的应用程序行为、图形加速器的表面理解以及我在下面引用的论坛帖子中的经验,我认为无内容窗口的原因是应用程序依赖于DirectDraw或Direct3D子系统 - 它们与3D加速硬件接口 - 当加速器由于断开监视器而被禁用时。
我认为,在Linux环境中使用Wine兼容层运行依赖于3D加速的应用程序时,我也遇到了类似的问题(https://bugs.winehq.org/buglist.cgi?component=directx-d3d&product=Wine&resolution=---)。
也许这是3D图形处理器的节能特性,在未检测到屏幕时会激活;或者这与帧缓冲区不知道支持的输出分辨率有关,从而禁用了Windows外壳对GPU的访问,导致Windows回退到仅软件渲染; 或其他原因。无论原因是什么,我的假设是当显示器禁用时,专用图形硬件无法用于3D处理,所有遇到问题的软件都共同点是Java,我质疑JVM是否依赖D3D进行渲染,即使Windows只有可用的仅软件渲染。
参考:https://superuser.com/a/496775
使用DXDiag,我检查了显示DirectX功能的状态:
DirectDraw加速:已启用
Direct3D加速:已启用
AGP纹理加速:已启用
我手动创建了这些注册表值,并创建了Direct3D\Drivers键:
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
然后,使用DXDiag,我检查了显示DirectX功能的新状态:
DirectDraw加速:已禁用
Direct3D加速:已禁用
AGP纹理加速:不可用
当监视器未连接时,Java程序窗口现在通过VNC Viewer正确呈现内容。
我还没有尝试在SuperUser线程中提到的使用“ForceDirectDrawEmulation”选项在兼容性向导中的建议。
以下每个标题下记录了作为研究成果的论坛帖子,这些成果导致了上述解决方案。
每个部分都以应用引用线程中提出的解决方案的结果或该线程不适用于我的环境的原因结尾; 但是这些解决方案可能对其他人有用。
在Windows显示设置中禁用硬件加速
参考:https://www.auslogics.com/en/articles/disable-hardware-acceleration-in-windows/
未尝试,因为显示设置窗口崩溃。
尝试防止GPU(ATI Mobility Radeon HD 4500)在监视器断开连接时禁用硬件加速
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000]
"Display_Detection_DEF"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000]
"DMMEnableDDCPolling"=dword:00000000
全局禁用Java应用程序的D3D加速(Java控制面板)
参考:https://forums.guru3d.com/threads/disable-hardware-acceleration-for-java.296918/#post-4096709
因为我的系统上没有Java控制面板,所以未尝试。
禁用Java应用程序的D3D加速(环境变量)
参考资料:https://dev59.com/JZTfa4cB1Zd3GeqPWNTE#36235217
Java 2D的系统属性:http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html
设置用户环境变量:
_JAVA_OPTION=-Dsun.java2d.d3d=false -Dsun.java2d.noddraw=true
J2D_D3D=false
在Windows 7上禁用Direct3D加速
directx.cpl指南-更改32位DirectDraw和Direct3D,但不包括64位(dxdiag 32/64位):https://stackoverflow.com/a/25508331
我没有运行32位版本的Windows 7
在Windows 8/10上禁用DirectDraw和Direct3D加速
directx.cpl指南 - 更改32位DirectDraw和Direct3D,但不包括64位(dxdiag 32/64位): https://superuser.com/a/504510
我正在运行64位版本的Windows 10,Java应用程序也是64位的,因此32位DirectDraw和Direct3D设置对我来说不相关,但32位的directx.cpl确实禁用了32位DirectDraw和Direct3D,如32位DXDiag所验证的。
禁用64位DirectDraw和Direct3D的注册表键和过程在上面的解决方案部分详细说明。