As for creating a root window in WSLg (e.g. for running a full Desktop Environment) there have been several options, but performance varies between them. I've tried several methods for having better performance/smoothness mentioned below. Is it possible to take control of WSLg rdp connection manually?
Using X servers in Windows: Only good in multiwindow mode, probably because of:
AIGLX: No native OpenGL in modes with a root window
VNC/Xrdp: Slow compared to other methods.
Using FreeRDP implementation in WSLg: Probably has the best performance overall (by using Xwayland as mentioned in this answer).
These almost always perform "better" when using LIBGL_ALWAYS_SOFTWARE=1
.
In order to have some features of rdp and X servers which the WSLg does not provide (like key hooks) and also having more control over it, I tried Weston with --backend=rdp-backend.so
, but the performance was not close to the third option above (even with several optimizations). I tried removing msrdc/mstsc executables from Windows and making a direct connection from mstsc, which ended in Error code 0x4
.
Edit: There seems to be some useful tweaks here and here, but in practice not using remoteapplicationmode:i:1
leads to a poor and laggy result.