Основанные на GNOME программы всегда занимают приблизительно 30 секунд для запуска по SSH. Даже самые простые, как gnome-calculator
. После того, как упомянутые программы запускаются, они выполняют absulutely штраф. Я запускаю использование сессии SSH ssh <user>@<host> -YC
команда. Я попытался проверить использование ЦП в течение этого периода ожидания, но нет ничего из дежурного блюда. Сетевое использование пропускной способности, кажется, не является чрезмерным ни один (в диапазоне 0,2 к 2 кибибитам/с).
Я использую свою машину Ubuntu 19.10 по SSH много, и это - настоящая проблема для меня. Я видел эту проблему в более ранних версиях Ubuntu также.
Править: Я нашел, что эта задержка происходит когда вызов с g_application_run()
сделан. Выполнение strace
объясняет то время задержки. Последний syscall перед той задержкой poll([{fd=11, events=POLLIN}], 1, 25000)
. 25000 являющийся тайм-аутом в millisecons. Все затронутые программы останавливаются в этом конкретном syscall. Дескриптор файла 11 создается с помощью eventfd2(0, EFD_CLOEXEC|EFD_NONBLOCK)
. Все это означает, что программа ожидает некоторого события, которого никогда не происходит. Но чем это может быть и что может вызвать его?
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-адресом.
Я полагаю, что это связано с тем, что переменная среды DISPLAY не распространяется на локальную службу под названием "xdg-desktop-portal-gtk". Если он не запустится, каждое приложение gnome попытается запустить его во время запуска, подождет, пока он не появится, а затем истечет время ожидания через ~ 25 секунд в случае сбоя.
Вы можете исправить это вручную, выполнив это после входа в систему. Сначала обновите среду для процессов dbus:
$ dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY
Затем запустите службу:
$ systemctl --user start xdg-desktop-portal-gtk
Теперь запуск снова должен быть быстрым.
Если кто-то знает лучший/самый элегантный способ сделать это автоматически для каждого входа в удаленную систему, я хотел бы знать об этом.