Ubuntu Bionic Turtle 20.04.1 下带有 Gnome 窗口管理器的 TigerVNC

Ubuntu Bionic Turtle 20.04.1 下带有 Gnome 窗口管理器的 TigerVNC

我相信,这篇文章对社区来说很有用,可以作为 TigerVNC 和 Ubuntu 的指南。如果有更好的地方或更好的格式 - 请建议将其放在哪里。有一些小技巧可以使事情正常运作,但在互联网上不容易找到。无论如何,如果这条信息对社区没有价值并且没有被社区看到,我可以删除这篇文章。

如果有授权人能建议如何更好地进行,我将不胜感激。

我想分享一些我与 Ubuntu Bionic Turtle 20.04.1 和最新的 TigerVNC 服务器斗争的记录。互联网上的所有指南似乎都已经过时,没有抓住工具和操作系统的当前情况。这一点很快就会显现出来。所以,让我开始吧。

安装所有必要的软件包

# apt install tigervnc-standalone-server tigervnc-common tigervnc-xorg-extension tigervnc-viewer

更改活动用户并设置 VNC 密码

# su - user
$ vncpasswd

此时,几乎所有指南都建议运行

$ vncserver -localhost

获取 ~/.vnc 目录中的必要配置文件。我不得不让他们的作者感到不快——这不再起作用了。vncserver -localhost 不执行任何操作并终止并出现错误。在安装过程中,TigerVNC 在 /etc/X11/Xvnc-session 处创建一个特定文件,它是同一层次结构下系统范围 Xsession 文件的某种代理。默认情况下,TigerVNC 会获取此文件并忽略任何本地 ~/.vnc/xstartup。~/.vnc/ 层次结构中有两个关键文件,我将进一步讨论这一点。

显然,没有办法从命令行 shell 运行 TigerVNC - 它不再受支持。只需要服务。正如文档所述,无法从命令行创建正确的环境,从命令行唯一可能得到的是带有十字光标的黑色/青色/灰色屏幕(在最好的情况下)。

所以,我决定配置服务。有很多服务文件配置的示例。/etc/systemd/system/[电子邮件保护]文件:

[Unit] 
Description=Remote desktop service (VNC) 
After=syslog.target network.target 

[Service] 
Type=forked
User=user
PAMName=login 
PIDFile=/home/user/.vnc/%H%i.pid 
ExecStartPre=/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :
ExecStart=/usr/bin/vncserver :%i -localhost no -geometry 1024x768 -depth 24
ExecStop=/usr/bin/vncserver -kill :%i 

[Install] 
WantedBy=multi-user.target

$ sudo systemctl daemon-reload
$ sudo systemctl enable vncserver@1
$ sudo systemctl start vncserver@1
$ sudo systemctl status vncserver@1

TigerVNC 抱怨 /etc/X11/Xvnc-session 初始化脚本异常终止,并且不执行任何操作。这是 ~/.vnc/config 变得必要的地方。它可能包含许多选项,但对我来说,关键的是

session=ubuntu

显然,可以指定任何会话,可以在 /usr/share/xsessions 中找到可用会话列表。如文档所述,有如下文件

ubuntu.desktop
xsession1.desktop
xsession2.desktop

变量 session 必须等于不带扩展名的会话名称,即 ubuntu、xsession1 或 xsession2。创建此本地配置文件后,我能够为配置的用户帐户运行 TigerVNC,但令人惊讶的是,会话在启动后立即变为非活动状态,再次出现一些错误。进一步调查发现了其他参数,必须将其添加到服务配置文件中:

Environment=XDG_SESSION_TYPE=x11

我花了很多时间才弄清楚。必须使用 loginctl 来找出需要为 XDG_SESSION_TYPE 指定什么会话类型。根据我的调查,正确的值是“x11”和“wayland”。我不知道什么是“wayland”,也不知道它与“x11”有何不同。就我而言,“x11”是正确的设置。设置后,选定用户的 VNC 会话变为几乎操作。

$ sudo systemctl start vncserver@1
$ sudo systemctl status vncserver@1
$ sudo systemctl status vncserver@1

如果速度足够快,第一个状态调用会显示 TigerVNC 服务正常运行,而第二个状态调用会显示 TigerVNC 服务已终止且退出代码为零。没有错误,会话刚刚终止。这花了我几个小时的调试时间。在检查了 /var/log/syslog 中的几百行后,我发现许多服务都在抱怨一些奇怪的错误,后来 Xserver 因某些关键进程被终止而退出。几个小时的搜索发现了一个非常肮脏的黑客行为 - 必须更改 /etc/systemd/system/[电子邮件保护]按以下方式归档:

[Unit] 
Description=Remote desktop service (VNC) 
After=syslog.target network.target 

[Service] 
Type=simple
User=user
Environment=XDG_SESSION_TYPE=x11
PAMName=login 
PIDFile=/home/user/.vnc/%H%i.pid 
ExecStartPre=/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :
ExecStart=/usr/bin/vncserver :%i -fg -localhost no -geometry 1024x768 -depth 24
ExecStop=/usr/bin/vncserver -kill :%i 

[Install] 
WantedBy=multi-user.target

因此,服务在以下上下文中运行:systemd并且 X 应用程序能够从系统/环境中获取所有必要的句柄。此时,我能够从我的 MacOS 计算机的 vncviewer 中看到我的桌面。顺便说一句,运行 TigerVNC 的用户帐户不再能从控制台访问。输入密码后,任何登录尝试都会立即终止。

我记得几年前我曾为 CentOS 5/6/7 和 Ubuntu 14/15/16、Debian 10 和其他几个操作系统设置过 VNC 服务器。我以前从未遇到过安装 TigerVNC for Ubuntu 20.04.1 时遇到的问题的十分之一。安装过程一直都很顺利和简单。现在我有几个非常大的问题要问这里的人们:

  1. 这是正常情况吗?
  2. 我是否只是看到 Ubuntu/TigerVNC 发生了重大变化,或者这是从现在开始事情运作的新方式?
  3. 他们为什么要阻止本地和远程桌面共存?现在我需要为本地和远程工作设置单独的帐户,这真的很痛苦。
  4. 我的设置方式是否存在严重错误?是否可以简化流程并使其变得简单?

相关内容