VNC安装与使用

安装

# arch
sudo pacman -S tightvncserver
# Debain
sudo apt install -y tightvncserver

使用

首次运行需要设置一个密码,同时会提示是否设置一个仅可查看的密码。

vncserver

安装剪切板共享

apt install autocutsel

在启动脚本中添加 autocutsel -f 启动剪切板工具

cp .vnc/xstartup .vnc/xstartup.bak
vim .vnc/xstartup

如下,要在 Xsession 会话前,Xsession 的会话是要一直常驻的,只能在最后,在其后的命令只有会话结束才执行。

注意

注意使用 autocutsel 时,要注意是否和你的客户端兼容,我这就遇到和 TurboVNC 客户端不兼容,导致没法连接,MobaXterm 中的客户端就是 TurboVNC 所以 MobaXterm 中就没法连接。

#!/bin/sh

xrdb "$HOME/.Xresources"
xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
autocutsel -f
/etc/X11/Xsession

重启 VNC 服务器

vncserver -kill :1
vncserver :1

这里的 :1 表示 VNC 服务器监听的显示端口,默认情况下,VNC 使用 Display number 来指定端口。第一个 VNC 服务器通常使用 Display :1,对应的端口是 5901(即 5900 + Display number

如果需要从外部网络连接到 VNC 服务器,可能还需要在防火墙上打开 VNC 端口(通常是 TCP 端口 5901)

需要自定义监听端口时,可使用 -rfbport 选项启动 tightvncserver 、vncserver 并指定您希望使用的端口号来实现

vncserver -rfbport 5566 :1
vncserver -rfbport 5666 :2

自动启动

创建一个脚本 start_vnc.sh ,内容如下

#!/bin/bash

# 检查 Xtightvnc 进程是否正在运行
if pgrep Xtightvnc > /dev/null
then
    # 如果 Xtightvnc 正在运行,则输出消息
    echo "Xtightvnc is running."
    if pgrep xfce4-session > /dev/null
    then
        # 如果 Xfce4 正在运行,则输出消息
        echo "Xfce4 is running."
    else
        # 如果 Xfce4 没有运行,这重启 VNC 服务
        echo "But Xfce4 is not running, Killing VNC server..."
        vncserver -kill :1
        echo "Starting VNC server..."
        vncserver -rfbport 5911 :1
    fi
else
    # 如果 Xtightvnc 没有运行,则启动 VNC 服务
    echo "Xtightvnc is not running. Starting VNC server..."
    vncserver -rfbport 5911 :1
fi

将脚本添加到 ~/.bashrc 中,这样用户登录后就能自动启动脚本,且指定了 vnc 服务监听的端口,同时由于是通过脚本方式启动的,这样就等同于是用子 shell 去运行的,当父 shell (登录并出发脚本的会话) 被终止时,其子 shell 也连带着被终止了,这样就能实现使用 ssh 加密隧道传输时 vnc 服务的即用即停。

加密传输

对 vnc 进行加密传输的方式很多,这里采用的是 ssh 隧道来实现

ssh隧道