为什么通过 SSH 启动任何基于 GNOME 的程序大约需要 30 秒?

为什么通过 SSH 启动任何基于 GNOME 的程序大约需要 30 秒?

基于 GNOME 的程序总是需要大约 30 秒才能通过 SSH 启动。即使是最简单的程序,例如gnome-calculator。上述程序启动后,它们运行得非常好。我正在使用ssh <user>@<host> -YC命令启动 SSH 会话。我尝试在此等待期间检查 CPU 使用率,但没有什么异常。网络带宽使用率似乎也不算过高(在 0.2 到 2 KiB/s 的范围内)。

我经常通过 SSH 使用 Ubuntu 19.10 机器,这对我来说是个大问题。我在早期的 Ubuntu 版本中也遇到过这个问题。

编辑:我发现这种延迟发生在调用时g_application_run()。运行strace解释了延迟时间。延迟之前的最后一个系统调用是poll([{fd=11, events=POLLIN}], 1, 25000)。25000 是超时(以毫秒为单位)。所有受影响的程序都在此特定系统调用处停滞。文件描述符 11 是使用创建的eventfd2(0, EFD_CLOEXEC|EFD_NONBLOCK)。所有这些意味着程序正在等待某种永远不会发生的事件。但它可能是什么,又是什么原因造成的?

答案1

我认为这是由于 DISPLAY 环境变量未传播到名为“xdg-desktop-portal-gtk”的本地服务。如果无法启动,每个 gnome 应用程序都会在启动期间尝试启动它,等待它启动,然后在失败后约 25 秒后超时。

您可以在登录后通过执行以下操作来手动修复此问题。首先,更新 dbus 进程的环境:

$ dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS 显示 XAUTHORITY

然后启动服务:

$ systemctl --user 启动 xdg-desktop-portal-gtk

现在启动应该又快了。

如果有人知道每次使用登录远程系统时自动执行此操作的最佳/最优雅的方法,我很想了解一下。

答案2

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

其中 ipno 是您的客户端 IP 地址。

答案3

这让人不禁想问,为什么 gnome 程序无法执行

systemctl --user import-environment --all

和/或

dbus-update-activation-environment --all

为你...

我记得大约 20 年前,在 gnome bonobo 时代这种无稽之谈就是一个问题,我疯狂地想知道为什么我的程序没有通过远程SSH -X会话加载,而当我回到家时才发现它们都加载在了我的桌面上。

如今同样的错误又再犯。

这可能是提供每次登录 dbus 启动器的最佳解决方案: https://unix.stackexchange.com/a/346092/139357

我在 ~/.profile 中添加了以下行,它设置了 DBUS_SESSION_BUS_ADDRESS 变量。它帮我解决了这个问题。

eval `dbus-launch --sh-syntax`

相关内容