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中内置的显示查看不支持。

相关推荐
猪脚踏浪9 分钟前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠16 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush416 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52017 小时前
Linux 11 动态监控指令top
linux
不会C语言的男孩18 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈18 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix
凡人叶枫19 小时前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
2601_9618752420 小时前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj20 小时前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
lsyeei20 小时前
linux 系统目录详解
linux·运维·服务器