麒麟操作系统(ARM)【VNC远程连接】配置手册


由信创开放社区提供 适用架构ARM 2024-11-08 171

1  VNC远程桌面

VNC(Virtual Network Computing)是虚拟网络计算机的缩写。VNC是一款优秀的远程控制工具软件,基于UNIX和Linux操作系统的免费的开源软件,远程控制能力强大,高效实用。

1.1  VNC工作原理

VNC系统由客户端,服务端和RFB协议组成。VNC的服务端目的是分享其所运行机器的屏幕,服务端被动的允许客户端控制它。VNC客户端观察控制服务端,与服务端交互。VNC协议(RFB)是一个简单的协议,传送服务端的原始图像到客户端,客户端传送事件消息到服务端。

服务器发送小方块的帧缓存给客户端,在最简单的情况,VNC协议使用大量的带宽,因此各种各样的方法被发明出来减少通讯的开支,举例来说,有各种各样的编码方法来决定最有效率的方法来传送这些点阵方块。

协议允许客户端和服务端去协商使用哪种编码,被大多数客户端和服务端支持的,最简单的编码就是从左到右的像素扫描数据的原始编码,当原始编码的满屏被发送后,只发送变化的方块区域。这种编码在帧间只有小部分屏幕变化的情况下工作的非常好(如鼠标在桌面移动或光标处输入文字等情况),不过如果大量的像素同时变化会导致带宽非常高(如拖动一个窗口或观看全屏录像)。

综上所述,我们来总结一下VNC的工作流程:

1)服务器端启动VNC server;

2)VNC客户端启动VNC viewer连接到VNC server;

3)VNC server将对话窗口发送至客户端,要求客户端输入连接密码;

4)VNC viewer输入VNC server的连接密码后,将密码发送至VNC server;

5)VNC server端通过密码验证后,则通过X Protocol将X server画面的显示控制权交由VNC server;

6)VNC server将X server桌面环境利用VNC通信协议发送至客户端;

7)VNC客户端获取VNC server端的桌面环境、输入控制及显示控制权; VNC默认使用TCP端口5900至5906。

图 1 vncserver工作原理

1.2  VNC相关命令使用示例

麒麟操作系统服务器版本支持vnc4server和tightvncserver。

vnc4server包括以下三个命令:vncserver,vncpasswd,vncconnect。大多数情况下只需要两个命令:vncserver和vncviewer(客户端)。

tightvncserver包括以下三个命令tightvncserver,tightvncpasswd,tightvncconnect。大多数情况下只需要两个命令:tightvncserver和xtightvncviewer(客户端)。

两种vnc使用方法基本差不多,下面以vnc4server为例介绍。

1.2.1  命令的用法

1)vncserver启动语法格式:

vncserver [:display#] [-name desktop-name] [-geometry widthxheight]  [-depth depth ] [-pixelformat format] [Xvnc-options.....]

vncserver停止语法格式:

vncserver -kill :display#

vncserver运行时可以不添加参数,这种情况下就会默认选择第一个可用的显示编号,通常情况下为:1。当然也可以使用指定的显示编号,这种情况下如果此编号有效则会使用此显示编号,如果不存在,则会退出,如vncserver :10。

Vncserver的默认端口为5900,每个显示桌面的编号其实对应的就是端口号,比如显示编号为:1,那么对应的端口号即为5901,以此类推。

vncserver的配置文件为~/.vnc/xstartup,修改此配置文件可以改变vncserver的属性。需要强调一点,修改此文件不会影响之前已经存在的vncserver桌面。此外vnc密码文件以及启动的所有显示桌面相关日志及.pid文件都在~/.vnc/下,“$HOME/.vnc/host:display#.pid”和“$HOME/.vnc/host:display#.log”分别是启动的显示桌面对应的pid文件和日志文件,如kylin:1.pid及kylin:1.log。“$HOME/.vnc/passwd”即为vnc密码文件。

vncserver常用选项:

                                                   表7 vncserver常用选项

参数

说明

-name desktop-name

每个显示桌面都有一个名字。默认情况下为“host:display#(username)”,如kylin-PC:1 (kylin)。

-geometry widthxheight

指定桌面的大小,默认为1024x768,可以通过此选项设置窗口大小,如vncserver -geometry 1360x768。

-depth depth

指定像素显示桌面的像素深度,默认情况下为16。还可以设置其他值,比如8,15和24。

-pixelformat rgbNNN|bgrNNN

设置像素表示的颜色格式,客户端可以转换为任何像素格式,但如果服务器的深度和像素格式与客户端的相同,则会提供速度。

-kill :display#

指定要停止display#这个编号的vnc桌面。如vncserver -kill :1,即停止编号为1的vnc显示桌面。

2)vncviewer命令

vncviewer是VNC的X视图的一个客户端。用来连接到远程服务器并显示其桌面。使用vncviewer需要提前获取到vncserver的密码。

vncviewer的命令格式:

vncviewer [options] [host][:display]

vncviewer [options] [host][::port]

vncviewer [options] -listen [display]

vncviewer -help

vncviewer常用选项:

                                               表8 vncviewer常用选项

参数

说明

-help

在终端打印使用方法。

