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用戶來連接就可以了。