如何在 Debian 10上安装和配置 VNC

from — https://docmiao.com/community/tutorials/how-to-install-and-configure-vnc-on-debian-10
其他资料:
https://www.digitalocean.com/community/questions/unable-to-start-vnc-server-on-ubuntu-20-04-w-docker-droplet

虚拟网络计算(Virtual Network Computing,简称 VNC)是一种连接系统,它允许您使用键盘和鼠标与远程服务器上的图形桌面环境交互。 它使远程服务器上管理文件、软件和设置变得更加容易,因为用户还不熟悉命令行。

在本指南中,您将在 Debian 10服务器上设置一个 VNC 服务器,并通过 SSH 隧道安全地连接到它。 您将使用 TightVNC,一个快速、轻量级的远程控制包。 这个选择将确保我们的 VNC 连接即使在较慢的互联网连接上也是平稳的。

先决条件
为了完成这个教程,你需要:

根据 Debian 10的初始服务器设置指南设置一个 Debian 10服务器,包括一个具有 sudo 访问权限的非根用户和一个防火墙。
安装了 VNC 客户机并支持通过 SSH 隧道进行 VNC 连接的本地计算机。 在 Windows 上,可以使用 TightVNC、 RealVNC 或 UltraVNC。 在 macOS 上,您可以使用内置的屏幕共享程序,或者使用 RealVNC 之类的跨平台应用程序。 在 Linux 上,您可以从许多选项中进行选择,包括 vinagre、 krdc、 RealVNC 或 TightVNC。
第一步ー安装桌面环境及 VNC 伺服器
默认情况下,Debian 10服务器没有安装图形化桌面环境或 VNC 服务器,因此我们将首先安装这些服务器。 具体来说,我们将为最新的 Xfce 桌面环境和官方 Debian 存储库中提供的 TightVNC 包安装包。

在你的服务器上,更新你的软件包列表:

sudo apt update

现在在你的服务器上安装 Xfce 桌面环境:

sudo apt install xfce4 xfce4-goodies

在安装过程中,系统会提示您从一系列可能的选项中选择键盘布局。 选择一个适合你的语言,然后回车。 安装将继续进行。

安装完成后,安装 TightVNC 服务器:

sudo apt install tightvncserver

安装完成 VNC 服务器的初始配置后,使用 vncserver 命令设置安全密码并创建初始配置文件:

vncserver

系统会提示您输入并验证远程访问机器的密码:

Output
You will require a password to access your desktops.

Password:
Verify:

密码长度必须在6至8个字符之间。超过8个字符的密码将被自动截断。

一旦您验证了密码,您就可以选择创建一个只用于视图的密码。 使用纯视图密码登录的用户将无法使用鼠标或键盘控制 VNC 实例。 如果您想使用 VNC 服务器向其他人演示某些内容,这是一个有用的选项,但不需要这样做。

然后,该过程为服务器创建必要的默认配置文件和连接信息:

Output
Would you like to enter a view-only password (y/n)? n
xauth:  file /home/sammy/.Xauthority does not exist

New 'X' desktop is your_hostname:1

Creating default startup script /home/sammy/.vnc/xstartup
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log

现在,让我们配置 VNC 服务器。

步骤2ー配置 VNC 服务器
Vnc 服务器需要知道启动时要执行哪些命令。 具体来说,VNC 需要知道它应该连接到哪个图形化桌面。

这些命令位于一个名为 xstartup 的配置文件中。 主目录下的 vnc 文件夹。 启动脚本是在上一步运行 vncserver 命令时创建的,但是我们将创建自己的脚本来启动 Xfce 桌面。

第一次设置 VNC 时,它在端口5901上启动一个默认的服务器实例。 此端口称为显示端口,VNC 将其称为: 1。 Vnc 可以在其他显示端口上启动多个实例,如: 2、 : 3等等。

因为我们要改变 VNC 服务器的配置方式,所以首先使用以下命令停止运行在端口5901上的 VNC 服务器实例:

vncserver -kill :1

输出应该是这样的,尽管你会看到一个不同的 PID:

Output
Killing Xtightvnc process ID 17648

在修改 xstartup 文件之前,备份原始文件:

mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
现在创建一个新的 xstartup 文件并在文本编辑器中打开它:

nano ~/.vnc/xstartup

无论何时启动或重新启动 VNC 服务器,都会自动执行此文件中的命令。 我们需要 VNC 来启动我们的桌面环境,如果它还没有启动。 将以下命令添加到文件中:

~/.vnc/xstartup

#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

或者类似

#!/bin/bash
#/etc/X11/Xsession
#xrdb $HOME/.Xresources
#startxfce4 &
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
dbus-launch xfce4-session

