☰
麒麟虚拟机全屏显示与分辨率问题排查:从虚拟显卡到xrandr
2026/10/1 3:25:20 网站建设 项目流程

用了麒麟系统虚拟机,很多人第一件事就是把窗口拉大,结果客户机桌面纹丝不动,永远是那个1024x768 的初始分辨率。在虚拟机里跑麒麟系统、再折腾全屏显示的场面,这两年我见了太多次——有人是给硬件适配做测试,有人刚接触麒麟想装个环境看看,还有人是想在办公电脑上用虚拟机跑麒麟日常使用。不管哪种场景,只要卡在"全屏显示"这关,后面再有意思的功能都玩不顺。

这篇文章我打算把麒麟系统虚拟机上全屏显示的完整逻辑讲透,从虚拟显卡原理到不同虚拟化平台的差异,从驱动安装到排查链路,全部按我自己的实操经验展开。适合刚从物理机转到虚拟机场景的麒麟新手,也适合装了工具但始终没法全屏的老手对照排查。

1. 麒麟系统在虚拟机里"定死"分辨率:问题从哪来

1.1 虚拟显卡与"软屏"机制

物理机上,你插一根HDMI线,显示器本身就支持一组合法分辨率,显卡驱动把它读出来,桌面系统按其中一个模式输出就行。

虚拟机里完全是另一套玩法。宿主机给客户机准备的是一块虚拟显卡,VMware里叫VMware SVGA II,VirtualBox里叫VBoxVGA或VMSVGA,QEMU/KVM环境里通常用VirtIO GPU或标准VGA。这块"显卡"没有真实物理输出口,它通过一组仿真寄存器和宿主机的显示层通信,把你的虚拟机窗口当成一块随时能改尺寸的软件显示器。

问题在于,客户机操作系统并不会天然知道"这块屏幕可以变大"。内核看到的是一个PCI显卡设备,必须加载对应的内核驱动,初始化这块虚拟显卡,并把可用的分辨率列表上报给图形栈。比如VMware虚拟显卡对应vmwgfx驱动,这是一个标准的DRM/KMS驱动;VirtualBox对应vboxvideo驱动;KVM里是virtio-gpu-drm。麒麟系统默认安装时如果没带这些驱动,图形栈就只能退回最保守的VESA/VGA兼容模式,分辨率定格在800x600或1024x768。

说句人话就是:你看到的"窗口太小"不是显卡坏了,是客户机根本不知道自己面前这块"软屏"可以变大。

1.2 三个典型表现帮你快速定位

我从实际遇到的案例里抽出三个最典型的状态:

  1. 固定分辨率:不管你如何拖拽宿主窗口,客户机桌面纹丝不动,分辨率列表里只有老几样。
  2. 全屏出现黑边:按了全屏快捷键后,画面没有充满屏幕,而是居中显示加一圈黑色边框。
  3. 桌面压根起不来或花屏:这种情况多出现在驱动模块加载失败,Xorg退化成fbdev模式,显示混乱。

这三种状态对应的故障层级不一样。第一种大概率是缺工具、缺服务;第二种可能是驱动加载了但分辨率同步服务没跑;第三种则基本锁定在内核模块或Xorg配置层面。

1.3 全屏显示必须满足的三个条件

哪怕不关心底层原理,也请先记住这三条,后面所有操作都是在满足这三条:

  1. 虚拟化平台把虚拟显卡正确暴露给了客户机,VM配置里没有特殊改动;
  2. 客户机内核加载了对应虚拟显卡的驱动,能上报一组动态分辨率;
  3. 客户机里跑着分辨率同步服务,监听到宿主机窗口变化后,主动告诉桌面环境去调整。

三条缺一不可。很多人只装了驱动没管服务,或者只开了服务但驱动没加载,全屏自然做不成。第4章的排查链路基本也是按这三条倒着查回去的。

2. 不同虚拟化平台的处理差异与选型参考

2.1 VMware Workstation:桌面版麒麟的常见选择

VMware Workstation Pro/Player 是大多数人跑麒麟桌面版的首选环境,因为SVGA II虚拟显卡的驱动链路非常成熟,从Linux内核5.4到5.10基本都有现成的vmwgfx模块。

在VMware里,桌面版麒麟全屏显示的推荐路径很清晰:装完系统后,先通过麒麟软件源安装open-vm-tools-desktop,然后重启客户机,再打开VMware菜单的"查看 -> 自动调整大小 -> 自动调整客户机"。这个菜单项在工具没装好之前是灰掉的,装好之后就会激活。全屏快捷键Ctrl+Alt+Enter,窗口模式下拖拽宿主机边界,客户机桌面也会跟着自动拉伸。

