Linux现在正常启动到图形界面做到了开箱即用,但是对于VNC,却不是一个安装命令就能轻松使用的。最近用了用OpenSuse,发现它自带的VNC的使用体验还是很不错的,在配置阶段,只要勾选Remote Administration就行:这个Help里面有对Remote Administration的解释,重点是Session Manager,一般是要选择“With”的,这样多用户可以共享,参见后面部分:Remote Administration SettingsIf this feature is enabled, you can administer this machine remotely from another machine. Use a VNC client, such as krdc (connect to <hostname>:5901), or a Java-capable Web browser (connect to https://<hostname>:5801/).Without Session Management, only one user can be connected at a time to a session, and that session is terminated when the VNC client disconnects.With Session Management, multiple users can interact with a single session, and the session may persist even if noone is connected.
选择Next后,会对Display Manager进行配置:上面的配置以及配置后启动的服务是通过OpenSuse的Vnc Manger软件包:> rpm -ql vncmanager-1.0.2-150000.4.9.3.x86_64/etc/vnc/etc/vnc/vncmanager.conf/run/vncmanager/usr/bin/vncmanager/usr/lib/systemd/system/vncmanager.service/usr/lib/tmpfiles.d/vncmanager.conf/usr/sbin/rcvncmanager/usr/share/doc/packages/vncmanager/usr/share/doc/packages/vncmanager/LICENSE
会启动相应的vncmanager.service服务:~> systemctl | grep vnc vncmanager.service loaded active running VNC manager xvnc.target
vncmanger.service就是启动/usr/bin/vncmanager:> less vncmanager.service[Unit]Description=VNC managerAfter=network.targetBefore=xvnc.targetWants=xvnc.target[Service]User=vncExecStart=/usr/lib/vnc/with-vnc-key.sh /usr/bin/vncmanager[Install]WantedBy=multi-user.target
> psa | grep vnc134171 ? Ss 0:00 /usr/bin/vncmanager
Ss:可中断睡眠,会话组长,后台(大部分系统守护进程)
而/etc/vnc/vncmanager.conf可以猜到一些信息:port = 5901# Disable vnc manager functionality.# Uncomment this to disable session managing - every VNC connection will get its own new session which can not be shared.# Default: no## disable-manager = no# The value of geometry parameter given to Xvnc. Sets the initial resolution.# Default: 1024x768## geometry = 1024x768# Path to Xvnc executable# Default: /usr/bin/Xvnc## xvnc = /usr/bin/Xvnc
基本上缺省值就够用了,注意到所谓的"Path to Xvnc",意思是用户登录后缺省将启动/usr/bin/Xvnc。Vncmanager在VNC端口5901上面监听,所以由vncmanger来处理用户通过5901过来的连接:> sudo ss -tnlp sport = :5901[sudo] password for root:State Recv-Q Send-Q Local Address:Port Peer Address:Port ProcessLISTEN 0 32 0.0.0.0:5901 0.0.0.0:* users:(("vncmanager",pid=134171,fd=5))LISTEN 0 32 [::]:5901 [::]:* users:(("vncmanager",pid=134171,fd=6))
配置完成后,用户在连接VNC端口后,用户列表会显示出来,每个用户可以独立选择登录:进去后直接是完整的GNOME的桌面,不是乌漆嘛黑或者一个丑陋窗口的那种:如果3个用户同时登录了VNC,则可以看到系统启动了3个Xvnc进程:注意-d参数,manpage里面没有说明,可能是Display Number。经过查询,Xvnc来自于RPM包xorg-x11-Xvnc-1.12.0-150500.2.6.x86_64,它主要的文件包括:~> rpm -ql xorg-x11-Xvnc-1.12.0-150500.2.6.x86_64/etc/pam.d/tigervnc/etc/pam.d/vnc/etc/tigervnc/etc/tigervnc/vncserver-config-defaults/etc/tigervnc/vncserver-config-mandatory/etc/tigervnc/vncserver.users/etc/vnc/etc/vnc/tls.cert/etc/vnc/tls.key/usr/bin/Xvnc/usr/bin/vncconfig/usr/bin/vncpasswd/usr/bin/vncpasswd.arg/usr/bin/x0vncserver/usr/lib/firewalld/usr/lib/firewalld/services/usr/lib/firewalld/services/tigervnc-https.xml/usr/lib/firewalld/services/tigervnc.xml/usr/lib/systemd/system/vncserver@.service/usr/lib/systemd/system/xvnc.socket/usr/lib/systemd/system/xvnc.target/usr/lib/systemd/system/xvnc@.service/usr/lib/sysusers.d/vnc.conf/usr/lib/vnc/usr/lib/vnc/with-vnc-key.sh/usr/lib/vncserver/usr/lib/vncsession-start/usr/sbin/rcxvnc/usr/sbin/vncsession/usr/share/doc/packages/xorg-x11-Xvnc/usr/share/doc/packages/xorg-x11-Xvnc/HOWTO.md/usr/share/doc/packages/xorg-x11-Xvnc/README.rst/usr/share/doc/packages/xorg-x11-Xvnc/vnc.reg/usr/share/licenses/xorg-x11-Xvnc/usr/share/licenses/xorg-x11-Xvnc/LICENCE.TXT/usr/share/man/man1/Xvnc.1.gz/usr/share/man/man1/vncconfig.1.gz/usr/share/man/man1/vncpasswd.1.gz/usr/share/man/man1/x0vncserver.1.gz/usr/share/man/man8/vncserver.8.gz/usr/share/man/man8/vncsession.8.gz
从名称上面基本上可以知道它是“Tigervnc”,提供了systemd的脚本。~> systemctl | grep vnc vncmanager.service loaded active running VNC manager xvnc.target
这里的xvnc.target是空的,实际并没有发生作用:/usr/lib/systemd/system> less xvnc.target[Unit]Description=System VNC service
登录进去后,通过vncmanager-controller还可以共享该VNC界面。可以共享给特定用户(该用户登录的时候需要用自己的账号密码),也可以无密码的共享给任何用户:这个时候连接VNC端口的时候,用户可以选择“Existing Session”与当前分享的用户共享桌面:vncmanager-controller来自于另外一个包:> rpm -ql vncmanager-controller-1.0.1-3.3.1.x86_64/etc/xdg/autostart/etc/xdg/autostart/vncmanager-controller.desktop/usr/bin/vncmanager-controller/usr/share/doc/packages/vncmanager-controller/usr/share/doc/packages/vncmanager-controller/LICENSE
如果没有使用VNC Manager,则与其它发行版本一样,直接用独立的VNC server来使能VNC功能,这里OpenSuse的WiKi有一个介绍:// https://en.opensuse.org/VNCVNC in openSUSE is mostly based on the TigerVNC project.Server components of TigerVNC are in xorg-x11-Xvnc package:libvnc.so: VNC extension for X server.Xvnc: Headless X server with VNC extension built-in.vncserver: Script that simplifies starting Xvnc and a graphical session inside it.x0vncserver: X client application that shares screen of the X server in which it is running.There is also x11vnc package that contains x11vnc application. This application works on the same principle as the x0vncserver.
这个时候就可能涉及到一些繁琐的配置,需要自己设置。https://doc.opensuse.org/documentation/leap/reference/html/book-reference/cha-vnc.html#vnc-persistent-vncmanager-enable、