基于 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`