需要注意一个小细节:VMware Workstation的"自动适应客户机"和"自动调整大小"是两个菜单入口,前者是一键把虚拟机窗口切成客户机当前分辨率,后者才是让客户机跟随宿主机窗口动态变化。你要的是后者。

2.2 VirtualBox:增强功能与内核版本的爱恨情仇

VirtualBox免费且轻量,但对麒麟这种改过包管理、改过桌面环境的Linux发行版,适配度天生要差一截。最常踩的坑就是挂载VBoxGuestAdditions镜像执行安装脚本时,编译内核模块失败。

原因很简单:麒麟系统默认源里不一定装了build-essential、dkms、linux-headers这几个前置包,而增强功能需要编译vboxguest、vboxsf、vboxvideo三个模块,缺内核头文件必然失败。就算编译成功,Xorg也不一定加载vboxvideo驱动,因为部分麒麟版本带了自定义的xorg.conf.d配置,vbox自带的vboxvideo.conf优先级不高。

如果你非用VirtualBox不可,那就要做好"装完增强后手动确认驱动加载状态"的心理准备。这比起VMware确实要多花一些时间。官方源里通常没有virtualbox-guest-additions这类现成包,基本只能靠ISO手动装。

2.3 KVM/QEMU与国产虚拟化平台

KVM在服务器场景用得非常多,如果你在麒麟服务器版上再用QEMU/KVM嵌套出一台带桌面的虚拟机,全屏显示的关键在给客户机配置VirtIO GPU设备。virt-manager新建虚拟机时,视频模型建议选virtio,而不是默认的QXL或VGA。

客户机里要确认virtio-gpu-drm模块存在,Xorg日志里能看到modeset驱动里有virtio相关条目。分辨率同步靠的是客户机里的桌面环境和spice-vdagent这类通道服务。平时我们接触较多的中望、深信服等国产虚拟化平台,底层很多也是KVM,原理一致,只是管理面叫法不同,排查方向可以照搬。

2.4 服务器版麒麟为什么画风完全不同

还有相当一批人是在服务器版麒麟上调全屏,问"为什么装了Tools还是没有图形界面"。这里得点破一个基本事实:银河麒麟服务器版默认就不带桌面环境,SSH进去就是纯命令行,分辨率这东西理论上不存在。

那种场景下你要的不是全屏,而是图形化访问。通常做法是给服务器配置VNC或XDMCP。VNC的分辨率靠配置文件里的geometry参数控制,比如vncserver -geometry 1920x1080,在宿主机窗口里就能得到一个比较大的远程桌面。这不是虚拟机窗口全屏,但体验上已经接近了,别在服务器版上花时间找"Tools全屏"选项,方向就错了。

3. 装驱动这一步:open-vm-tools 与官方 Tools 的取舍

3.1 优先走麒麟软件源安装 open-vm-tools

对VMware环境,我的首选永远是软件源里的open-vm-tools,而不是Workstation菜单里挂载的官方VMware Tools ISO。原因有三个:一是open-vm-tools是发行方跟随内核版本维护的,比官方ISO里的二进制包跟内核版本更匹配;二是安装过程完全apt化,不需要perl脚本交互;三是卸载干净,不会留下杂七杂八的配置。

在麒麟桌面版V10上执行:

sudo apt update sudo apt install open-vm-tools open-vm-tools-desktop

重点说一下这个open-vm-tools-desktop包。很多教程只让你装open-vm-tools,结果装完命令行能同步时间、能复制粘贴,但分辨率始终不变。因为open-vm-tools本身不带桌面集成,真正干活的vmware-user、vmwgfx相关配置、桌面自动缩放都在desktop包里。麒麟桌面版只要不是纯服务器,就一定要把这个包也装上。

装完建议直接重启一次。理论上systemctl restart vmtoolsd即可,但我发现麒麟桌面版的会话管理器对vmtoolsd的启动时序比较敏感,注销重登或重启才是稳妥方案。

3.2 软件源和版本代号匹配

麒麟V10存在多个SP版本,不同版本对应的软件源仓库代号不一样。如果你apt update报404或者找不到open-vm-tools-desktop,多半是源和系统版本不匹配。

最省事的做法是先确认系统代号:

cat /etc/os-release

然后把source.list里的仓库地址跟实际代号对上。麒麟的源和Ubuntu不同名,不要直接把Ubuntu官方源写进去,很容易把open-vm-tools的依赖解析成不兼容版本,导致桌面组件被误更新。个人经验是:只要系统版本没到必须升级的程度,源里能用就不折腾,别为了装个工具去动源。

3.3 必须手工挂载VMware Tools ISO时

