ubuntu 18.04 desktop不接显示器开启 vnc 服务

Ubuntu 下如果没有接入显示器,vnc 会无法正常工作,所以需要做一些额外的操作来处理。

配置 vino

Ubuntu使用vino来作为默认的vnc服务器,但是默认的设置需要进行一些修改,特别是require-encryption这个标志,macos自带的vnc客户的不支持它的加密方式。

gsettings set org.gnome.Vino require-encryption false
gsettings set org.gnome.Vino prompt-enabled false
gsettings set org.gnome.Vino authentication-methods "['vnc']"
gsettings set org.gnome.Vino lock-screen-on-disconnect false
gsettings set org.gnome.Vino vnc-password $(echo -n "mypassword"|base64)

需要注意的是,不要用sudo来运行上面的命令,否则不但在ssh客户的操作时会有警告,而且修改的也不是当前的配置。

自动启动 vino server

随用户登录后,自动启动 vino server。编辑一个 vino-server.desktop 文件,如果 autostart 目录不存在,就创建一个。

sudo vim ~/.config/autostart/vino-server.desktop

填入如下内容:

[Desktop Entry]
Type=Application
Name=Vino VNC server
Exec=/usr/lib/vino/vino-server
NoDisplay=true

vino-server 不能在 console 中运行,所以需要在用户登录到桌面后用这样的方式自动启动。

安装 video-dummy

sudo apt install xserver-xorg-video-dummy

配置 dummy 显示器

/etc/X11下创建 xorg.conf 文件,填写分辨率等信息

sudo vim /etc/X11/xorg.conf

填写如下内容:

Section "Monitor"
Identifier "Monitor0"
HorizSync 28.0-80.0
VertRefresh 48.0-75.0
# 1024x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 64.11 MHz
# Modeline "1024x768_60.00" 64.11 1024 1080 1184 1344 768 769 772 795 -HSync +Vsync
# 1280x720 @ 60.00 Hz (GTF) hsync: 44.76 kHz; pclk: 74.48 MHz
# Modeline "1280x720_60.00" 74.48 1280 1336 1472 1664 720 721 724 746 -HSync +Vsync
# 1368x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 85.86 MHz
# Modeline "1368x768_60.00" 85.86 1368 1440 1584 1800 768 769 772 795 -HSync +Vsync
# 1600x900 @ 60.00 Hz (GTF) hsync: 55.92 kHz; pclk: 119.00 MHz
# Modeline "1600x900_60.00" 119.00 1600 1696 1864 2128 900 901 904 932 -HSync +Vsync
# 1920x1080 @ 60.00 Hz (GTF) hsync: 67.08 kHz; pclk: 172.80 MHz
Modeline "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
EndSection

Section "Device"
Identifier "Card0"
Option "NoDDC" "true"
Option "IgnoreEDID" "true"
Driver "dummy"
EndSection

Section "Screen"
DefaultDepth 16
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Depth 16
Modes "1920x1080"
EndSubSection
EndSection

配置用户自动登录桌面

查看当前用的是什么管理器:

cat /etc/X11/default-display-manager

我的是/usr/sbin/gdm3,那么编辑文件:

sudo vim /etc/gdm3/custom.conf

把下面三行的注释去掉,其中AutomaticLogin行修改成自己的用户名。

WaylandEnable=false
AutomaticLoginEnable = true
AutomaticLogin = username

重启电脑,就可以登录了。

重启桌面

我通过 macos 的 Screen Sharing.app 用 vnc 协议来连接,查看 Ubuntu 的 Settings 的时候每次都会 crash,据说是 nvidia 的驱动问题,但是我没有深究,有兴趣的可以研究。

crash 后,vino-server 就退出了,要再次启动的话,需要重启桌面管理。Ubuntu 18.04下,只需要运行:

sudo systemctl restart display-manager

问题

这样配置后,如果再次接上显示器后,显示器会黑屏,这时候,需要把/etc/X11/xorg.conf删除或者改名,比如改成/etc/X11/xorg.conf.dummy,然后重启显示管理器:

sudo systemctl restart display-manager

即可。