Ubuntu 设置 VNC 远程桌面

安装桌面环境

如果服务器的 Ubuntu 还没有安装桌面环境,可以选择以下之一安装:

GNOME

GNOME 是 Ubuntu Desktop 原生桌面环境。

# 安装基本的 GNOME 桌面环境
sudo apt install -y gnome-session
# 或者安装全套的 GNOME 应用程序
sudo apt install -y ubuntu-desktop

如果提示设置显示管理器,我们设置 gdm3 就好。

KDE

# 安装基本的 Plasma 桌面环境
sudo apt install -y kde-plasma-desktop
# 或者安装全套的 KDE 应用程序
sudo apt install -y kubuntu-desktop

Xfce

Xfce 是一款轻量级的桌面环境。

# 安装基本的 Xfce 桌面环境
sudo apt install -y xfce4
# 或者安装全套的 Xfce 应用程序
sudo apt install -y xubuntu-desktop

连接远程桌面

  1. 安装 VNC 服务器:

    # TightVNC
    sudo apt install -y tightvncserver
    # TigerVNC
    sudo apt install -y tigervnc-standalone-server tigervnc-xorg-extension
    
  2. 设置 VNC 访问密码:

    vncserver
    

    这里需要填入一个长度小于 8 位的密码,多余的位数会被截去。接下来系统会提示你是否要设置提供仅查看功能的密码,一般我们不需要这个功能,可以选 n

  3. 配置 VNC 启动文件:

    mv ~/.vnc/xstartup{,.bak}  # 备份原文件
    vim ~/.vnc/xstartup        # 创建新文件
    

    填入以下配置:

    #!/bin/bash
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    startxfce4 &  # 启动 Xfce4 桌面环境
    

    为文件添加执行权限:

    chmod +x ~/.vnc/xstartup
    
  4. 启动 VNC 服务器实例:

    vncserver -localhost
    

    注意启动 VNC 服务器时的输出提示。如果提示像下面这样,表示 1 号 VNC 服务器实例已被占用,创建了 2 号 VNC 服务器实例:

    Warning: ubuntu:1 is taken because of /tmp/.X1-lock
    Remove this file if there is no X server ubuntu:1
    
    New 'X' desktop is ubuntu:2
    
    Starting applications specified in /home/user/.vnc/xstartup
    Log file is /home/user/.vnc/ubuntu:2.log
    

    由于 VNC 不具有加密功能,因此在公网上直接和 VNC 服务器通信并不安全。我们接下来将建立一个 SSH 隧道,通过隧道我们和 VNC 服务器连接。这种策略将为 VNC 增加一层额外的安全性,因为唯一能够访问它的用户是那些已经具有 SSH 访问权限的用户。

  5. 建立 SSH 隧道。在本机执行:

    ssh -CNf -L 5901:127.0.0.1:5901 USER@HOST  # 注意改端口号,端口号应为 5900 + 实例号
    
    • -L:本地转发
    • -C:启用压缩
    • -N:不执行任何远程命令
    • -f:将 SSH 连接放到后台
  6. 使用 VNC 客户端进行连接。

    如果你使用 macOS,可以使用系统自带的屏幕共享应用来连接:打开 Spotlight,搜索并打开 Sharing.app。之后新建一个连接,连接地址填写 vnc://localhost:5901(注意改端口号为实际端口号)

    image

    如果一切正常,你就能看到 Ubuntu 的远程桌面了。

    image

设置开机自启

  1. 创建 systemd 服务文件:

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

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

    将以下行添加到文件中。确保更改 UserGroupWorkingDirectory 的值,并将 PIDFILE 值中的用户名更改你的用户名:

    [Unit]
    Description=Start TightVNC server at startup
    After=syslog.target network.target
    
    [Service]
    Type=forking
    User=<USER>
    Group=<GROUP>
    WorkingDirectory=/home/<USER>
    
    PIDFile=/home/<USER>/.vnc/%H:%i.pid
    ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
    ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
    ExecStop=/usr/bin/vncserver -kill :%i
    
    [Install]
    WantedBy=multi-user.target
    
  2. 重启 systemd 守护进程

    sudo systemctl daemon-reload
    
  3. 启用服务文件

    sudo systemctl enable vncserver@1.service
    

    这里的 1 表示服务应该出现在哪个显示编号上,这里为 :1

    现在,每次启动系统时,都会自动启动一个编号为 :1 的 VNC 服务器实例。

  4. 建立 SSH 隧道

    在每次连接 VNC 服务之前,你都需要确保已经建立了 SSH 隧道:

    ssh -CNf -L 5901:127.0.0.1:5901 USER@HOST
    

参考:How to Install and Configure VNC on Ubuntu 22.04 | DigitalOcean

参见:Ubuntu 设置 RDP 远程桌面

个人认为 RDP 更好用一点

Troubleshooting

灰屏问题

image

  1. 检查 ~/.vnc/xstartup 配置文件的内容是否正确,以及文件是否有执行权限。

  2. 使用 ps -a 命令检查 gnome-session-b 进程是否在运行:

    $ ps -a | grep gnome-session-b
       9521 tty2     00:00:00 gnome-session-b
    

    发现 gnome-session-b 进程在运行,此时无法启动 Xfce 桌面环境。注意我们必须通过 SSH 远程连接到服务器上进行接下来的操作,不能在主机的桌面环境下操作。

    关闭 gnome-session-b:

    kill $(ps -a | grep gnome-session-b | awk '{print $1}')
    

    然后重启 VNC 服务器:

    vncserver -kill :2  # 记得替换为你实际的实例号
    vncserver
    

    此时再次尝试连接,应该就能看到桌面了。

提示 Font directory '/usr/share/fonts/X11/75dpi/' not found - ignoring

解决方法:

sudo apt install -y xfonts-75dpi xfonts-100dpi
posted @ 2024-04-11 00:47  Undefined443  阅读(1713)  评论(0)    收藏  举报