Le protocole X11 n'a jamais été conçu pour gérer des opérations à forte intensité graphique (en termes de bitmaps/textures). À l'époque où X11 a été conçu, les graphiques informatiques étaient beaucoup plus simples qu'aujourd'hui.
En fait, X11 n'envoie pas l'écran à votre ordinateur, mais il envoie les instructions d'affichage pour que le serveur X de votre ordinateur local puisse recréer l'écran sur votre système local. Et cela doit être fait à chaque changement/rafraîchissement de l'affichage.
Votre ordinateur reçoit donc un flux d'instructions du type "Tracez une ligne de cette couleur à partir des coordonnées x,y jusqu'à (xx,yy), tracez un rectangle de W pixels de large, H pixels de haut avec un coin supérieur gauche à (x,y), etc.
Le client local n'est pas vraiment conscient de ce qui doit être mis à jour et le système distant dispose de très peu d'informations sur ce dont le client a réellement besoin. Le serveur doit donc envoyer un grand nombre d'informations redondantes dont le client n'a pas forcément besoin.
Ceci est très efficace si l'affichage à rendre est constitué d'un nombre limité de formes graphiques simples et que seule une faible fréquence de rafraîchissement (pas d'animations et autres) est nécessaire. C'était le cas à l'époque où X11 a été développé.
Mais les interfaces graphiques modernes comportent beaucoup d'éléments visuels et la plupart d'entre eux doivent être envoyés du système distant vers votre client sous la forme de bitmaps/textures/fontes de caractères qui prennent beaucoup de bande passante. Et toutes les sortes d'images comprennent des effets animés qui nécessitent des mises à jour fréquentes. Et les écrans ne cessent de grossir : deux fois plus large/haut, c'est quatre fois plus de pixels.
Bien sûr, au fil du temps, des améliorations ont été apportées au protocole X11 afin de l'optimiser autant que possible, mais la conception de base sous-jacente est, par essence, tout simplement inadaptée aux exigences du type d'interface graphique que les gens attendent aujourd'hui.
D'autres protocoles (comme RDP et VNC) sont davantage conçus pour laisser le système distant faire tout le travail difficile et laisser ce système décider des mises à jour à envoyer au client (sous forme de bitmaps compressés) aussi efficacement que possible. Cela s'avère souvent plus efficace pour les interfaces graphiques modernes.
Aucune des deux méthodes n'est parfaite et ne permet de faire face à toutes les situations de manière égale. Il n'existe pas de protocole d'affichage unique capable de répondre à tous les cas d'utilisation imaginables.
Dans la plupart des cas, il suffit donc d'essayer tous les protocoles pris en charge entre votre client local et le serveur distant et d'utiliser celui qui donne les meilleurs résultats. Dans certains cas, il n'y a pas de choix et vous devez vous contenter de ce qui est disponible.
La plupart des protocoles permettent d'ajuster les performances, mais nombre de ces paramètres ne sont disponibles que sur le serveur et ne sont pas accessibles à l'utilisateur moyen. (Et les configurer correctement est un peu un art obscur. Beaucoup de sys-admins ne seront pas prêts à s'occuper de cela).
Dans la plupart des cas, le moyen le plus simple d'améliorer les performances (parfois de façon spectaculaire) est de passer à un environnement de bureau plus simple, avec moins d'effets visuels, et de renoncer à l'utilisation d'images d'arrière-plan.