-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rdpDeferredUpdateCallback with large screens and RFX #524
Comments
I'm facing the exact same issue here. Compiling xrdp 0.9.1 without rfx "solves" it... |
Hi guys, |
Please try compiling xrdp and xorgxrdp with |
I've tried, the error is the same. The problem comes when the resolution of the screen needs more than 512 rect (each rect is 64x64) to be covered. |
Hi, |
I looked at |
That is just a sanity check, it can be increased or removed. |
According to technet, max resolution is 32766x*32766 (8192x8192 per display) since RDP8, but there are some limitations on remoteFX: 2560x1600 (rdp8) or 4k (rdp10). This would be 1024 tiles as max for the same support |
xorgxrdp will eventually process a monitor at a time. Currently the whole desktop is in one message. |
I just tried to remove the following lines of code in
It immediately solves all problems with large resolutions and rfx. Wouldn't it be good to implement that as a patch to xrdp? |
I've updated the limits to 1024 on my test server as it should cover the resolutions limits for RDP10, and I still get some artefacts. But didn't have much time to debug this for the moment |
Please run the patched xrdp under Valgrind to make sure there are no buffer overruns. |
I can confirm the artefacts on my test system. Just increasing the rects to 1024 does not solve anything. And there is another problem: Running fast updates on the screen (as an example, run a screensaver under xfce4 like "XLyap") or showing bitmaps with a lot of details in it just crashes the client. Under "Remmina", the screen is frozen, while mstsc throws a "protocol error".
"rect_id" number vary depending on the area on the screen where the artefacts are. |
The crash itself is perhaps linked to another issue: neutrinolabs/xorgxrdp#5 |
@moobyfr I think @tfischer77 's issue is same as mine. I also get "protocol error" in mstsc. @tfischer77 Does the protocol error stop if color depth is set less than 24 bit (>= 16 bit)? |
@metalefty The protocol error stops if I manually select 16bit as resolution in mstsc. |
Compiling xrdp without "rfxcodec" (and increasing num_rects to 1024) also works for large resolutions. No artefacts any longer. Is it possible that the error is somewhere in the rfxcodec? |
Then, the protocol error issue looks as same as mine. Probably we should open new issue for the issue but let me ask you a few more things. I want you to check if protocol error occurs with each following mstsc settings.
|
I found a few problem with RFX and multimon. I have a couple of PRs to fix. |
@jsorg71 So, if I understood you correctly, we should wait for your PRs and then check again? |
@tfischer77 for the crash with xlyap, this is probably related to another bug:neutrinolabs/xorgxrdp#5 |
@moobyfr I don' t think so, as the session itself is not crashing. It's just the screen that is frozen. I can even close mstsc and reconnect with 16bit colour and the session is still there. Xlyap rund then with 16bit. As soon as I reconnect with LAN and >=24bit, it stops... |
I did PR #664 and neutrinolabs/xorgxrdp#77 for this. It's similar to the above, plus now it does a tile set per monitor. |
@jsorg71 I tested it, no artefacts any longer, but now Xorg is crashing (when running with my "test program" XLyap... I like it :-) ). The error is like this:
I understood that I hit bug neutrinolabs/xorgxrdp#5. The error lies here "rdpClientConSendMsg: overrun error len, 34704 stream size 32868, client count 2", so I changed the stream size:
Now, Xorg does not crash any longer, but the screen freezes down as soon as I have an "overrun". |
OK, found out the root cause: #664 does not fix it completely. I just found out that my very nice screensaver "XLyap" sometimes produces even more than 4096 drects. Just had 4280 drects, and then we run into the same problem as before. Increasing the number of drects and crects to 8192 solves the problem for me. However, I don't feel very comfortable about the code in #664. What happens if in future the number of crects / drects increases? |
Oh, wow, I was working on limiting crects, I see now that drects can go crazy too. This screen saver must be drawing pixels or small rects all over.
|
@tfischer77 I pushed a change. I think this was causing the stream overrun. It was pushing this huge rectangle list on the stream. |
@jsorg71 When applying #664 and neutrinolabs/xorgxrdp#77, it's simply working now. I just tested it, it even resolves the bug neutrinolabs/xorgxrdp#5. So no need to change the stream size. Thank you very much. I hope you will merge these PRs into xrdp and xorgxrdp very soon. |
Hi guys, I can see the xrdp-sessman login screen perfectly but when I login I can't see anything of my xfce desktop and the above message appears. So this behaviour looks exactly the same at least for me. Sorry if am writing stupid things, maybe I just didn't get it... Cheers |
@macdanger Something must have gone wrong with you build, it does not print |
@tfischer77 sorry, I guess I should take another session in using git :-) |
@macdanger There is a limit now of 0x200000 pixels for non multi monitor case. |
4K support is in RDS for Windows 2016, so updating the value makes it follow the latest server support :) |
with large screen (1900x1100) and using RFX, I get always a black screen , using current devel branch for xrdp and neutrinoRDP or xfreerdp for client.
The xrdp-sesman being filled by
rdpDeferredUpdateCallback: reschedule rect_id 1 rect_id_ack 0
in
xrdp/xrdp_encoder.c:368
According to xrdp.log:
xrdp:xrdp_encoder [3403921343]: process_enc_rfx: num_crects 540 num_drects 1
That's explain why RFX doesn't work with large resolution
The text was updated successfully, but these errors were encountered: