qemu+kvm+remote-viewer+vino实现单卡多显示

1 背景

实际在调试过程中经常要调试多个显示器的设置功能,比如需要调试双屏或者三屏以及更多屏幕的情况:

第一种方式:找一台真实的物理机需要支持2/3/4显示接口输出的设备且你有2/3/4个显示器,优点不需要太多的软件配置,缺点:硬件要求太高。

第二种方式:找一台真实的物理机需要支持2/3/4显示接口输出的设备,但是可能没有2/3/4这么多显示器,优点可可以减少显示器的硬件依赖,缺点:还依赖部分显卡硬件环境。

第三种方式:通过kvm+qemu 通过remote-view使能单显卡多显示端口使能的前提下通过vino实现远程共享服务最后通过realvnc实现在一个大的屏幕上显示效果。

其他:

1.vmware的硬件使能测试:尝试过在vmware虚拟机中配置多个显示端口无法生效。

2.通过dummy的模拟实现多显卡组合:尝试通过xorg的dummy驱动和默认的vmware中的默认svga进行组合显示,无法组合。

3.通过dummy的模拟实现(单显卡画布切割):尝试通过xorg的dummy的显示大画布,通过xrandr进行画布的切割,未达到想要的目标。

4.xvfb:通过xvfb相关显示服务替换xorg的服务?未达成目标?

5.是否在显卡驱动层面有类似用户态xorg的dummy显卡驱动模拟???

2 实现

2.1 第二种方案的实现

  1. 在显示器设备不足的情况下通过软件模拟接多个显示器,在grub中配置video=VGA-1:1024x768-32@60me强制使特定的显卡的输出端口处于连接状态,这个配置有个前提是需要你显卡固件中使能了特定的显卡显示端口,如果默认固件禁用了特定的显卡输出端口该配置无效。
  2. 在机器上开启远程桌面,安装vino远程桌面服务:
    cp /usr/share/applications/vino-server.desktop /etc/xdg/autostart/ gsettings set org.gnome.Vino require-encryption false
    gsettings set org.gnome.Vino prompt-enabled false systemctl restart lightdm #如果是gdm就改成gdm
  3. 在windows中可以通过安装realvnc viewer去连接虚拟机实现调试,填入对应的ip地址、用户和密码即可,如果是在linux下可以通过安装tigervnc viewer实现连接。

备注:需要关闭防火墙,比如通过iptables -L -vn查看是否开启了防火墙,systemctl status firewalld.service && systemctl stop firewalld.service&& systemctl disable firewalld.service

2.2 第三种方案的实现

1.通过virt-manager配置虚拟机的时候video qxl配置中把对应的heads从1改成3(实际你想要的显示端口个数).

  1. 在虚拟机中安装spice-vdagent包。

3.借助remote-viewer连接显示器,实际默认虚拟机的网络是nat模式,可以通过remote-viewer spice://192.168.122.1:5901, ip地址可以通过ifconfig virbr0查看实际的ip地址,另外端口号可以通过ps -ef |grep spice去实际查看实际用的端口号。

  1. remote-viewer中view-->display 使能display 2/3/4

5.另外remote-viewer我们默认用的是7.0是否升级到11.0以上才能实现对应的显示在一个画布上,实际通过单独编译升级后发现并没有这种效果,实际并没有这种功能。

  1. 使能了显示器以后参考方法第二种方案的实现的vino方式开启远程服务,最终通过realvnc viewer能看到一样的效果,目前测试过2、3、4屏都能正常。

备注:实际采用默认的virt-manager中内置的显示查看不支持。

相关推荐
Lsir10110_4 小时前
【Linux】进程信号(下半)
linux·运维·服务器
酉鬼女又兒4 小时前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器
云飞云共享云桌面4 小时前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
zl_dfq4 小时前
Linux 之 【多线程】(pthread_xxx、轻量级进程、原生线程库、线程ID、__thread、线程栈、线程与信号、线程与程序替换)
linux
choke2334 小时前
Python 基础语法精讲:数据类型、运算符与输入输出
java·linux·服务器
AZ996ZA5 小时前
自学linux的第二十一天【DHCP 服务从入门到实战】
linux·运维·服务器·php
_OP_CHEN5 小时前
【Linux系统编程】(二十八)深入 ELF 文件原理:从目标文件到程序加载的完整揭秘
linux·操作系统·编译·c/c++·目标文件·elf文件
Fleshy数模5 小时前
MySQL 表创建全攻略:Navicat 图形化与 Xshell 命令行双模式实践
linux·mysql
神梦流6 小时前
GE 引擎的非标准数据流处理:稀疏张量与自定义算子在图优化中的语义保持
linux·运维·服务器
.小墨迹6 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu