Ubuntu 22.04 上 VMware Workstation 点击虚拟机窗口就消失的解决历程

最近在 Ubuntu 22.04(X11 会话)上使用 VMware Workstation 时,遇到一个非常诡异的 bug:虚拟机启动后一切正常(进程在运行,能看到控制台日志),但只要鼠标点击虚拟机窗口内部,窗口就立即消失/变不可见(像隐藏了),无法交互,但虚拟机后台继续正常运行。切换标签、Alt+Tab 都找不到窗口,只能强制关闭 VM。

这个问题让我折腾了好几天,尝试了各种常见方案(如关闭 3D 加速、重装 VMware Tools、调整输入设置),都没用。后来通过搜索发现,这是 Xorg 核心库 libX11 的一个已知 bug,即使在 X11 下也会触发。

下面分享我的环境、问题现象、解决方案和详细步骤,希望能帮到同样遇到这个问题的朋友。

环境

  • 主机系统:Ubuntu 22.04 LTS(jammy)
  • 桌面环境 :GNOME,默认 X11 会话(通过 echo $XDG_SESSION_TYPE 确认是 x11)
  • VMware 版本:Workstation Pro/Player 17.x(具体版本不重要,很多新版都中招)
  • 虚拟机 guest:各种(Windows/Linux 测试都一样)
  • 问题触发时间:2025 年底前后(可能是系统更新 libX11 后出现)

问题现象

  • 启动虚拟机后,窗口正常显示。
  • 鼠标一点击窗口内部(试图抓取输入),窗口瞬间消失(invisible)。
  • 虚拟机进程仍在运行(htop/ps 查看正常),但无法看到或交互窗口。
  • 全屏模式、调整分辨率、重启 VMware 等操作无效。
  • 不是鼠标光标消失,而是整个 VM 窗口隐藏。
  • Wayland 下更常见,但 X11 下也偶尔触发。

这个 bug 的根源是 libX11 在处理键盘映射事件(XkbMapNotify)时的兼容性问题,导致 VMware 输入抓取失败,窗口管理异常。相关上游 MR:https://gitlab.freedesktop.org/xorg/lib/libx11/-/merge_requests/293(截至 2025 年 12 月仍未合并,需要 rebase)。

解决方案

核心修复是应用 libX11 的补丁(MR !293),通过从源代码克隆并编译带补丁的版本,替换系统 libX11。

Arch Linux 用户有现成 AUR 包(libx11-mr293),但 Ubuntu 没有,只能手动编译。编译后问题彻底解决,VM 窗口点击不再消失,输入抓取正常。

(备选:如果不想编译,可以等官方更新,或临时用 VirtualBox 替代。)

警告 :编译会覆盖系统核心库 libX11,有一定风险(可能影响其他 X11 应用)。建议先备份,或在测试环境中操作。如果出问题,可用 sudo apt install --reinstall libx11-6 恢复。

解决步骤

  1. 安装编译依赖
bash 复制代码
   sudo apt update
   sudo apt install git build-essential pkg-config libxcb1-dev x11proto-dev xtrans-dev libx11-dev xutils-dev
  1. 克隆 libX11 并切换到带补丁的分支
bash 复制代码
	git clone https://gitlab.freedesktop.org/xorg/lib/libx11.git
	cd libx11
	git fetch origin merge-requests/293/head
	git checkout -b mr293 FETCH_HEAD
  1. 编译和安装
bash 复制代码
	./autogen.sh
	./configure --prefix=/usr --disable-static
	make -j$(nproc)
	sudo make install
	sudo ldconfig  # 更新库缓存
  1. 生效
bash 复制代码
sudo reboot  # 重启系统,或至少注销/重新登录
  1. 验证
  • 启后启动 VMware,打开虚拟机。
  • 点击窗口内部测试:不再消失,一切正常!

后记

这个问题主要是上游 libX11 的 bug,VMware 本身无错。截至 2025 年 12 月,该补丁仍未正式合并到 Ubuntu 仓库,所以手动编译仍是必要步骤。手动编译补丁后,用了几天一切稳定。

相关推荐
方便面不加香菜4 小时前
Linux--基础IO(一)
linux·运维·服务器
鼎讯信通6 小时前
风电光缆运维提质增效:G-4000A 光缆故障追踪仪破解风场巡检难题
运维·网络·数据库
三十..7 小时前
MySQL 从入门到高可用架构实战精要
运维·数据库·mysql
跨境数据猎手8 小时前
大数据在电商行业的应用
大数据·运维·爬虫
linyanRPA8 小时前
影刀RPA店群自动化实战:多店铺活动自动报名与促销管理架构设计
运维·自动化·办公自动化·rpa·python脚本·爬虫自动化·店群自动化
mounter6259 小时前
现代 Linux 内存管理的演进与变革:从传统 LRU 到多代架构 MGLRU
linux·服务器·kernel
会Tk矩阵群控的小木9 小时前
安卓群控系统对于游戏工作室实战教程
android·运维·游戏·adb·开源软件·个人开发
赵渝强老师9 小时前
【赵渝强老师】Kubernetes(K8s)中的金丝雀升级
linux·docker·云原生·容器·kubernetes
佛山个人技术开发9 小时前
GitCode SSH连接配置教程
运维·ssh·gitcode
Qt程序员9 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu