Почему запуск любой программы на базе GNOME по SSH занимает около 30 секунд?

Вопрос или проблема

Программы на базе GNOME всегда запускаются примерно за 30 секунд по SSH. Даже самые простые, такие как gnome-calculator. После запуска эти программы работают абсолютно нормально. Я начинаю сессию SSH, используя команду ssh <user>@<host> -YC. Я пытался проверить использование процессора в этот период ожидания, но ничего необычного не было. Потребление сетевой полосы также не кажется чрезмерным (в пределах 0,2 до 2 KiB/s).

Я часто использую свой компьютер с Ubuntu 19.10 по SSH и это довольно серьезная проблема для меня. Я замечал эту проблему и в более ранних версиях Ubuntu.

ИСПРАВЛЕНИЕ: Я выяснил, что задержка возникает при вызове g_application_run(). Запуск strace объясняет это время задержки. Последний системный вызов перед этой задержкой – это poll([{fd=11, events=POLLIN}], 1, 25000). 25000 – это тайм-аут в миллисекундах. Все затронутые программы зависают на этом конкретном системном вызове. Файловый дескриптор 11 создается с помощью eventfd2(0, EFD_CLOEXEC|EFD_NONBLOCK). Все это означает, что программа ждет какого-то события, которое никогда не происходит. Но что это может быть и что может его вызывать?

Я полагаю, что это связано с тем, что переменная окружения DISPLAY не передается локальной службе под названием “xdg-desktop-portal-gtk”. Если она не удается запуститься, каждое приложение GNOME попытается запустить ее во время старта, будет ждать, пока она запустится, а затем тайм-аут примерно через 25 секунд, когда она не удается.

Вы можете исправить это вручную, сделав это после входа в систему. Сначала обновите окружение для процессов D-Bus:

$ dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY

Затем запустите службу:

$ systemctl --user start xdg-desktop-portal-gtk

Теперь запуск должен быть снова быстрым.

Если кто-то знает лучший/самый изящный способ сделать это автоматически для каждого пользователя, входящего в удаленную систему, я бы хотел об этом узнать.

30 секунд звучит очень похоже на тайм-аут DNS.

Обновите вопрос с:

time ssh localhost echo
time ssh -YC user@remote echo
time ssh -YC localhost gnome-calculator

Мое предположение, что remote не может выполнить обратный поиск вашего IP-адреса. Попробуйте добавить это в server:/etc/hosts

 i.p.n.o myclient

где i.p.n.o – это IP-адрес вашего клиента.

Это заставляет задуматься (с иронией), почему программы GNOME не выполняют

systemctl --user import-environment --all

и/или

dbus-update-activation-environment --all

для вас…

Я помню, что эта ерунда была проблемой в дни GNOME Bonobo около 20 лет назад, когда я безумно ломал голову, почему мои программы не загружаются через удаленную сессию SSH -X, только чтобы выяснить, когда я вернулся домой, что они все были загружены на моем рабочем столе.

Теперь та же ошибка совершается снова.

Возможно, это лучшее решение, предоставляющее загрузчик dbus для каждого входа:
https://unix.stackexchange.com/a/346092/139357

Я добавил следующую строку в ~/.profile. Это устанавливает переменную DBUS_SESSION_BUS_ADDRESS. Это решило проблему для меня.

eval `dbus-launch --sh-syntax`

Ответ или решение

При запуске программ на базе GNOME через SSH обычно возникает задержка около 30 секунд. Эта проблема часто связана с неправильной конфигурацией, которая мешает приложениям корректно взаимодействовать с параметрами окружения и сервисами. В данном ответе мы постараемся подробно разобраться в причинах этой задержки и возможных решениях.

Основная Проблема

Как указано в приведённом вами описании, основное затруднение возникает во время выполнения вызова g_application_run(), когда происходит системный вызов poll([{fd=11, events=POLLIN}], 1, 25000). Это означает, что программа пытается дождаться события, которое никогда не происходит, и, как следствие, время ожидания истекает. Этот конкретный файл-дескриптор создаётся через eventfd2(0, EFD_CLOEXEC|EFD_NONBLOCK), что указывает на то, что приложения ждут события от сервиса, который не работает, или от неправильно настроенного окружения.

Возможные Причины

  1. Проблемы с D-Bus и xdg-desktop-portal-gtk: Приложения GNOME зависят от правильной настройки D-Bus для активации сессий. Если переменные окружения, такие как DISPLAY, не были корректно инициализированы, это может привести к тому, что сервис xdg-desktop-portal-gtk не стартует. В результате все запущенные программы ожидают его и в случае неудачи терпят таймаут.

  2. Настройки сети и DNS: Задержка может быть связана и с проблемами в сетевой конфигурации, такими как невозможность разрешения имени хоста или IP-адреса. Если SSH-сервер не может выполнить обратный DNS-запрос для клиента, это также может вызывать подобные задержки.

  3. Неправильные настройки окружения: Отсутствие необходимых переменных окружения, таких как DBUS_SESSION_BUS_ADDRESS, DISPLAY и XAUTHORITY, может вызвать долгие задержки при запуске приложений. Программы GNOME ожидают, что эти переменные будут установлены, и если они отсутствуют, это приводит к временным задержкам.

Решения

  1. Инициализация переменных окружения: После входа в систему через SSH вы можете вручную инициализировать переменные окружения для D-Bus:

    dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY
    systemctl --user start xdg-desktop-portal-gtk
  2. Автоматизация процесса: Чтобы избежать повторного выполнения этих команд при каждом входе, можно добавить следующее в файл ~/.profile:

    eval `dbus-launch --sh-syntax`
  3. Настройка файла hosts: Если задержка связана с проблемами с DNS, добавьте ваш IP-адрес в файл /etc/hosts на сервере:

    i.p.n.o myclient
  4. Использование системных сервисов: Рассмотрите возможность использования systemctl --user import-environment --all, чтобы автоматически импортировать все переменные окружения для пользователя.

Заключение

Проблемы с задержкой запуска программ GNOME при работе через SSH могут быть вызваны множеством факторов, начиная от неправильной настройки D-Bus и заканчивая проблемами с разрешением DNS. Следуя предложенным шагам, вы сможете значительно сократить время ожидания и улучшить опыт работы с приложениями на вашей системе. Если вам необходимо более глубокое расследование проблемы или у вас есть дополнительные вопросы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...