有些场景你真的只能走官方ISO,比如目标机器完全不联网、内网环境里没有麒麟源镜像。这种情况下,先提前准备编译环境:

sudo apt install perl gcc make linux-headers-$(uname -r)

然后在VMware菜单里选择"安装VMware Tools",它会挂载一个linux.iso,里面有个tar.gz压缩包。解开后运行vmware-install.pl,一路yes下去,默认选项几乎都能用。

这里有个很容易忽略的点:官方ISO安装出来的内核模块,比如vmw_vmci、vmw_vsock,是按当前内核版本编译的。如果麒麟后期做过内核升级,这些模块就会失效,表现为vmtoolsd起来但lsmod里看不到vmw_vmci。到时候就要重新运行一遍vmware-install.pl并选择修复模式,千万不要以为是驱动坏了。

3.4 VirtualBox增强功能的依赖补全

VirtualBox环境里,挂载VBoxGuestAdditions ISO之前,先补依赖:

sudo apt install build-essential dkms linux-headers-$(uname -r)

然后挂载ISO:

sudo mount /dev/cdrom /mnt sudo sh /mnt/VBoxLinuxAdditions.run

执行时注意看屏幕输出,有没有出现failed to build module之类字样。编译成功后,重启客户机,再用lsmod确认vboxguest和vboxvideo都加载了。

如果你发现内核头文件版本和当前内核不一致,大概率是麒麟里的内核升级过但头文件没有跟着装全,要用uname -r和dpkg -l检查对应关系,缺什么补什么。这一步做不对,后面全屏免谈。

4. 驱动装完仍是小窗口:完整排查链路实录

有一类场景最磨人:工具装了、服务看起来也启动了,但分辨率就是不变。这时候我不会盲目重装,而是按下面四条链路从内核到应用层逐段排查。

4.1 链路一:确认驱动模块真的加载了

命令行先跑:

lsmod | grep vmw

VMware环境里,预期能看到vmwgfx、vmw_vmci、vmw_vsock这几个模块。如果只有vmw_vmci和vmw_vsock,说明桌面显卡驱动vmwgfx没挂上,Xorg走的还是兼容模式,全屏无从谈起。这时候检查内核模块目录里有没有vmwgfx.ko,没有就需要重装open-vm-tools或内核模块。

再看服务状态:

systemctl status vmtoolsd

正常应该是active (running)。如果显示failed,去/var/log/vmware-tools-vmware-tools.log里看报错,常见原因包括内核模块没加载、协议版本不兼容、虚拟机配置里禁用了VMSVC。日志路径可以根据版本略有不同,但一般不会跑偏。

VirtualBox环境下,对应检查:

lsmod | grep vbox

需要看到vboxguest、vboxsf、vboxvideo。缺哪个就回到增强功能安装那一节重新解决。

4.2 链路二:确认Xorg实际使用的显卡驱动

内核模块加载了,不代表Xorg一定在用。查日志最直接:

cat /var/log/Xorg.0.log | grep -i driver

VMware环境里,驱动部分应该出现vmwgfx字样。VirtualBox环境里应该出现vboxvideo。如果看到的是modeset、vesa或者fbdev,说明Xorg没有把虚拟显卡驱动作为首选,问题多半出在xorg.conf优先级或xorg.conf.d目录里的自定义配置。

麒麟系统有的版本会在/etc/X11/xorg.conf.d/下放一个gpu配置,会强制指定驱动。你可以先备份后临时移除:

sudo mv /etc/X11/xorg.conf.d/99-kylin-gpu.conf /etc/X11/xorg.conf.d/99-kylin-gpu.conf.bak

注销重登一次看效果。如果全屏恢复了,就是这个文件压住了虚拟显卡驱动。

4.3 链路三:用xrandr看客户机到底认识哪些分辨率

内核、驱动、Xorg都到位后,打开终端跑:

xrandr

输出里会列出当前显示器支持的所有模式。VMware环境里通常会显示Virtual-1、Virtual-2之类的输出接口,分辨率列表包含一大串,从800x600到1920x1080甚至更高。

如果列表很丰富,但你拖拽窗口时桌面不跟着变,说明驱动已经就绪,是当前的桌面会话没有自动应用新分辨率。这个时候去麒麟桌面的"显示"设置里手动切一个合适的分辨率即可。UKUI桌面的设置位置一般在控制中心->显示->分辨率。

如果xrandr列出的就两三个旧模式,那大概率是vmtoolsd进程与宿主机之间的分辨率同步通道没建立起来,回到链路一重新检查服务日志。

4.4 链路四:全屏黑边、花屏的机率性修复

全屏黑边这种事,本质是客户机在切换到新分辨率时,桌面环境没有把输出区域扩展到整个虚拟屏幕。很多时候重启Xorg会话就能解决。不要在生产环境随便重启的话,就注销一下当前用户,强制会话重建。

