背景:
1、两台Debian9.5系统的linux环境,一台部署vnc client, 一台部署
vnc server,然后通过client远程登录server获取桌面。
2、在vnc server端设置vnc服务开机自启动
3、如何在Debian11上使用vnc (新增)
操作:
一、配置VNC
1、在客户端计算机安装: xtightvncviewer
$ sudo apt-get update
$ sudo apt-get install xtightvncviewer
成功安装即可。
PS: debian的APT仓库里自带的xtightvncviewer工具界面比较简陋,只有一个输入IP地址和端口的文本框。可以网上下载 Vnc Viewer客户端deb包到本地安装使用,其提供的工具界面使用方便,还可以存储链接记录。
下载地址为:https://www.realvnc.com/en/connect/download/viewer/
2、在服务端计算机安装:x11vnc
$ sudo apt-get update
$ sudo apt-get install x11vnc
安装完成后,在应用搜索栏里搜索x11vnc可以找到对应程序,双击打开,第一个界面是设置端口号,默认是5900,直接点击ok到下一步。
然后第二个界面设置登录密码,注意此界面的Accept Connections需要勾选上。后面直接确认即可。
3、客户端远程登录服务端
在服务端终端直接输入:
$ x11vnc
即可打开vnc服务。
在客户端终端直接输入:
$ xtightvncviewer
即可打开客户端,然后在客户端窗口里输入对端的ip+port 后,会弹框再输入密码即可。
二、配置vnc服务开机自启动
1、在 /lib/systemd/system/目录下创建文件并修改权限
$ cd /lib/systemd/system/
$ sudo touch x11vnc.service
$ sudo chmod 644 x11vnc.service
2、编辑文件x11vnc.service,内容如下:
[Unit]
Description=x11vnc service
After=multi-user.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=debian //登录用户名
ExecStart=/usr/bin/x11vnc -display :1 -o /home/vnc.log
[Install]
WantedBy=multi-user.target
PS: VNC在启动时,默认获取 0号桌面的显示,如果计算机启动后的默认桌面是 1,那么需要在启动命令中添加 -display :1 参数。
并且在应用搜索栏里搜索x11vnc可以找到对应程序,双击打开,把端口号设置成5901, 否则自启动会失败。
可以通过 # echo $DISPLAY 查看自己当前的桌面编号。
还可以在启动命令中添加日志输出 -o /home/vnc.log, 这样方便定位启动失败的问题。
3、建立链接文件
$ cd /etc/systemd/system/
$ sudo ln -s /lib/systemd/system/x11vnc.service x11vnc.service
4、设置开机自启动
$ sudo systemctl enable x11vnc
重启计算机测试下设置是否成功,亲测有效~~
踩坑:
使用/etc/rc.local文件里执行vnc自启动不生效,不清楚为什么。从网上看把程序设置成一种 systemd服务也是一种自启动办法。
#############分割线###############
最近项目环境从Debian9.5升级到了Debian11后,发现在Debian11系统上按上面步骤部署x11vnc后,vnc服务无法启动。命令行启动报错如下:
通过网上搜索发现Debian10之后在启动GNOME时,默认使用Wayland显示服务,而不是之前的Xorg服务。但我们的vnc服务是基于Xorg服务的,所以有上面的报错信息,直接退出了。
但Wayland服务需要显卡驱动的支持,如果你安装的Debian11直接支持vnc,那大概率是你的显卡配置比较低,不支持wayland,所以系统启动了xorg服务。
但当前大多数的电脑都用英伟达的独显了,那么切到Debian11后会启动wayland服务,也就无法使用vnc服务。
规避方法:
默认使用xorg服务,关闭wayland显示服务
修改方法如下,修改后重启电脑即可,然后vnc也可以正常启动了:
学习资料:
https://wiki.debian.org/Wayland#GNOME_.28supported_since_3.20.2B-.29
#############分割线2023.1.5###############
最近发现服务器重启后,无法远程vnc连接到此服务器。检查日志发现服务器上的x11vnc服务启动失败。日志如下:
*** XOpenDisplay failed (:0)
*** x11vnc was unable to open the X DISPLAY: “:0”, it cannot continue.
*** There may be “Xlib:” error messages above with details about the failure.
Some tips and guidelines:
** An X server (the one you wish to view) must be running before x11vnc is
started: x11vnc does not start the X server. (however, see the -create
option if that is what you really want).
从最下面一行的提示看,是X server没有启动。网上资料看,是因为我的服务器没有接入显示器,导致服务器启动时X server服务没有启动。x11vnc在启动时发现X Server没有启动,所以启动失败了。
解决办法:服务器开机启动时,先启动X Server,然后再启动x11vnc服务。
如何操作见下面:
#############分割线2023.7.4###############
问题:在debian11使用之前的配置开机自启动的方式无法启动x11vnc服务
分析:无法启动的根因是x11vnc启动时依赖X server相关服务,即x11vnc启动前需要先启动GUI相关服务才行。之前配置的开机自启动方法是在X server相关服务器启动前去操作的,故导致x11vnc启动失败。
解决办法:在debian11系统登录后再去自启动x11vnc服务
1、在 /home/当前用户名/.config/autostart/ 目录新增文件 startX11Vnc.desktop文件,
如果本地无autostart文件夹,则手工创建
2、编辑startX11Vnc.desktop文件内容如下即可:
[Desktop Entry]
Type=Application
Exec=/usr/bin/x11vnc -forever -loop
Hidden=false
NoDisplay=true
OnlyShowIn=GNOME;Unity;
Name=startX11Vnc
此种自启动方法类似windows系统中用户登录后自动拉起桌面软件。