文件中的第一个命令 xrdb $HOME / 。 告诉 VNC 的 GUI 框架读取用户的。 Xresources 文件。 . Xresources 是用户可以更改图形桌面的某些设置的地方,比如终端颜色、光标主题和字体渲染。 第二个命令告诉服务器启动 Xfce,在这里可以找到所有图形化软件,您可以轻松地管理服务器。

为了确保 VNC 服务器能够正确地使用这个新的启动文件,我们需要使其可执行。

sudo chmod +x ~/.vnc/xstartup

现在,重新启动 VNC 服务器。

vncserver

你会看到类似这样的输出:

Output
New 'X' desktop is your_hostname:1

Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log

配置就绪后,让我们从本地计算机连接到服务器。

第三步ー安全连接 VNC 桌面
Vnc 本身在连接时不使用安全协议。 我们将使用 SSH 隧道安全地连接到服务器,然后告诉 VNC 客户机使用该隧道,而不是进行直接连接。

在本地计算机上创建一个 SSH 连接,安全地转发到 VNC 的本地主机连接。 你可以通过 Linux 或 macOS 上的终端,使用以下命令:

ssh -L 5901:127.0.0.1:5901 -C -N -l sammy your_server_ip

L 开关指定端口绑定。 在本例中,我们将远程连接的端口5901绑定到本地计算机上的端口5901。 C 开关支持压缩,而-n 开关告诉 ssh 我们不想执行远程命令。 L 开关指定远程登录名。

记住用你的非根用户名和服务器的 IP 地址替换 sammy 和你的服务器 IP。

如果您使用图形化的 SSH 客户机,比如 PuTTY,那么使用您的服务器 IP 作为连接 IP,并在程序的 SSH 隧道设置中将 localhost: 5901设置为新的转发端口。

隧道运行后,使用 VNC 客户机连接到 localhost: 5901。 系统将提示您使用在步骤1中设置的密码进行身份验证。

一旦连接上,您将看到默认的 Xfce 桌面。

选择使用默认配置来快速配置您的桌面。

你可以通过文件管理器或命令行访问主目录中的文件,如下所示:

在本地计算机上,在终端中按 ctrl + c 停止 SSH 通道并返回提示符。 这也会断开 VNC 会话。

接下来,让我们将 VNC 服务器设置为服务。

第四步ー将 VNC 作为系统服务运行
接下来,我们将 VNC 服务器设置为一个 systemd 服务,这样我们就可以像其他服务一样根据需要启动、停止和重新启动它。 这还将确保在服务器重新引导时启动 VNC。

首先,使用您喜欢的文本编辑器创建一个名为 / etc / systemd / system / vncserver@. service 的新单元文件:

sudo nano /etc/systemd/system/vncserver@.service

名称末尾的@符号将允许我们传入一个参数,以便在服务配置中使用。 我们将使用它来指定在管理服务时要使用的 VNC 显示端口。

将以下行添加到文件中。 确保在 PIDFILE 值中更改 User、 Group、 WorkingDirectory 和用户名的值以匹配您的用户名:

/etc/systemd/system/vncserver@.service
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy

PIDFile=/home/sammy/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

如果 VNC 已经在运行,ExecStartPre 命令将停止它。 Execstart 命令启动 VNC 并将颜色深度设置为24位颜色,分辨率为1280×800。 您还可以修改这些启动选项以满足您的需要。

保存并关闭文件。

接下来,让系统知道新的单元文件。

sudo systemctl daemon-reload

启用单元文件。

sudo systemctl enable vncserver@1.service

@ 符号后面的1表示服务应该出现在哪个显示编号上,在这种情况下,默认值为: 1,如步骤2所述。 .

如果 VNC 服务器的当前实例仍在运行,则停止该实例。

vncserver -kill :1

然后像启动其他任何系统 / 服务一样启动它。

sudo systemctl start vncserver@1

你可以验证它是从这个命令开始的:

sudo systemctl status vncserver@1

如果启动正确,输出应该是这样的:

Output
● vncserver@1.service - Start TightVNC server at startup
   Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-10-10 17:56:17 UTC; 5s ago
  Process: 935 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2)
  Process: 940 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
 Main PID: 948 (Xtightvnc)
. . .

您的 VNC 服务器现在将在您重新启动机器时可用。

再次启动你的 SSH 隧道:

ssh -L 5901:127.0.0.1:5901 -C -N -l sammy your_server_ip

然后使用 VNC 客户端软件建立一个新连接,连接到 localhost: 5901以连接到您的计算机。

总结
现在已经有一个安全的 VNC 服务器在 Debian 10服务器上运行了。 现在您可以使用一个易于使用和熟悉的图形界面来管理文件、软件和设置,并且可以远程运行像 web 浏览器这样的图形软件。

上一篇
下一篇