KVM虚拟化:(十一)显示配置简介

admin 2022年11月28日 858次浏览

1、SDL

SDL(Simple DirectMedia Layer)是一个跨平台的、免费、开源的多媒体程序库,它提供了一个简单的接口用于操作硬件平台的图形显示、声音、输入设备等

SDL 是 QEMU 模拟器中默认使用的图形显示,但是,需要在编译 QEMU 时配置对 SDL 的支持后,才能编译 SDL 功能到 QEMU 的命令行工具中,最后才能在启动客户机时使用 SDL 的功能。在编译 QEMU 时,需要有 SDL 的开发包的支持(如:在 RHEL 系列系统中需要安装 SDL-devel,如果安装了 SDL-devel 软件包,然后在配置 QEMU 时默认会配置 SDL 的支持)。运行 configure 程序时,在其输出信息中看到 SDL support yes 即表明 SDL 支持将会被编译进去。如果不想将 SDL 的支持编译进去,在配置 QEMU 时加上 --disable-sdl 的参数即可,在 configure 输出信息中会显示提示 SDL support no

图:SDL界面

2、VNC

VNC 是图形化的桌面分享系统,它使用RFB(Remote FrameBuffer)协议来远程控制另外一台计算机系统。其通过网络将控制端的键盘、鼠标的操作传递到远程受控计算机中,而将远程计算机中的图形显示屏幕反向传输回控制端的 VNC 窗口中,VNC 不依赖于操作系统

尽管 QEMU 仍然采用 SDL 作为默认的图形显示方式,但 VNC 的管理方式在虚拟化环境中使用得更加广泛,因为它克服了 SDL 只能在图形界面中使用的局限性,而很多的 Linux 服务器系统通常启动文本模式而不是图形界面模式。VNC 中的操作在 VNC 窗口关闭或网络断开后,仍然会在服务端继续执行。另外,使用了 VNC,可以在服务器端分别启动多个 VNC session,从而让多人通过各自 VNC 客户端同时连接到各自的 VNC 桌面并进行图形界面下的操作与维护

2.1、宿主机中的VNC使用

  • 在宿主机中安装VNC的服务器软件包

    [root@kvm ~]# yum install tigervnc-server tigervnc -y
    [root@kvm ~]# rpm -q tigervnc tigervnc-server
    tigervnc-1.8.0-22.el7.x86_64
    tigervnc-server-1.8.0-22.el7.x86_64
    
  • 设置宿主机中的安全策略

    # 关闭SELinux
    [root@kvm ~]# vim /etc/selinux/config
    SELINUX=disabled
    
  • 在宿主机中启动VNC服务端

    运行命令 vncserver :1 即可启动端口为5901(5900+1)的 VNC 远程桌面的服务器,如果需要启动多个VNC Server,使用不同的端口即可供多个客户端使用。如果是第一次启动 vncserver,系统会提示设置连接时需要输入的密码,根据需要进行设置即可

    [root@kvm ~]# vncserver :1
    You will require a password to access your desktops.
    Password:
    Verify:
    Would you like to enter a view-only password (y/n)? n
    A view-only password is not used
    New 'kvm:1 (root)' desktop is kvm:1
    Creating default startup script /root/.vnc/xstartup
    Creating default config /root/.vnc/config
    Starting applications specified in /root/.vnc/xstartup
    Log file is /root/.vnc/kvm:1.log
    
  • 通过VNC客户端连接VNC server

2.2、使用VNC图形显示方式启动客户机

在 qemu 命令行中,添加 -display vnc=displayport 参数就能让 VGA 显示输出到 VNC 会话中而不是 SDL 中。如果在进行 QEMU 编译时没有 SDL 的支持,却有 VNC 的支持,则 qemu 命令行在启动客户机时不需要 -vnc 参数也会自动使用 VNC 而不是 SDL

参数解释:

  • host:N

    表示仅允许从 host 主机的 N 号显示窗口来建立 TCP 连接到客户机。在通常情况下,QEMU 会根据数字 N 建立对应的 TCP 端口,其端口号为 5900+N。而 host 值在这里是一个主机名或一个IP地址,是可选的,如果 host 值为空,则表示 QEMU 建立的 Server 端接受来自任何主机的连接;增加 host 参数值,可以阻止来自其他主机的 VNC 连接请求,从而在一定程度上提高了使用 QEMU 的 VNC 服务的安全性

  • to=L

    QEMU 在指定的端口(5900+N)已被其他应用程序占用的情况下,会依次向后递增尝试。这里 to=L 就表示递增到 5900+L 端口号为止,不再继续往后尝试。默认为0,即不尝试

  • none

    表示 VNC 已经被初始化,但是并不在开始时启动,而在需要真正使用 VNC 之时,可以在 QEMU monitor 中用 change 命令启动 VNC 连接

2.2.2、示例

  • 启动一个客户机,并使用VNC作为显示输出

    [root@kvm ~]# qemu-system-x86_64 -enable-kvm -smp 2 -m 4G -net nic,netdev=nic0 -netdev tap,id=nic0,script=/etc/qemu-ifup-NAT,downscript=/etc/qemu-ifdown-NAT /img_dir/centos7.qocw2 -display vnc=:0
    
  • 宿主机访问客户机

    [root@kvm ~]# vncviewer :0
    
  • 非宿主机访问客户机

    [root@kvm ~]# vncviewer 192.168.1.10:0
    

2.3、VNC显示中的鼠标偏移

VNC 显示有一个小的缺点,那就是在 VNC 显示中会看到两个鼠标,一个是客户机中的鼠标,另一个是连接到客户机 VNC 的客户端系统中的鼠标。这两个鼠标的焦点通常不重合,而且相差的距离还有点大,这样会导致在客户机中移动鼠标非常不方便

因为存在鼠标偏移的问题,所以在使用 VNC 方式启动客户机时,强烈建议将 -usb-usbdevice tablet 这两个 USB 选项一起使用,从而解决上面提到的鼠标偏移问题。-usb 参数开启为客户机 USB 驱动的支持(默认已经开启),而 -usbdevice tablet 参数表示添加一个 tablet 类型的 USB 设备,( tablet 类型的设备是一个使用绝对坐标定位的指针设备,就像在触摸屏中那样定位)这样可以让 QEMU 能够在客户机不抢占鼠标的情况下获得鼠标的定位信息

[root@kvm ~]# qemu-system-x86_64 -enable-kvm -smp 2 -m 4G -net nic,netdev=nic0 -netdev tap,id=nic0,script=/etc/qemu-ifup-NAT,downscript=/etc/qemu-ifdown-NAT /img_dir/centos7.qocw2 -display vnc=:1 -device piix3-usb-uhci -device usb-tablet