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 隧道来实现