在服务器安装了x11vnc服务,无论是使用systemd服务开机自启动还是使用“启动应用程序”功能,都必需得登陆ubuntu桌面环境,这会给服务安全带来隐患,下面是终极解决方案。
- 使用systemd服务配合lightdm实现不登陆启动
由于ubuntu默认使用gdm3管理用户登陆,只有用户登陆后系统才会启动显示服务(X DISPLAY / X server),而x11vnc必需运行X server服务后才能被运行成功,所以用户没有登陆桌面系统时x11vnc启动都会报以下类似错误“*** x11vnc was unable to open the X DISPLAY: ":0", it cannot continue.”。所以使用gdm3不登陆执行x11服务比较困难,建议使用lightdm进行登陆管理。步骤如下:
apt install lightdm
##安装lightdm并根据弹出提示选择使用lightdm
vi /lib/systemd/system/x11vnc.service
##创建x11vnc服务配置文件添加以下内容
[Unit]
Description=x11vnc service
After=display-manager.service network.target syslog.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -display :0 -auth '/run/lightdm/root/:0' -forever -rfbauth /home/<your username>/.vnc/passwd -rfbport 5901 -shared -capslock -repeat -nomodtweak -noxdamage
ExecStop=/usr/bin/killall x11vnc
Restart=on-failure
[Install]
WantedBy=multi-user.target
##设置x11vnc开机自启
systemctl enable x11vnc
重启系统后可以使用vnc客户端连接了。
要点提示:安装lightdm后可以看到多了个/run/lightdm/root/:0文件,这应该是提供显示服务的,而gdm3只有用户登陆后才会生成/run/user/1000/gdm/Xauthority文件提供显示服务,所以没登陆也就无法提供显示服务了。
虽然使用lightdm可能实现不登陆自启动x11vnc,但由于lightdm本身是轻量极的,功能没有gdm3强大,如:gnome shell扩展似乎是不能用的,这给系统使用带来不小影响。想要使用ubuntu原生自带的gdm3,继续往下看。
- 利用虚拟显示器屏蔽服务器显示
想用gdm3又担心服务器自动登陆后的安全问题,可以考虑使用创建虚拟显示器关闭服务器主显示器,这样服务器开机后主机显示器是黑屏,只能通过vnc远程连接操作,提高了服务器安全性。但必需为服务器配置sshd访问,以防vnc服务异常造成无法操作服务器的绝望。
首先,登陆桌面环境,在“启动应用程序”中添加x11vnc服务运行命令,并在用户设置中设置为自动登陆。
##安装虚拟显示服务
apt install xserver-xorg-video-dummy
##配置虚拟显示器
vi /usr/share/X11/xorg.conf.d/xorg.conf
##(也可以替换/etc/X11/xorg.conf这个文件,替换前请先备份该文件。)
##添加以下内容
Section "Monitor"
Identifier "Monitor1"
HorizSync 28.0-80.0
VertRefresh 48.0-75.0
Modeline "1360x768_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
EndSection
Section "Device"
Identifier "Card1"
Driver "dummy"
VideoRam 256000
EndSection
Section "Screen"
DefaultDepth 24
Identifier "Screen1"
Device "Card1"
Monitor "Monitor1"
SubSection "Display"
Depth 24
Modes "1360x768_60.00"
EndSubSection
EndSection
重启服务器后系统只能使用vnc客户端连接虚拟显示器操作服务器。
特别提醒:x11vnc暂时不支持wayland,请在登陆时选择"ubuntu Xorg".