继续研究了VNC的使用,原来的博客:
https://blog.csdn.net/u012911347/article/details/81209222
能够实现Ubuntu的远程连接,但是需要外接显示器,这里主要任务就是如何在不外接显示器的情况下通过VNC连接到Ubuntu。
目前我用的是Ubuntu18.04,RealVNC6.4.1。由于树莓派用的是RealVNC工作良好,没外接显示器的情况下也能连接,我对RealVNC比较有好感。原来用过一些别的VNC都没有很好地工作,用RealVNC起码配置成功了一种工作模式,也就是前面博客记录的。树莓派上的RealVNC是预授权的,而且只是Home版权限,Service模式运行,就能实现无显示连接,所以我又去搞了下。
既然选了这个VNC,那就看文档:
https://www.realvnc.com/en/connect/docs/debian-install-remove.html
这里说:
这个截图没截完整,它说如果是服务模式,那么要禁用Wayland;如果是虚拟模式,那么要改环境。链接如下:
https://help.realvnc.com/hc/en-us/articles/360003474792?_ga=2.211863325.882477885.1557976466-1333241947.1556608434
这个说的是如果你遇到了灰屏情况,可能是内置Xvnc的问题,像是Ubuntu13.04+就有这种问题。接着说道:
从VNC6.2开始,他们推荐配置VNC为虚拟模式,以便和系统的Xorg server配合,而不是继续使用内置的老旧Xvnc。既然这么说了,我就用虚拟模式吧,其实上面博客我想实现的也是虚拟模式。如何设置呢,链接如下:
https://help.realvnc.com/hc/en-us/articles/360003474752
这里说,默认情况下,Linux在虚拟模式下用的是内置的老旧Xvnc,某些平台上,现代化的桌面环境就会加载失败,也就是表现为灰屏。现代化的应用和扩展程序,尤其是硬件加速有关的,也不会工作。从VNC6.2开始,我们就可以用Xorg server而不是Xvnc了。这样有很多应用能兼容,提供更好的用户体验,尤其是对小红帽来说。
但是呢,如果用Ubuntu,SUSE或者树莓派,还是得继续用Xvnc。这就意味着,不得不换桌面环境了,这也就是为什么,你搜索有关Ubuntu和vnc的博客,很多都是直接用xfce的,而不提原生Unity或者Ubuntu18.04新换的Gnome3。树莓派没问题是因为它虽然来自Debian,但是定制了自己的PIXEL桌面环境,该PIXEL来自lxde,能和Xvnc良好工作。这也就是为什么,我的树莓派好好的,但是想在Ubuntu上用RealVNC还要折腾的原因。
这就回到上一个链接继续开始换环境了,也就是这一节:
这里还是选择xfce吧,就是那个老鼠。命令如下:
sudo apt update
sudo apt install xfce4
然后看下有哪些桌面会话:
grep Exec= /usr/share/xsessions/*.desktop
我这里输出结果为:
/usr/share/xsessions/ubuntu-communitheme-snap.desktop:Exec=env GNOME_SHELL_SESSION_MODE=ubuntu-communitheme /snap/communitheme/current/session
/usr/share/xsessions/ubuntu-communitheme-snap.desktop:TryExec=/snap/communitheme/current/session
/usr/share/xsessions/ubuntu.desktop:Exec=env GNOME_SHELL_SESSION_MODE=ubuntu gnome-session --session=ubuntu
/usr/share/xsessions/ubuntu.desktop:TryExec=gnome-shell
/usr/share/xsessions/xfce.desktop:Exec=startxfce4
我这里选的是xfce,那么修改xstartup文件如下:
#!/bin/sh
DESKTOP_SESSION=xfce
export DESKTOP_SESSION
startxfce4
vncserver-virtual -kill $DISPLAY
这里我将该文件放在了/root/.vnc/目录下,且该文件有可执行权限。然后RENDER扩展会导致Xvnc和Xfce配合出错,所以需要禁用,创建一个/etc/vnc/config.custom文件,添加内容如下:
-extension RENDER
执行上面操作后,输入:
startxfce4
看到:
这个桌面环境就算安装好了。
为了保险起见,重启一下。然后登录的时候,可以选择Ubuntu会话还是xfce4。这里选xfce,那么进入后可以:
ps aux|grep xfce
得到:
/usr/lib/gdm3/gdm-x-session --run-script startxfce4
/bin/sh /etc/xdg/xfce4/xinitrc -- /etc/X11/xinit/xserverrc
等输出。结合前面的博客,设置了RealVNC虚拟模式开机自启动,那么你就可以直接输入ip连接了,比如我这个就是:
连接成功后:
注意此时服务器是带显示器的。
现在拔掉显示器,那么Ubuntu服务器就是headless模式了,完美运行:
wuser@hp:~$ ps aux|grep vnc
root 1339 0.0 0.0 36020 3688 ? Ss 18:23 0:00 /usr/bin/vncserver-x11-serviced -fg
root 1340 0.0 0.0 40384 5256 ? Ss 18:23 0:00 /usr/bin/vncserver-virtuald -fg
root 1346 0.3 0.0 146368 48996 ? S 18:23 0:01 /usr/bin/vncserver-x11-core -service
root 2993 0.1 0.0 87776 34308 ? S 18:24 0:00 /usr/bin/vncagent service 19
wuser 2996 0.0 0.0 208460 19876 ? S 18:24 0:00 /usr/bin/vncserverui service 20
wuser 3007 0.0 0.0 146352 17936 ? S 18:24 0:00 /usr/bin/vncserverui -statusicon 5
wuser 3667 0.0 0.0 21536 1004 pts/0 S+ 18:30 0:00 grep --color=auto vnc
这里多了几个vncserverui的东西呢。
看下端口:
wuser@hp:~$ sudo netstat -tupln
激活Internet连接 (仅服务器)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 2026/smbd
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 1346/vncserver-x11-
tcp 0 0 0.0.0.0:5999 0.0.0.0:* LISTEN 1340/vncserver-virt
看到vncserver用的是5900,那就很容易了,端口转发到一个有公网的服务器上:
功夫不负有心人,我终于可以随意连接我的Ubuntu服务器了。真的想要骄傲下,国内搜的各种帖子很少见到我这种需求的,Google的也很多不合适的,尝试了好多种办法,还是RealVNC的官方指导最给力。这种效果非常好,headless能省出显示器空间,别人也看不到你的操作。像是图像有关的任务,还是需要桌面环境更好开展工作。用Pycharm写python代码也很舒服,完美,十分,如图所示:
这里应该还不是虚拟模式,虚拟模式是可以多个用户连接到每人自己的桌面的。这种实际上虽然没有显示器,但是别人连接的话用的还是你这个桌面,就和普通电脑显示屏一样,仅仅有一个实例而不是多个。目前已经比较满意了,毕竟不是专业运维,机器也就我一个用。