xrdp unchained - neutrinolabs/xrdp GitHub Wiki

RDP traditionally is a chained protocol. What is chained? Chained is one draw operation is performed at the client for each draw operation on the server. When an application on the server fills a rectangle, the client fills a rectangle. When an application draws a line, the client draws a line. There is a one to one ratio with client and server. For well behaved traditional applications, this is a very efficient way to remote the applications.

As desktops become more bitmap / alpha blended oriented, this becomes problematic because we end up falling back to chained bitmap drawing. Chained bitmap drawing should only be used as a default when we can't remote the drawing operation another way.

RemoteFX is an attempt to unchain RDP. I refer to this mode type as "Codec Mode." RemoteFX is JPEG2000 based but you can use any codec to achieve the same thing. In codec mode, it is no longer a one to one ratio for draw commands. The server is allowed to run as fast as it can then at regular intervals, the frame is diffed and send to the client somehow. RemoteFX uses tile diffing and blackening along with the codec to achieve what is refereed to as RemoteFX. It's not just the codec. The capture method and the codec need to be developed together to get the best performance.

An important note, well behaved applications still remote best in chained mode. Codec mode can never outperform chained mode on bandwidth for well behaved applications.