Вопрос или проблема
Как указано в комментарии к вопросу, это было связано с gfx.xrender.enabled
. Ответ можно найти в помеченной дублирующей записи, но его легко упустить на фоне всей этой информации о ssh и протоколе X11.
Прямая ссылка на ответ: https://unix.stackexchange.com/a/557920/66307
Моя проблема начала происходить примерно месяц назад. В данный момент я использую Firefox 89.0.1.
До этого момента Firefox работал вполне нормально через ssh -X
. Я запускаю его с машины Ubuntu (сервер) на виртуальной машине Ubuntu (клиент) и с другой машины Ubuntu (сервер) на Windows 10 (клиент), обе показывают одинаковые симптомы. Это не моя аппаратная настройка или -X
, так как все машины подключены к локальному гигабитному коммутатору, и другие приложения (включая Thunderbird) работают прекрасно. Они чуть медленнее, чем если бы я запускал их на своем рабочем столе, но вполне приемлемы.
После того как это произошло, Firefox просто …. медленный. Я использую его с --no-remote
, а фактическое окно Firefox появляется менее чем за секунду. Затем оно зависает там на около 2 минут, прежде чем вкладки станут доступными. Вывод в моей оболочке ssh
выглядит так:
$ firefox --no-remote &
libGL ошибка: Не найдены соответствующие fbConfigs или визуализации
libGL ошибка: не удалось загрузить драйвер: swrast
(firefox:757486): GLib-GIO-CRITICAL **: 10:39:54.241: g_dbus_proxy_new: утверждение 'G_IS_DBUS_CONNECTION (connection)' не выполнено
(firefox:757486): GLib-GIO-CRITICAL **: 10:39:54.241: g_dbus_proxy_new: утверждение 'G_IS_DBUS_CONNECTION (connection)' не выполнено
(firefox:757486): GLib-GIO-CRITICAL **: 10:39:54.241: g_dbus_proxy_new: утверждение 'G_IS_DBUS_CONNECTION (connection)' не выполнено
[GFX1-]: Не удалось создать контекст GL для WebRender: 0
[GFX1-]: FEATURE_FAILURE_WEBRENDER_INITIALIZE_UNSPECIFIED
[GFX1-]: Не удалось подключиться к WebRenderBridgeChild.
[GFX1-]: Резервирование WR на SW-WR
libGL ошибка: Не найдены соответствующие fbConfigs или визуализации
libGL ошибка: не удалось загрузить драйвер: swrast
libGL ошибка: Не найдены соответствующие fbConfigs или визуализации
libGL ошибка: не удалось загрузить драйвер: swrast
Но это не выглядит слишком иначе, чем то, что у меня было раньше.
Может кто-нибудь предложить что-то, что могло бы ускорить это? Я не ищу ответы, которые говорят мне, что ssh -X
медленно (это так, но меня это устраивает для всех других приложений), или вещи, связанные с компрессией или шифровальными наборами. У меня с сетью все в порядке, кроме Firefox.
Это не моя аппаратная настройка или -X, так как все машины подключены к локальному гигабитному коммутатору, и другие приложения (включая Thunderbird) работают прекрасно.
Дело в том, что X по сети, конечно, не поддерживает такие вещи, как приложения, которые напрямую рисуют в буферы памяти через драйвер GPU на серверной машине.
Тем не менее, такие методы ускорения являются тем, как вы достигаете даже приемлемого кадрирования для таких вещей, как прокрутка веб-сайтов или отображение видео. Поэтому браузеры сильно полагаются на это. Всё остальное было бы как в девяностых! В девяностые годы запуск видео в браузере на X11 был невозможен.
Гигабитный Ethernet не такой толстый (HDMI-соединение дает десятки Гбит/с), и вы в основном ограничены временем кругового маршрута, потому что каждая команда “нарисовать это” должна возвращать данные; X11 не асинхронный.
Таким образом, в целом, X по SSH: никогда не был отличным, не будет достаточным для просмотра, предсказуемо. Вполне возможно, что гигантская задержка рисования была чем-то, что разработчики Firefox не могли хорошо поддерживать без чрезмерного замедления всего остального.
Решение: не используйте X по SSH! Тонкие клиенты обычно рендерят в кадровый буфер на удаленной машине, и вы получаете только (хорошо сжимаемое) изображение этого, отправленное на вашу локальную (отображающую) машину. Вот что стоит за такими технологиями, как VNC или NX. (NX — это хорошая технология, вы должны попробовать её.)
Честно говоря, запускать Firefox удаленно имеет мало смысла: вы можете запускать его локально, так же, и просто передавать сетевой трафик через SSH. Вы можете поделиться своим профилем Firefox в виде файлов, используя rsync или даже sshfs (осторожно, чтобы не конкурировать за доступ с нескольких машин).
Ответ или решение
Проблема: медленная работа Firefox через ssh -X
Медленная работа Firefox при использовании ssh -X
— распространённая проблема, особенно для пользователей, работающих с удалёнными системами через X11. Данная ситуация может проявляться в виде долгого времени загрузки и отсутствия отклика после открытия приложения. Давайте разберёмся, что может вызывать такие проблемы и как их можно решить.
Причины снижения производительности
-
Протокол X11: X11 использует сетевое соединение для передачи команд, что делает его подверженным задержкам. Каждая команда рендеринга требует ответа, что может замедлять работу графически интенсивных приложений, таких как браузеры.
-
Отсутствие аппаратного ускорения: Если на удалённом сервере не настроено правильное аппаратное ускорение (что видно из сообщений об ошибках, таких как
libGL error: No matching fbConfigs or visuals found
), это приводит к тому, что браузер использует программный рендеринг, который значительно медленнее. -
Проблемы с совместимостью драйвера: Как указано в сообщении об ошибке, приложение не может найти подходящие драйверы для OpenGL, что также может быть причиной медленной работы.
Рекомендации по улучшению производительности
-
Настройка
gfx.xrender.enabled
: Это настройка вabout:config
браузера Firefox отвечает за использование XRender для ускорения графики. Убедитесь, что она включена (true
). В случае, если она уже включена и проблема сохраняется, попробуйте временно отключить её (false
). -
Замена X11 на альтернативные решения:
- VNC или NX: Эти протоколы работают по принципу передачи изображения, что позволяет минимизировать задержки и значительно повысить производительность. Например, NX может предоставлять более плавное взаимодействие с удалённым рабочим столом.
- Проброс локального порта: Вместо того, чтобы запускать браузер через X11, можно запустить его локально и использовать SSH-туннелирование для подключения к удалённым ресурсам.
-
Проверка и установка необходимых библиотек: Убедитесь, что у вас установлены правильные графические драйверы на сервере. Отсутствие нужных библиотек может также вызывать проблемы с производительностью.
-
Оптимизация конфигурации сети: Хотя вы отметили, что ваше оборудование и сеть находятся в порядке, убедитесь, что нет дополнительных ограничений со стороны firewall или сетевых устройств.
-
Использование дополнительных параметров для SSH: Проверьте параметры вашего SSH-соединения. Например, использование сжатия (
-C
) может помочь, но, как вы сами указали, это может не сильно повлиять на производительность в данном случае.
Заключение
Работа Firefox через ssh -X
может столкнуться с проблемами производительности из-за особенностей работы протокола X11 и графического рендеринга. Если после выполнения вышеперечисленных рекомендаций проблема остаётся нерешённой, рассмотрите возможность использования альтернативных решений для удалённого доступа. Удачи в ваших усилиях, и надеюсь, что эти рекомендации помогут вам значительно улучшить производительность вашего браузера в удалённой среде.