当前位置: 首页 > Linux

VNC服务器配置

时间:2023-04-06 21:10:54 Linux

由于个人能力,内容可能有误。如有错误,欢迎指正。一般使用github推送修正>levinit-itnodes>vnc.mdvnc介绍VNC是由AT&T剑桥研究实验室开发的,可以实现远程图像显示和控制。VNC可以指代一种通信协议——虚拟网络计算,也可以指代实现该协议的工具——虚拟网络控制台(VirtualNetworkConsole)。VNC服务器的目的是共享运行它的机器的屏幕,服务器被动地让客户端控制它。VNC客户端(或Viewer)观察和控制服务器并与服务器进行交互。常见的VNC实现VNC是一种常见的协议,实现工具有很多:TightvncTigerVNC派生自TightVNC,Linux发行版中最常用的VNC实现(在某些发行版中安装vncserver包就是安装tigervnc)。tigervnc包含一个vnc客户端vncviewer。TurboVNC源自TightVNC,其特点是图形传输的优化。可以配合VirtualGL使用,调用服务端显卡进行渲染。RemoteVNC源自TightVNC,增加了自动NAT和防火墙穿越功能。RealVNC于2002年在剑桥关闭。后来,VNC的创始人创立了RealVNC,这是RealVNC开发的产品。客户端可以通过产品的服务器端连接到服务器端,提供商业版和有一定限制的免费版。有一个著名的vnc客户端vnc查看器。vino和vinagre是GNOME项目的子项目,vino是服务端,vinagre是客户端(同时支持SPICE、RDP、SSH等协议)。GNOME3.8.0之后,vino被从GNOME包组中移除,远程控制服务器功能集成在GNOME设置中心的远程控制(remoteaccess)中。x11vnc仅实现显示真实的X显示器(即对应于物理显示器、键盘和鼠标的显示器)。VNC服务器配置基于tightvnc系统的tigervnc,tightvnc命令与其类似。redhat/centosinstalltigervnc-servertigervnc-server-modulevnc客户端和服务器之间的连接称为会话。vnc会话根据显示内容分为虚拟会话和物理会话(非正式名称,本文为方便描述而定制)虚拟会话vnc启动的多个虚拟会话,会话从端口:1开始(vnc默认session1对应端口5901,后续session端口依次类推),每个session同时并行运行,互不干扰。Java的vnc会监听58xx端口,可以通过浏览器访问,比如使用turbovnc。启动会话最简单的方法是执行vncserver,它是Xvnc的包装脚本(Xvnc命令的使用类似于x0vncserver)。当用户第一次执行该命令时,系统会提示用户创建一个适合该用户的vnc会话的密码。vncserver#如果没有session,一般从:1port5901vncserver:2#指定session为:2port5902vncserver:1-rfbport8081#-rfbport指定管理vnc会话的端口vncserver-list参数查看sessionlistvncserver-kill终止某个session的参数vncserver-kill:1#终止1号sessionvncpassword更改密码相关增强s在xstartup中启动autocutsel,实现server和client之间的剪贴板互通。turbovnc+virtualGL使用服务器端3D图形加速器VNC等Unix和Linux的瘦客户端环境不支持运行OpenGL应用程序或强制渲染OpenGL应用程序。传统上,3D应用程序的硬件加速远程显示需要使用“间接渲染”。间接渲染使用X窗口系统的GSK扩展(“X11”或“X”)将OpenGL命令封装在X11协议流中,并将它们从应用程序发送到X显示器。所有间接渲染的OpenGL命令都是由vnc客户端计算机执行的,所以对于3D程序,要求客户端必须有快速的3D图形加速器;一些OpenGL扩展不能在间接渲染环境中工作,而一些扩展需要直接访问3D图形硬件的能力。VirtualGL可以作为代理在服务器端使用服务器的OpenGL进行渲染,使用远程服务器的图形硬件进行渲染,并将渲染后的输出交互显示给客户端。以配置nvidiaheadlessserver的turbovnc+virtualGL为例:配置server的nvidia驱动,见virtualGLheadless-nvresolution=1920x1200busid=$(busid=$(nvidia-xconfig--query-gpu-info|grepBusID|grep-Eo"[0-9]+[0-9:]+$"|head-n1))nvidia-xconfig-a--allow-empty-initial-configuration--use-display-device=None\--virtual=1920x1200--busid$busidsed-i-E'/Section"Screen"/aOption"HardDPMS""false"'/etc/X11/xorg.confrestartXserver:systemctlisolatemulti-user#init3systemctlisolategraphical#init5#也可以重启dm来达到这个目的,如:#systemctlrestartgdminstallvirtualGL、turbovnc及其依赖turbojpegyuminstall-y使用TurboVNC启动vnc/opt/TurboVNC/bin/vncserver-vgl直接转发物理屏幕,直接转发服务器本地物理屏幕(物理显示器上显示的屏幕),运行在端口:0(vnc一般监听5900端口)。TigerVNC使用x0vncserver,RealVNC有自己的实现,x11vnc也可以。x0vncserver的实现效率比较低,推荐使用x11vnc。x0vncserver#-display指定使用的物理显示器并指定密码文件(可以通过vncpasswd生成)x0vncserver-rfbauth~/.vnc/passwd-display:0x0vncserver-display:0-passwordfile~/.vnc/passwd#效果是同上注意:x0vncserver不支持剪贴板共享,即使有autocutsel。x11vncstartservice:x11vnc-display:0#Nosecurityguaranteewillcreateavncwithoutpassword!!!#设置密码但在服务器端执行ps查看进程查看密码x11vnc-wait50-noxdamage-passwdPASSWORD-display:0-forever-o/var/log/x11vnc.log-bgx11vnc-gui#可以启动一个用tk写的图形界面,直接运行就可以创建VNC,不需要密码。虽然-passwd可以设置密码,但是你仍然可以通过ps命令向进程查询密码信息。Encryptedssh转发加密使用-localhost参数启动服务,绑定vnc服务到localhost拒绝外部连接:x11vnc-localhost使用ssh转发,将服务端5900端口转发到客户端5900端口,在客户端执行:ssh5900:localhsot:5900然后客户端可以连接到自己的5900端口。authencryptionx11vnc-display:0-auth~/.Xauthority#rootuser#GDM下面会打开gdm登录界面(120是gdm的uid)x11vnc-display:0-auth/var/lib/gdm/:0.Xauth#新版gdm可以使用:x11vnc-display:0-auth/run/user/120/gdm/Xauthority#lightdmx11vnc-display:0-auth/var/run/lightdm/root/\:0#sddm11vnc-display:0-auth$(find/var/run/sddm/-typef)设置密码x11vnc-usepw#Generatepasswordfile~/.vnc/passwdkeepsrunning默认情况下,x11vnc将接受第一个VNC会话并在会话关闭时断开连接。为避免这种情况,您可以使用-many或-forever参数启动x11vnc:x11vnc-many-display:0#或x11vnc--loop#这将在会话完成后重启服务器vnc配置文件如果默认连接vncserver后满足需求,无需更改相关配置文件。用户的vnc配置文件在~/.vnc目录下,主要是config和xstarup。(也有配置文件是~/.vnc/vncserver-config-defaults)一般第一次执行vncserver相关命令都会创建~/.vnc目录,并生成这两个文件。config文件中的配置可以在vncserver命令参数中指定,xstartup中的配置只能写在一个文件中,可以通过vncserver的-xstartup参数指定。config文件~/.vnc/config文件配置根据名字就可以知道其用途,例子如下:#desktop=sandboxgeometry=1920x1080#resolution#localhost#只监听本地端口#alwaysshareddpi=96这个文件中的参数也可以在Xvnc中直接用vncserver指定,如:vncserver-dpi96-geometry=1600x960xstarupfile大多数发行版的默认配置文件都可以直接使用,如无特殊需要无需更改。启动虚拟会话时使用~/.vnc/xstartup文件。它是一个shell文件,用于在启动会话时配置相关环境。最重要的是配置桌面环境或窗口管理器以启动会话。示例如下:#!/bin/shunsetSESSION_MANAGERunsetDBUS_SESSION_BUS_ADDRESSexportXKL_XMODMAP_DISABLE=1#vncconfigtoolshowatthetop-leftinvncwindow打开后,连接vnc,会在左上角命令看到一个配置窗口——vvncconfig&&vncconfig-iconic调用并执行/etc/X11/xinit/xinitrc文件#[[-r/etc/X11/xinit/xinitrc]]&&source/etc/X11/xinit/xinitrc#/etc/X11/xinit/xinitrc文件包含Executeexec行,如果执行成功,下面的内容将不会被执行HOME/.Xresources#指定使用什么桌面环境或窗口管理器#session=startxfce4#xfce#session=startlxde#lxdesession=gnome-session#GNOME#session='gnome-session--session=gnome-classic'#session=mate-session#MATE#session=startdde#DDE(DeepinDesktop)#session=startkde#KDEPlasma#session=i3#i3wm#从远程机器复制剪贴板内容(需要安装autocutsel)command-vautocutsel&&autocutsel-fork#exec$sessionexec"$session"#exec/usr/bin/dbus-daemon"$session"vncserver-kill$DISPLAYvnc安全在网上打开vnc比较不安全,需要考虑明文密码和关系客户端和服务器之间未加密通信的问题可以使用ssh隧道加密vnc通信提高安全性。如果在vnc的配置文件中启用了localhost选项(默认注释),则其vnc会话仅在localhost上侦听。您还可以在启用vncserver时使用-localhost参数。如果vncserver命令不支持-localhost参数,应该使用Xvncvncserver-localhost:1#或者Xvnc-localhost:1来使用ssh端口转发(即ssh隧道)加密这里的vnc会话端口Example使用本地转发转发vnc会话的5901端口到5601端口ssh-fCNL*:5601:localhost:5901@localhost访问ssh转发的端口以上面为例,应该访问vnc服务器的5601端口。VNC客户端使用虚拟会话连接,使用服务器地址+端口即可,例如:192.168.0.1:5901(或者使用会话号如192.168.0.1::1。连接到物理会话,使用端口5900,部分客户端不填写默认端口为5900相关问题查看X日志和vnc日志Warning:*istakedbecauseof/tmp/.X1-lock之前的session临时文件依然存在,删除/tmp/.X1-lock.如果还是提示/tmp/.X11-unix/X1,继续删除/tmp/.X11-unix/X1文件,重新测试黑屏或黑色桌面背景常见问题:VNC协议基于X,不支持wayland关于wayland和vnc等远程控制协议参考wayland常见问题X服务启动不正常,xstartup脚本问题(如应用程序/桌面/窗口管理器未正确执行等).),检查~/.vnc下的xstartup文件或-xstartup指定的文件进行故障排除xstartup脚本未安装.xorg相关包中执行的图形程序/窗口管理器/桌面(xorg-X11-xinit,xorg-x11-xauth等)丢失。连接虚拟机中的vnc黑屏,尝试在虚拟软件的设置中调整图形相关项。dbusconflictCouldnotmakebusactivatedclientsxofXDG_CURRENT_DESKTOP=GNOMEenvironmentvariable:Couldnotconnect:Connectionrefused安装了Anaconda,其目录中包含一些与系统中现有程序版本不一致的程序,如dbus-daemon,如果用户为anaconda导出的环境变量优先级高,vncserver会调用ananconda中的dbus-daemon。解决办法是防止anaconda的dbus-daemon被vncserver调用:conda环境默认没有激活。需要时调用anaconda安装anaconda时,会在.bashrc或.zshrc(或其他shell用户配置文件)中添加激活基础环境。命令,执行condaconfig--setauto_activate_basefalse禁止自动激活基础环境,或者在conda配置文件.condarc中添加:auto_activate_base:false或者删除anaconda安装时自动添加的内容,但是为了方便,可以保留或者手动添加conda环境加载的内容,方便调用conda命令,例如:“/opt/anaconda3/etc/profile.d/conda.sh”,降低ananconda环境变量的优先级anaconda的base环境需要默认开启,可以重新配置anaconda的环境变量,保证系统默认环境改变后ananconda的环境变量被放置,防止vncserver调用anaconda中的程序:exportPATH=$PATH:/path/to/conda/bin或对于dbus-deamon,例如:cp/usr/bin/dbus-daemon/usr/local/bin/exportPATH=/usr/local/bin:$PATH或增加xstartup文件中PATH中/usr/bin/的优先级:exportPATH=/usr/bin:$PATH