-listen [display#]

表示监听来自服务器的反向连接,默认监听5500端口,也可使用端口参数,如vncviewer -listen 3则表示监听5503端。WinVNC使用“添加新客户端”菜单选项支持反向连接。

-viewonly

禁用客户端鼠标和键盘事件传送到服务器的功能,默认关闭。

-passwd passwd-file

指定连接时的密码文件为passwd-file,也就是说如果将服务器端密码发送到客户端,使用此选项时,就可以不必输入密码,正确的密码文件则会直接连接,而错误密码文件则认证失败断开连接。

-encodings encoding-list

TightVNC支持几种不同的压缩方法来编码显示桌面的屏幕更新,此选项可以指定优先使用一组方法,如果有多个编码方法,可以使用空格分隔,且这一组编码方法必须使用引号括起来。默认可用的编码为“copyrect tight hextile  zlib  corre  rre raw”

-fullscreen

开启全屏显示模式。这个模式下有可能会造成输入焦点的错误处理或使窗口突然消失。解决输入焦点问题,可以参照grabKeyboard设置。默认关闭

 

-fullscreen -depth depth

服务器上支持多个像素深度,指定客户端显示桌面的像素深度为depth值

 

3)vncpasswd命令

vncpasswd是用来修改VNC密码的命令。对应的密码文件则为$HOME/.vnc/passwd。Vncserver第一次运行来启动VNC桌面的时候则会调用vncpasswd来设置VNC密码。指定的密码至少6个字符,最长为8个字符。需要注意的是存储的密码并未经过安全加密,也就是说任何有权限访问此文件的用户都可以轻易找到明文密码,所以vncpasswd需要设置适当的权限。

vncpasswd语法格式:vncpasswd [passwd-file]

运行vncpasswd时,不加参数passwd-file,则会默认修改$HOME/.vnc/passwd文件,而指定passwd-file则会更新此文件下的密码。当然如果在vncviewer连接时默认还是去匹配$HOME/.vnc/passwd的密码,要使用指定的密码文件需要使用-passwd参数。

1.2.2  服务端配置

1)安装vncserver包:sudo apt-get install vnc4server;

2)首次执行vncserver,会提示设置vnc登录密码;

 

kylin@kylin:~$ vnc4server

You will require a password to access your desktops.

Password:

Verify:

New 'kylin:1 (kylin)' desktop is kylin:1

Creating default startup script /home/kylin/.vnc/kylintartup

Starting applications specified in /home/kylin/.vnc/kylintartup

Log file is /home/kylin/.vnc/kylin:1.log

 

 

后面需要修改vnc密码时,使用vncpasswd命令。

kylin@kylin:~$ vncpasswd

Password:

Verify:

        3)等待客户端连接。

kylin@kylin:~/.vnc$ ls

passwd  kylin:1.log  kylin:1.pid  xstartup

       查看生成的.vnc目录下,可以看到当前打开的vnc端口:1。

另外,vncserver开启的端口,只有该用户使用vncserver -kill :1来杀死该端口,而其他用户即使是root也不行,当然使用root权限强制杀死该进程是可以的。

1.2.3  客户端连接

1)安装vncviewer包;

2)连接远程主机:在终端执行vncviewer IP:1。

root@kylin:~# vncviewer 192.168.81.23:1

VNC Viewer Free Edition 4.1.1 for X - built Apr 26 2016 07:32:56

Copyright (C) 2002-2005 RealVNC Ltd.

See http://www.realvnc.com for information on VNC.

Mon Sep 16 11:39:53 2019

 CConn:       connected to host 192.168.81.23 port 5901

 CConnection: Server supports RFB protocol version 3.8

 CConnection: Using RFB protocol version 3.8

Password:

Mon Sep 16 11:39:58 2019

 TXImage:     Using default colormap and visual, TrueColor, depth 24.

 CConn:       Using pixel format depth 6 (8bpp) rgb222

 CConn:       Using ZRLE encoding

 CConn:       Throughput 20000 kbit/s - changing to hextile encoding

 CConn:       Throughput 20000 kbit/s - changing to full colour

 CConn:       Using pixel format depth 24 (32bpp) little-endian rgb888

 CConn:       Using hextile encoding

连接如图 2,以上步骤中vncviewer IP:1中的IP为vnc服务器的IP地址。而:1则表示VNC Server生成的新桌面,如果有需要,我们也可以多开几个端口,在服务器端执行多次vncserver &,然后就会生成:2,:3,:4等等的端口。

图 2 vnc连接麒麟操作系统

1.2.4  Windows上的vnc连接

Windows上的vnc软件比较多,本文简单介绍一下vncviewer的使用。去vnc官网下载vncviewer并安装,然后打开软件,新建一个连接,输入麒麟操作系统的IP地址和端口号,在弹出的窗口填写密码,然后双击新建的连接,成功连接到麒麟操作系统。如图 5:

图 3 新建vnc连接

图 4 输入密码

图 5 Windows上vncviewer连接麒麟操作系统

1.2.5  vnc连接常见问题

1)连接灰屏,显示Could not acquire name on session bus

修改服务器端的配置文件$HOME/.vnc/xstartup文件,添加unset语句,然后关闭之前的端口,重启新的vncserver端口。

unset SESSION_MANAGER

unset DBUS_SESSION_BUS_ADDRESS

       2)连接失败,无信息

可能是防火墙没有关闭,或者是vncserver服务没有开启。

添加我为好友,拉您入交流群!

请使用微信扫一扫!