花屏则多半是vmwgfx的3D加速兼容性问题。VMware里如果虚拟机设置开了"加速3D图形",部分麒麟版本的Xorg容易在特定分辨率切换时出现花屏。这时候可以临时关掉3D加速再全屏试试。分辨率切换本身不依赖3D加速,关掉不影响全屏效果,损失的只是桌面特效。

4.5 字体小到没法看:加一个顺手的配置

全屏成功后,另一高频吐槽是字体太小。麒麟系统默认字体在物理机上看着还正常,一进虚拟机全屏,在缩放下就会显得偏小。常见做法是装中文字体包:

sudo apt install fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk

然后在"设置 -> 字体"里把系统字号往上调一档。我自己的工作习惯是直接用Noto CJK替代默认字体,在虚拟机高分屏场景下观感舒服很多。

5. 从"全屏显示"延伸出的几个实用操作习惯

5.1 VMware菜单里的两个开关要分清

在VMware Workstation中,菜单里"查看 -> 自动调整大小 -> 自动调整客户机"才是让客户机跟随宿主机窗口变化的功能。另一个"查看 -> 自适应客户机"是把虚拟机窗口映射到客户机当前分辨率,功能方向相反。

我每次帮人排查远程问题,都会先问一句"你点的是哪个菜单",因为很多人把"自适应客户机"当成全屏开关,点了半天没反应,其实早就装好工具了。正确组合是:窗口拖大 + 自动调整客户机开启,桌面就会自动把分辨率切到合适大小。

还有个小技巧:VMware的"立即适应客户机"快捷键是Ctrl+L,可以在客户机分辨率异常时快速把窗口拉回。全屏快捷键则是Ctrl+Alt+Enter,这两个不要混淆。

5.2 远程桌面往往比全屏更快

如果客户机里Tools怎么都装不上,或者用VirtualBox增强功能一直编译失败,我的建议是别在虚拟机窗口里死磕全屏了。给客户机装个xrdp,用Windows自带的mstsc远程连进去,宿主机窗口想拉多大就多大,远程桌面里的分辨率跟着窗口自动缩放。

麒麟桌面版装xrdp:

sudo apt install xrdp sudo systemctl enable --now xrdp

然后从宿主机远程连接客户机IP,用桌面账号登录。xrdp会创建一个新的Xorg会话,分辨率根据远程桌面的窗口大小动态变化。这一招能绕开绝大部分虚拟化驱动兼容问题,尤其在VirtualBox环境下非常实用。

5.3 新装虚拟机前,这几项先定好

最后给还没装麒麟的人一个预习清单。新建虚拟机时做到这几点,后面全屏问题基本能免掉一半:

  1. VMware里虚拟机设置 -> 显示器 -> 勾选"加速3D图形",影不影响全屏另说,但至少别让虚拟显卡处于半禁止状态;
  2. 内存给足4GB以上,低内存条件下桌面环境经常因为资源紧张拒绝切换分辨率;
  3. 安装系统时联网,装完系统后第一时间apt update,把基础源准备好;
  4. 装完系统第一个动作就是装对应虚拟化工具的desktop包,不要等使用到一半再补;
  5. 内核升级要谨慎,麒麟桌面版内核升级后,open-vm-tools相关模块经常要跟着重装,升级前先备份重要数据。

这套习惯我是在给不同客户调试麒麟虚拟机时慢慢养成的。很多全屏问题看起来是"分辨率没变",深挖下去往往是装完系统后第一步就没走对,后面每一步都在补坑。

5.4 一个可以反复用的检查组合

我把每次排全屏问题的三条命令固化成了一套,遇到问题直接复制执行:

systemctl status vmtoolsd lsmod | grep vmw xrandr | grep connected

三行输出分别代表服务层、内核层、应用层。哪一行异常就说明问题出在对应层级,基本不需要再猜。

我曾经遇到过一例非常刁钻的故障:lsmod显示vmwgfx加载正常,vmtoolsd也是active,xrandr却只有1024x768。查了半个小时发现是Xorg把Virtual-1输出的当前模式锁死在了初始分辨率,用xrandr --output Virtual-1 --mode 1920x1080手动切一次后,桌面设置才恢复正常。这个案例提醒我,有时候驱动层完全正常,只是当前会话的显示模式没有被刷新,手动触发一次就能解决。

把这些经验整理成文,是希望后来者不用再把时间浪费在"装了工具却全屏不了"这种事情上。毕竟麒麟虚拟机真正的价值是跑那些你想跑的应用,而不是在分辨率设置里辗转反侧。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询