可以从 CLI 启动 Vncserver GNOME 桌面会话,但收到“哦不!出了问题!”使用启动脚本或 Systemd 时

可以从 CLI 启动 Vncserver GNOME 桌面会话,但收到“哦不!出了问题!”使用启动脚本或 Systemd 时

发布此帖子是因为我在寻找解决方案时看到了很多类似的帖子,但没有解决方案。

问题是我可以vncserver通过在终端或脚本中发出命令来启动会话来创建 GNOME 桌面 - 但只有当 ssh 进入计算机或直接在计算机上时:而不是通过启动时的脚本或通过 systemd 。这是~/.vnc/xstartup脚本:

#!/bin/sh 
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey -cursor_name left_ptr
xsetroot -solid grey left_ptr
vncconfig -iconic &
dbus-launch --exit-with-session /usr/bin/gnome-session &

这是启动会话的命令:vncserver :1 -localhost no -geometry 2560x1440 -depth 24

ssh一切都可以在计算机本身上完美运行:无论是直接终端命令还是通过包含该命令的脚本。

如果用作启动脚本,同一脚本将失败, 和通过 systemd 执行相同的命令将失败。嗯,“失败”是很强烈的:它确实导致了半功能性的 GNOME 桌面会话。也就是说,它确实启动了一个vnc我可以访问的会话,并且该会话已启动我的启动应用程序(例如,gnome-terminalnautilus)。但是底层桌面未能正确启动,因此我无法移动窗口(尽管我可以退出它们),没有顶部栏,并且我得到“哦不!出了问题!”桌面应该在的位置出现错误。

我的感觉是,这与启动时的运行方式有关~/.vnc/xstartup,但我无法弄清楚。我正在使用tigervnc,因为它是唯一一个看起来足够喜欢 GNOME 并可以工作的工具。

答案1

在 VNC 的旧时代,您将运行一个 VNC 服务,它将为多个客户端提供单个会话的服务(该会话甚至不需要登录,您可以从 VNC 以任何本地用户身份登录)。世界上一切都是光明美好的(我对这种做事方式感到沾沾自喜,最初觉得改变很难接受)。

然后,用户和管理员希望多个用户能够使用 VNC 通过 VNC 运行独立的会话。这样做需要运行 VNC 服务器软件的独立实例。 Systemd 通过提供模板化服务单元文件来支持这一点。这允许一个 VNC 服务器单元文件为该服务的多个实例提供服务,并且运行/使用该服务的用户的用户名将被参数化。请参阅“服务模板”:https://www.man7.org/linux/man-pages/man5/systemd.service.5.html

您应该使用 TigerVNC Server 附带的模板化服务单元文件(新副本应位于/lib/systemd/系统/[电子邮件受保护])。然后每个用户都可以在需要时启动该服务的实例。这将导致该用户的〜/.vnc/passwd〜/.vnc/xstartup用于他们的服务实例。

这确实在某种程度上阻止了您正在寻找的“启动时”功能(您可以在启动时启用该服务的多种变体,但它们的端口号可能会改变),但无论如何您应该通过 SSH 转发 VNC 会话(因为VNC 不安全。)

相关内容