vnc簡介
VNC 由AT&T 的劍橋研究實驗室開發,可實現遠程圖像顯示和控制。
VNC可是指一種通信協議——Virtual Network Computing,也代指實現這種協議的工具——Virtual Network Console( 虛擬網絡控制台)。
VNC工具分為服務端和客戶端,服務端提供兩種服務方式:
- 物理會話:直接控制物理顯示器顯示的內容,所有連接上的用戶看到的是同一圖像。
- 虛擬會話:同時運行多個虛擬會話,各個會話圖像不同。
常見VNC實現
VNC作為一種通用協議,現有多種實現工具:
- TigerVNC
TightVNC的分支,取代原TightVNC,虛擬會話使用
Xvnc,物理會話使用x0vncserver。如今Linux發行版中最常用的VNC實現(一些發行版中安裝vncserver包即是安裝tigervnc)。tigervnc包含一個vnc客戶端vncviewer。
- TurboVNC
TightVNC的分支,特點是對圖形傳輸方面的優化。
- RealVNC
2002年劍橋研究室實驗室關閉,后來VNC的創始人創立的RealVNC公司開發的產品,客戶端可以通過該產品的服務器連接服務端,提供商用版本,以及有一定限制的免費版本。
- vino及vinagre
GNOME項目的子項目,vino為服務端,vinagre為客戶端(還支持SPICE、RDP、SSH等協議)
- x11vnc
僅為實現X11的服務端。
VNC服務端配置
以下以tightvnc系的tigervnc為主,tightvnc命令與之類似。
虛擬會話
-
啟動會話
最簡單方法是執行
vncserver,它是Xvnc的包裝腳本(Xvnc命令使用通x0vncserver)。用戶首次執行該命令,會提示創建適用於該用戶vnc會話的密碼。
vnc服務會會一次為開啟的虛擬會話編號,每個會話使用一個端口,編號默認從
:1開始,對應端口為5901,以此類推。vncserver #如果沒有會話,一般從:1開始 端口5901 vncserver :2 #指定會話為:2 端口5902
-
管理vnc會話
vncserver -list參數查看會話列表-
vncserver -kill <會話編號>參數終止某個會話vncserver -kill :1 #終止1號會話
vncpassword修改密碼
直接控制
TigerVNC使用x0vncserver,RealVNC有自己的實現,還可以使用x11vnc。
x0vncserver實現更為低效,較之更推薦x11vnc。
直接控制的VNC使用端口5900。
x0vncserver
#-display指定使用的物理顯示 並指定密碼文件(可由vncpasswd生成) x0vncserver -rfbauth ~/.vnc/passwd -display :0 x0vncserver -display :0 -passwordfile ~/.vnc/passwd #作用同上
x11vnc
啟動服務:
x11vnc -display :0 #沒有安全保證 將建立一個沒有密碼的VNC!!!
#設置一個密碼 但是在服務端執行ps查看進程可看到密碼 x11vnc -wait 50 -noxdamage -passwd PASSWORD -display :0 -forever -o /var/log/x11vnc.log -bg x11vnc -gui #可以啟動一個tk編寫的圖形界面前端
直接運行將建立一個沒有密碼的VNC,-passwd雖然能設置密碼,但仍能通過ps命令查詢進程獲取密碼信息。
-
加密
-
ssh轉發加密
-
使用
-localhost參數啟動服務,綁定vnc服務到localhost從而拒絕外部連接:x11vnc -localhost
-
客戶端使用ssh轉發,將服務端的5900端口到客戶端的5900端口,在客戶端執行:
ssh <x11vnc-server-host> 5900:localhsot:5900
而后客戶端連接自己的5900端口即可。
-
-
auth加密
x11vnc -display :0 -auth ~/.Xauthority #root用戶 #GDM 以下將打開gdm登錄界面(120是gdm的uid) x11vnc -display :0 -auth /var/lib/gdm/:0.Xauth #新版本gdm可使用: x11vnc -display :0 -auth /run/user/120/gdm/Xauthority #lightdm x11vnc -display :0 -auth /var/run/lightdm/root/\:0 #sddm 11vnc -display :0 -auth $(find /var/run/sddm/ -type f)
-
-
設置密碼
x11vnc -usepw #生成密碼文件~/.vnc/passwd
-
持續運行
默認情況下,x11vnc將接受第一個VNC會話,並在會話斷開時關閉。為了避免這種情況,可以使用-many或-forever參數啟動x11vnc:
x11vnc -many -display :0 #或 x11vnc --loop #這將在會話完成后重新啟動服務器
vncconfig
控制vnc的工具,在服務端執行vncconfig可以打開一個圖形窗口,可在其中勾選激活客戶端和服務端之間剪切版同步等功能。
vncserver配置示例
vncserver命令中可以設置顯示和操作相關參數,參數可以在vnc配置文件中配置,主要涉及~/.vnc下的config文件和xstartup文件(如果沒有單獨配置這兩個文件,將使用默認的配置)。
config文件中的配置可在vncserver命令參數中指定,xstartup中的配置只能寫在一個文件中,可使用vncserver的-xstartup參數指定文件。
~/.vnc/config文件配置根據名稱即可獲知其用途,示例如下:
# desktop=sandbox geometry=1920x1080 #分辨率 # localhost # alwaysshared dpi=96
~/.vnc/xstartup文件供啟動虛擬會話時使用,是一個shell文件,配置啟動會話時的相關環境,最重要的是配置啟動會話的桌面環境或窗口管理器,示例如下:
#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS export XKL_XMODMAP_DISABLE=1 #指定要使用什么桌面環境或窗口管理器 #session=startxfce #xfce #session=startlxde #lxde session=gnome-session #GNOME #session=mate-session #MATE #session=startdde #DDE(Deepin桌面) #session=startkde #KDE Plasma #session=i3 #i3wm # Copying clipboard content from the remote machine (need install autocutsel) #autocutsel -fork #exec $session exec dbus-launch $session
VNC客戶端使用
連接虛擬會話,使用服務端的地址+端口即可,例如:192.168.0.1:5901(或者使用會話編號如192.168.0.1::1。
連接物理會話,使用5900端口,一些客戶端不填寫端口時默認使用5900。
相關問題
-
黑屏
- VNC協議基於X,不支持wayland。
- 沒有在xstartup中執行
-
dbus沖突
Could not make bus activated clients aware of XDG_CURRENT_DESKTOP=GNOME environment variable: Could not connect: Connection refused
例如安裝了anaconda,它的bin目錄中的dbus-daemon會與系統自帶的dbus-daemon沖突。
解決方法:
- 不使用ananconda
- 不要自動激活ananconda或者將其加入登錄后自動加載的環境變量,使用時手動加載。
-
提升系統原有dbus-daemon優先級
復制
/usr/bin/dbus-daemon到其他目錄,在ananconda的export后面添加這個目錄的PATH。例如:cp $(which dbus-daemon) /usr/local/bin #anaconda.sh是寫有ananconda環境變量配置的文件 echo "export PATH=/usr/local/bin:$PATH" >> /path/to/anaconda.sh
轉自:https://segmentfault.com/a/1190000022707961
