1. 报错
1.1 错误背景
欲通过命令行,执行virt-manager名,来打开图像界面,执行命令报错。
1.1 错误提示
报错信息:
raise gtk_error
RuntimeError: could not open display
1.2 错误图示
2. 分析
根据报错提示,很明显能够定位为无法打开显示界面。
对于任何C/S模型出现问题,可以从以下三个层次定位问题:
- 服务端
- 传输过程
- 客户端
同时,因为打开的是图形界面,因此必须要求远端已经安装了图形库。这便是根据应用类型来更加细致地定位问题。
服务端指的是:
- 没有安装相关软件包
- 没有开启相关服务
传输过程指的是:
- ssh协议未开启X11转发功能
- 防火墙限制了转发
- 其他安全策略限制了转发
客户端指的是:
- xshell没有开启接受转发功能
- 本地没有显示图像的软件
3. 定位
定位问题,从客户端开始,直至服务端:
- 本地已经安装了xming显示x-server的软件,并且已经启动。因此不会是这个问题
- 执行命令的终端xshell,已经在属性中设置了每个连接都能够进行X11转移,配置【转发X12连接到X DISPLAY(D):localhost:0:0】
xshell开启X11转发,参见博客《xshell启动X11转发.md》
- 检查虚拟机console是否关闭防火墙。如果未关闭,执行service iptables stop关闭
- 执行getenforce检查console是否关闭selinux。如果未关闭,执行setenforce 0进行关闭
-
查看ssh是否开启X11转发功能。如果没有开启,修改配置开启。
SSH开启X11转发,参见博客《ssh协议详解.md》
-
确认console安装了图形库
4. 解决
经过上述过程的排查,能够把重点定位在第6条,其他5条都依次排查无误。
通过执行命令rpm -qa | grep xorg-x11
,确认系统并没有安装xorg-x11。
通过YUM安装以下软件包:
xorg-x11-server-utils-7.5-13.el6.x86_64
xorg-x11-drv-ati-firmware-7.1.0-3.el6.noarch
xorg-x11-xauth-1.0.2-7.1.el6.x86_64
xorg-x11-font-utils-7.2-11.el6.x86_64
xorg-x11-xinit-1.0.9-14.el6.x86_64
xorg-x11-utils-7.5-6.el6.x86_64
xorg-x11-proto-devel-7.6-25.el6.noarch
此时,通过virt-manager
依然无法打开图形界面,配置DISPLAY=localhsot:0.0也无效。最后重启了console,然后生效。
在重启console之后,执行virt-manager
命令时,打开的图形界面,字体全部为方块。
因此需要安装字体依赖包,执行命令yum -y install dejavu-lgc-sans-fonts
解决问题。
5. 总结
最小化安装过程中,很多软件,包括字体都是没有安装的。因此需要耐心地安装这些依赖环境。并且踩过坑之后,总结一下,下次便不会再采坑。