(KVM连载)4.5.1 SDL显示的使用

在客户机中,特别是对于桌面级的Linux系统和所有的Windows系统来说,虚拟机中的图形显示是非常重要也是几乎必需的功能。本节主要主要介绍KVM中图形界面显示相关配置。

4.5.1 SDL的使用

SDL(Simple DirectMedia Layer)是一个用C语言编写的、跨平台的、免费和开源的多媒体程序库,它提供了一个简单的接口用于操作硬件平台的图形显示、声音、输入设备等。SDL库被广泛应用于各种操作系统(如Linux、FreeBSD、Windows、Mac OS、iOS、Android等)上的游戏开发、多媒体播放器、模拟器(如QEMU)等众多应用程序之中。尽管SDL是用C语言编写的,但是其他很多流行的编程语言(如C++、C#、Java、Objective C、Lisp、Erlang、Pascal、Perl、Python、PHP、Ruby等等)都提供了SDL库的绑定,在这些编程语言中都可以很方便的调用SDL的功能。

在QEMU模拟器中的图形显示默认就是使用SDL的。当然,需要在编译qemu-kvm时需要配置SDL的支持,之后才能编译SDL功能到QEMU的命令行工具中,最后才能启动客户机时使用SDL的功能。在编译qemu-kvm的系统中,需要有SDL的开发包的支持,在RHEL6.3系统中需要安装SDL-devel这个RPM包。如果有SDL-devel软件包,在3.4.2节中配置QEMU时默认就会配置为提供SDL的支持,通过运行configure程序,在其输出信息中可以看到“SDL support   yes”即表明SDL支持将会被编译进去。当然,如果不想将SDL的支持编译进去,在配置qemu-kvm时加上“–disable-sdl”的参数即可,configure输出信息中会显示提示“SDL support   no”。

在运行QEMU命令行的系统中必须安装SDL软件包,否则命令行启动客户机时会有产生“无法加载libSDL”的错误,命令行的输入输出演示如下:

[root@jay-linux kvm_demo]# qemu-system-x86_64 rhel6u3.img

qemu-system-x86_64: error while loading shared libraries: libSDL-1.2.so.0: cannot open shared object file: No such file or directory

[root@jay-linux kvm_demo]# yum install SDL   #安装SDL软件包

SDL的功能很好用,也比较强大,不过它也有一个局限性,就是在创建客户机并以SDL方式显示时,它会直接弹出一个窗口,所以SDL方式只能在图形界面中使用。如果在非图形界面中(如ssh连接到宿主机中),使用SDL时会出现如下的错误信息。

[root@jay-linux kvm_demo]# qemu-system-x86_64 rhel6u3.img

Could not initialize SDL(No available video device) – exiting

qemu-kvm命令启动客户机时,采用SDL方式,其效果如图4-10所示。

图4-10 启动客户机时使用SDL,自动弹出客户机的显示窗口

在使用SDL时,如果将鼠标放入到客户机中进行操作会被完全抢占,此时在宿主机中不能使用鼠标进行任何操作。QEMU默认使用“Ctrl+Alt”组合键[15]来实现鼠标在客户机与宿主机中切换。图4-11显示了客户机抢占了鼠标的使用场景,在QEMU monitor上部边框中提示了按哪个组合键可以释放出鼠标。

图4-11 SDL显示中客户机完全占用鼠标

使用SDL方式启动客户机时,弹出的QEMU窗口是一个普通的窗口,其右上角有最小化、最大化(或还原)和关闭窗口等功能。其中,如果点击了“关闭”按钮,会将QEMU窗口关闭,而同时客户机也被直接关闭了,QEMU进程会直接退出。为了避免因误操作而关闭窗口从而让客户机直接推出的情况发生,QEMU命令行提供了“-no-quit”参数来去掉SDL窗口的直接关闭功能。加了“-no-quit”参数后,SDL窗口中的“关闭”按钮的功能将会失效,而最小化、最大化(或还原)等功能正常。图4-12演示了启动客户机时加上了“-no-quit”参数时情况。

图4-12 添加“-no-quit”参数后,SDL窗口中的关闭窗口功能失效

master

Stay hungry, stay foolish.

6 Comments

    • 可能是你的qemu编译的时候 没有编译SDL的support,我文章中这样写到:
      在编译qemu-kvm的系统中,需要有SDL的开发包的支持,在RHEL6.3系统中需要安装SDL-devel这个RPM包。如果有SDL-devel软件包,在3.4.2节中配置QEMU时默认就会配置为提供SDL的支持,通过运行configure程序,在其输出信息中可以看到“SDL support yes”即表明SDL支持将会被编译进去

    • 谢谢反馈!~ 由于这几个图片用了中文名,遇到一些编码问题,导致我服务器上乱码了。现在图片正常了,谢谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注