Linux下VNC远程控制与同步教学

Linux下VNC远程控制与同步教学
VNC (Virtual Network Computing),要使用VNC就必须安装vnc软件包,在redhat6中客户端的包是tigervnc,服务端的包是tigervnc-server,在安装好vnc服务端的包之后,系统中会多一个vncserver和vncpasswd命令,一个是用来开启vnc服务,一个是用来给vnc设置密码的,在安装vnc客户端的包之后,系统中会多一个vncviewer命令,这个是用来连接服务端的。 一、远程控制服务端:192.168.0.4        在开启vnc服务时,我们需要给vnc设置一个密码,可以使用vncpasswd来设置,若没有设置密码,在我们第一次使用vncserver时,系统会提示设置一个密码,输入两次密码后,系统会提示生成了一个会话:desktop4.example.com:1

1就表示当前的第一个会话,desktop4.example.com是当前服务端的主机名,而刚刚设置的密码则保存在当前用户root的家目录下:/root/.vnc/passwd中,现在客户端就可以连接服务端了,这时在客户端上使用vncviewer 192.168.0.4:1来连接服务端,连接成功后,会出现一个提示框,提示输入密码:

输入密码正确,就会弹出一个显示服务端桌面的对话框,这个时候就可以在对话框上对服务端操作,和在服务端本机上操作是一样的,但是服务端当前的桌面并没有被控制,两者互不冲突,各自不受影响,这时当另外一个客户端也使用vncviewer 192.168.0.4:1来连接服务端时,第一个客户端就会马上被踢掉,这是因为一个会话只能被一个客户端连接。        若要两个客户端同时连接,就必须创建两个会话,在服务端再执行一次vncserver时,会提示生成一个新的会话叫desktop4.example.com:2

这时被踢掉的客户端使用vncviewer 192.168.0.4:2 来连接服务端就可以了,连接会话1的客户端也不会被踢掉。两个客户端的操作也互不影响。以此类推,要让多个客户端来连接服务端,多创建几个会话就可以了。若服务端要关闭其中一个会话,则使用命令vncserver -kill 后面接会话名称就可以了。
 如:关闭会话1:vncserver -kill desktop4.example.com:1 连接会话1的客户端会马上断开。也可以使用kill 命令加指定会话进程的PID来关闭指定会话。 二、远程同步控制与教学1、远程同步控制        给vnc设置密码,使用vncpasswd命令,输入两次相同密码,即设置成功。密码保存在当前用户家目录下的.vnc/passwd文件中,root用户保存在/root/.vnc/passwd中。        当我们使用vncserver命令开启vnc服务的时候,创建的会话每次只能连接一个客户端,且客户端连接后再进行那些操作,我们看不到。这个时候就要使用到另外一个命令:x0vncserver,这个命令产生的会话监听在5900端口。
 当我们执行x0vncserver命令时,系统提示Listening on port 5900,表示监听在5900端口,并且这个命令并没有结束,下面没有命令提示符,当客户端来连接时,马上就会有信息提示,假设客户端ip地址为192.168.0.23,当他连接服务端时,服务端会提示192.168.0.23使用一个大于1024的随机端口来连接。

连接成功时,客户端就会显示对话框提示输入密码。由于这里并没有指定密码或密码文件,所以是连接不成功的。
 通过x0vncserver --help我们可以得到很多选项:        要想客户端能连接成功,至少要指定密码,帮助中有一个选项叫PasswordFile,而密码是保存在当前用户家目录下的,使用这个选项PasswordFile=/root/.vnc/passwd 就可以指定密码了,x0vncserver PasswordFile=/root/.vnc/passwd,

这时客户端使用vncviewer 192.168.0.4来连接,就不用指定第几个会话来,因为这个是0会话,输入正确的密码就可以连接成功了,并且看到的画面就是服务端当前的画面,服务端的所有操作,客户端都可以同步看到,并且客户端也可以在画面上进行操作,同样服务端也可以同步看到客户端的所有操作,这样就实现了客户端对服务端的远程远程同步控制,就好比是QQ上的远程协助。        这样同样有一个问题,就是当第二个客户端使用vncviewer 192.168.0.4来连接时,第一个客户端还是会被踢掉,这时就要用到另一个选项了,AlwaysShared,总是共享传入的连接,这个功能默认是关闭的,在之前的命令后面加上AlwaysShared=1,即x0vncserver PasswordFile=/root/.vnc/passwd AlwaysShared=1,1表示开,0表示关,现在就可以允许多个客户端同时来连接了。        由于redhat的虚拟机默认占用的也是5900端口,所以如果是先开启的虚拟机,再去开VNC会失败,提示端口已经被使用

我们可以使用rfbport选项来指定端口,如rfbport=5908,

这时就提示监听在5908端口了,客户端连接时就要指定端口了,vncviewer 192.168.0.4:5908,所以一般是先启动VNC服务,再开虚拟机,因为虚拟机可以自己切换监听端口。 2、远程教学        由于x0vncserver开启的是0会话,可以同时允许多人连接,并且可以同步看到服务端的桌面,所以这个功能可以用来同步教学,同学们看自己的电脑桌面就可以了,而不用去看那模糊的投影仪了。        同样有一个问题,由于客户端连接成功后,是可以对服务端进行操作的,要是下面的同学,动动鼠标,动动键盘,那么老师桌面就会受到影响,这时候就要用到另外两个选项了,AcceptPointerEvents和AcceptKeyEvents,一个表示接受指针事件,一个表示接受按键事件,就是用来控制鼠标和键盘的,默认都是开,所以把他们关掉就可以了。老师的计算机只要敲一条命令:x0vncserver PasswordFile=/root/.vnc/passwd AlwaysShared=1 AcceptPointerEvents=0 AcceptKeyEvents=0即可。        如果要断开会话,直接在vnc会话终端上按Ctrl+C键就可以结束所有会话。 注:vnc客户端连接服务端,不一定要使用和服务端相同的帐号,普通帐号也可以连接服务端root账户开启的会话,如果是用root账户登录的,然后又使用su - user1切换到user1,这样是无法连接的,系统会提示无法打开显示,这个时候可以注销root用户,用user1用户重新登录即可连接

也可以退出到root用户,先执行一个xhost + 命令,系统会提示关闭访问控制,客户端可以连接任何主机,这时再切换到user1用户来连接就可以了。 

推荐阅读