У меня сложилось впечатление, что весь экран пересылается, независимо от того, что происходит. Тогда пересылка X11 должна быть независимой от приложения.
Нет, на самом деле все наоборот. Пересылка X11 называется "пересылка X11", потому что она транспортирует фактические сообщения протокола X, используемые приложениями для визуализации своих окон на «X-сервере» (обычно Xorg). Эти сообщения являются командами для создания / перемещения окон, рисования текста и графических примитивов (линий / прямоугольников), рисования растровых изображений и т.д.
Можно сказать, что это концептуально противоположно протоколам "полноэкранного изображения", таким как VNC/RFB. Я думаю, что это несколько сравнимо с RDP Windows, который также был сделан для передачи команд рисования GDI.
Итак, причины, по которым вы видите различия между программами:
Цитируя пост, на который вы ссылались, изначально большинство программ на основе X работали так:
По сути, X11 не отправляет экран на ваш компьютер, но отправляет инструкции по отображению, чтобы X-сервер на вашем локальном компьютере мог воссоздать экран в вашей локальной системе.
Поэтому, когда программа хотела показать кнопку, она просто послала несколько коротких команд - "нарисовать прямоугольник", "нарисовать текст" и, возможно, несколько линий, чтобы она выглядела в 3D.
Со временем это изменилось, программы начали выполнять рендеринг самостоятельно, и многие из этих инструкций стали просто «вот растровое изображение, которое я уже отрисовал, поместите это на экран» - очень быстро локально, но очень медленно по сети из-за отсутствия в X11 какого-либо сжатие изображения.
Это означает, что программы, созданные с использованием современных наборов инструментов, работают намного медленнее по сравнению с сетевым X11, даже если это что-то столь же простое, как сглаженные шрифты.
(Напротив, RDP адаптировался с течением времени и включает различные формы сжатия изображений, такие как JPEG и даже H.264; вы часто можете заметить артефакты сжатия во время загрузки полного изображения.)
К счастью, большинство инструментариев пользовательского интерфейса, таких как GTK, реализуют отслеживание повреждений, поэтому отправляются только обновленные регионы. Однако некоторые программы (например, несколько версий Firefox/Thunderbird) не поддерживают это и запрашивают полную повторную визуализацию всего окна, даже если оно действительно не обновлено.
Это еще одно различие между программами - программы с хорошим поведением по-прежнему вполне пригодны для использования в сети, но глючные программы могут насыщать канал со скоростью 100 Мбит / с, не делая абсолютно ничего полезного.