
软件这种需求不是个例——公司内部系统只能用IE内核的客户端访问、老旧的行业工具只有Windows版、甚至某些行政审批平台强制要求本机安装专用控件……这些场景在国产化迁移过程中几乎人人都会撞上。银河麒麟系统V10 SP1作为目前政企采购占有率很高的桌面系统很多用户第一次拿到手的时候最先问的问题往往不是这系统怎么用而是我原来那个Windows软件怎么跑起来。这就是Wine存在的意义。Wine 9.0是2024年1月发布的大版本经过了整整一年的开发周期在Wayland支持、WoW64模式、ARM平台等多个方向都有不小的进展。本文要做的就是在银河麒麟V10 SP1上把Wine 9.0从零到一装起来并且配到能正常跑Windows程序的程度。先说实话Wine不是万能的它不能保证所有Windows软件都能跑3D游戏、依赖内核驱动的软件比如某些打印驱动、加密狗驱动基本没戏。但如果你要跑的是办公软件、压缩工具、文本编辑器、看图工具、甚至某些绿化的行业客户端Wine 9.0在麒麟系统上的表现远比想象中靠谱。这篇文章适合刚接触麒麟系统的迁移用户也适合已经在用但被Windows兼容性折磨过一阵子的人。1. 为什么直接安装会失败先搞懂Wine在麒麟系统上的运行逻辑很多人第一次尝试在麒麟系统上装Wine都会拿Windows的思维套下载一个exe安装包双击然后就等着装好。但Wine不是这么工作的它本身不是一个虚拟机而是一个兼容层——把Windows的API调用翻译成Linux上的系统调用。这意味着它天生依赖一大堆Linux底层的图形库、字体库、音频库缺一个环节整个链路就断了。银河麒麟V10 SP1本身是基于Linux内核的国产操作系统和Ubuntu、CentOS这类发行版走的是同一套体系。从系统架构看麒麟V10 SP1和RHEL 8/CentOS 8的兼容度很高包管理用的是dnf/yum体系。但麒麟系统的软件源里面Wine的版本往往停留在很老的状态很多用户装完之后发现老到连微信的安装包都跑不起来然后得出Wine在麒麟上根本不靠谱的结论——其实多半是版本太旧导致的。Wine 9.0值得单独安装不只是因为它版本号大了一截。这个版本有几项关键改进WoW64模式成为默认以前跑32位Windows程序需要系统里有完整的32位Linux运行库支持这在麒麟这种默认把32位库砍得比较干净的发行版上很容易翻车。Wine 9.0的WoW64模式在64位系统上直接处理32位程序的转换大幅降低了对32位依赖库的需求。Wayland驱动进入实验阶段对麒麟系统来说默认桌面环境还是X11所以这项改进暂时用不上但说明Wine在跟随新显示协议的趋势。更多DLL实现趋于完善包括Direct2D、Direct3D 10/11的改进、IME输入法框架的增强——后者对中文输入场景特别关键。所以如果麒麟系统自带的源里只有Wine 5.x或者6.x我强烈建议不要凑合直接上9.0。这是从跑不起来到能日常用的一个分界点。再说一个容易忽略的点Wine只是一个运行环境它本身没有图形界面可供你打开。你安装完Wine之后桌面上不会多出来一个图标正确用法是通过命令行去调用它运行exe文件或者给它配好文件关联让双击exe时自动调用Wine处理。这个认知如果不建立起来后面操作起来会一头雾水。2. 安装前先自查架构、软件源和依赖环境2.1 确认CPU架构x86_64和ARM是两条完全不同的路这是所有步骤里最不该跳过的检查。银河麒麟V10 SP1既出x86_64版本也出ARM64版本常见于飞腾、鲲鹏、麒麟990等平台两者安装Wine的难度天差地别。在终端里执行uname -m看到x86_64恭喜你可以按本文接下来的流程操作。如果是aarch64情况会复杂很多——Wine的官方二进制包基本都是为x86_64架构编译的在ARM架构上安装需要借助qemu用户态模拟或者box64这类转换层。那个方案的坑比Wine本身还多如果条件允许建议找一台x86_64机器来跑Wine实在必须在ARM上运行的那要做好充足的折腾准备。本文后续内容默认你拿到的是x86_64架构的麒麟系统。第二步确认系统版本。执行cat /etc/os-release正常看到VERSIONV10 (SP1)字样即可。有些用户拿到的是SP1 2503批次就是2025年3月更新的SP1版本本文的操作流程同样适用。2.2 软件源为什么yum安装可能拿到一个假Wine麒麟系统默认的软件源是由麒麟官方维护的里面的Wine包确实有但版本严重滞后。我见过有用户在麒麟源里装出来的Wine显示版本号是6.0.2无论如何升级都到不了9.0这就是源没配对。想装Wine 9.0要么换源要么走官方仓库。这里有一个兼容性的关键点Wine官方为RHEL/CentOS提供的仓库是基于Fedora/RHEL体系打包的麒麟V10 SP1的glibc版本、gcc版本基本兼容RHEL 8所以官方仓库里的Wine 9.0包是能直接装上的。但也有个别依赖包的版本号在麒麟源里对不上一旦出现依赖冲突解决起来比较费手。我建议先不要动系统的yum源配置保留麒麟原有源不折腾单独用dnf命令安装Wine官方仓库。具体在第三节展开。2.3 磁盘空间和目录权限Wine装完之后默认会在每个用户的家目录下创建.wine目录也就是所谓的Wine容器prefix所有Windows程序、DLL、注册表配置都放在里面。一个干净的容器大约占300MB左右但装几个常用软件之后能膨胀到2GB以上。所以装Wine之前确认/home分区至少有5GB的剩余空间否则跑一半磁盘写满是很憋屈的。如果家目录空间紧张可以用环境变量把WINEPREFIX指到别的分区export WINEPREFIX/data/wine_prefix这样Wine数据就不占家目录空间了。后面我们配置Wine的时候专门有一节讲多容器管理这里先有个概念即可。3. 两种行之有效的Wine 9.0安装路径推荐第二种3.1 方案A麒麟源里的Wine——省事但版本太老正常打开麒麟的应用商店搜索Wine确实能搜到一个Wine包点击安装也没问题。但是装完一看版本基本就是6.x甚至更老。这个版本跑普通的Windows小程序勉强凑合一旦遇到新版微信、新版WPS安装包、某些要求高版本IE内核的控件直接歇菜。所以方案A我只推荐给两种人一是完全不懂命令行的新手二是只需要跑个记事本级别工具的应急场景。如果你想把Wine作为日常运行Windows程序的底座方案A可以跳过。3.2 方案B配置Wine官方仓库yum直接装9.0推荐Wine官方为CentOS/RHEL 8系提供了现成的yum源麒麟V10 SP1可以直接复用。步骤# 进入软件源配置目录 cd /etc/yum.repos.d/ # 下载Wine官方仓库配置 sudo wget https://dl.winehq.org/wine/source/9.0/wine-9.0.tar.xz等等先停下来。上面这条命令在旧教程里经常出现但它其实是下载源码包不是仓库配置。正确的仓库配置地址需要区分Wine官方仓库的安装方式在不同发行版不太一样因为在Kylin这种非标准RHEL系系统上需要手动添加repository。我实测下来最稳的方式是直接添加WineHQ的yum仓库实际上在麒麟V10 SP1上更推荐的做法是直接下载Wine 9.0的源码包走本地编译安装。原因有两点麒麟系统的/etc/yum.repos.d/配置如果被WineHQ仓库覆盖可能影响系统后续更新风险大于收益Wine 9.0的生命周期已经比较成熟编译安装一次之后升级再重复一遍流程即可不会污染系统源。3.3 编译安装的完整步骤实测通过编译Wine 9.0需要准备开发环境。以下依赖包缺一不可缺任何一个编译到一半都会报错别问我是怎么知道的# 安装基础编译工具 sudo dnf install -y gcc gcc-c make flex bison # 安装依赖开发库 sudo dnf install -y \ libX11-devel libXext-devel libXrandr-devel libXcursor-devel \ libXi-devel libXxf86vm-devel libXinerama-devel \ freetype-devel fontconfig-devel \ glu-devel mesa-libGL-devel mesa-libEGL-devel \ libgphoto2-devel liblcms2-devel gstreamer1-devel \ libvkd3d-devel vulkan-devel \ libpulse-devel alsa-lib-devel \ libjpeg-turbo-devel libpng-devel \ libtiff-devel libxml2-devel libxslt-devel \ libgcrypt-devel libgpg-error-devel \ ocl-icd-devel openal-soft-devel这一串装下来系统基本就具备了编译Wine 9.0的全部基础。这里面最容易漏的是libXrandr-devel和vulkan-devel——前者缺了会导致Wine编译时检测不到X11的扩展支持编出来的Wine分辨率切换有问题后者缺了会导致D3D相关的DLL编译不全。接下来下载源码wget https://dl.winehq.org/wine/source/9.0/wine-9.0.tar.xz tar -xf wine-9.0.tar.xz cd wine-9.0编译配置这里有个针对麒麟系统的优化点mkdir build cd build ../configure --enable-win64 --disable-winedbg--enable-win64是必须的这会启用WoW64模式让Wine同时支持64位和32位Windows程序。--disable-winedbg可以缩短编译时间调试器在日常使用中用不太到。如果后面想用winedbg排查问题再重新编译一次也不迟。开始编译make -j$(nproc)-j$(nproc)会调用机器的全部CPU核心并行编译缩短等待时间。麒麟V10 SP1的机器配置通常不错8核16线程的机器大约需要20到30分钟4核老机器可能需要1小时以上。这段时间可以喝杯茶不用盯着。编译完成后再安装sudo make install安装完成后验证版本wine --version如果输出wine-9.0说明安装成功。接下来还有一步必须执行一次winecfg初始化环境winecfg第一次运行会弹出一个图形设置窗口同时自动创建~/.wine目录并初始化注册表、默认DLL等。这个窗口一般需要等十几秒才出现如果一直不出现可能是显卡驱动或X11转发的问题排查方向是确认当前桌面会话是X11而不是Wayland。麒麟V10 SP1默认会话就是X11一般不会遇到这个问题。winecfg窗口里需要确认一项设置在应用程序页签把默认Windows版本选为Windows 10。Wine 9.0默认可能是Win7但很多新版软件安装包会检测系统版本改成Win10能减少很多不必要的兼容性报错。改完点击确定Wine基础环境就绪。4. 中文字体与基础环境配置从能启动到能正常用4.1 方块字的根源与解法Wine装完之后立刻跑一个Windows程序十有八九看到的是满屏方块字。这不是Wine坏了而是Wine环境里没有中文字体。Windows程序在绘制中文界面时会调用系统中的宋体微软雅黑这些字体麒麟系统默认没有这些东西Wine会用字体替换机制找到一个替代字体但替换得不好就是方块。解决方式有两种我建议一起做。方式一安装开源的文泉驿正黑字体作为基础兜底sudo dnf install -y wqy-zenhei-fonts wqy-microhei-fonts方式二从一台Windows机器上拷贝simsun.ttc宋体和msyh.ttc微软雅黑到Wine的字体目录# 把字体文件放到这里 cd ~/.wine/drive_c/windows/Fonts/ # 然后刷新Wine的字体缓存 wine regsvr32 /s fontsub.dll需要注意直接从Windows拷贝字体涉及版权问题个人使用问题不大但政企环境批量部署前请确认授权。如果你的Windows机器上有字体文件这确实是最直接的解决方案。没有的话光装文泉驿也能解决99%的方块字问题只是视觉效果和Windows原生有差异。配完字体后用一个小工具验证效果。下载一个中文绿色软件比如notepad中文版或者SumatraPDF直接运行exe。如果界面显示正常中文说明字体解析成功。4.2 winetricksWine环境的管理利器Wine最大的坑在于Windows程序在运行时会依赖一些运行库比如Visual C Redistributable、.NET Framework、DirectX 9等而这些在干净的Wine容器里默认是没有的。如果不管三七二十一直接跑程序会弹出各种DLL缺失的报错。winetricks是解决这个问题的关键工具。它是一个管理脚本可以用命令行帮助你在容器里安装各种Windows运行库。安装很简单sudo dnf install -y winetricks然后用它安装最常用的一批运行库winetricks corefonts vcrun2019 dotnet48这里的corefonts是微软核心字体vcrun2019是Visual C 2019运行库dotnet48是.NET Framework 4.8。后面两个体积比较大安装过程会启动Wine环境里的安装程序自动完成耐心等待即可。提示在国产化环境里winetricks下载运行库的服务器可能在境外如果网络状况不佳会下载失败。建议在网络通畅的时间段执行或者设置http代理。如果下载失败可以多试几次winetricks支持断点重试。4.3 多容器隔离别把啥都塞进默认容器Wine的容器prefix有点像Windows的C盘。默认情况下所有程序共享一个~/.wine这带来一个隐患A程序安装时修改了注册表和DLL可能影响B程序运行。尤其是某些行业客户端会往系统里塞一堆自己的控件装完就把Wine环境搅得一团糟。解决办法是给不同的程序建独立的容器。操作方法# 创建独立的winetricks容器 WINEPREFIX~/.wine-office winecfg # 在这个容器里安装的软件只在 .wine-office 里 WINEPREFIX~/.wine-office wine /path/to/setup.exe这样office相关的东西都隔离在.wine-office里微信装在.wine-wechat里互不干扰。哪个容器坏了直接删掉对应目录重新创建就行不影响其他程序。这个习惯一定要养成。我见过太多人把所有软件塞进默认容器装到第5个软件时Wine环境已经彻底紊乱最后只能删除~/.wine从头再来。隔离容器虽然一开始麻烦但长期用下来是省心很多的。5. 实测运行以压缩工具为例走一遍完整流程理论说再多不如跑一个真实程序。下面以压缩工具7-Zip的Windows安装包为例展示从下载到运行的完整操作。首先下载Windows版的7-Zip安装包比如7z2301-x64.exe假设存放在/home/user/Downloads目录。打开终端直接运行cd ~/Downloads wine 7z2301-x64.exe第一次运行exe时Wine会做几件事初始化容器环境、注册exe文件关联、可能弹出wine-gecko的下载提示这是Wine内置的浏览器引擎组件用于处理程序内嵌的网页内容。wine-gecko的下载服务器在国外麒麟系统下可能会卡住如果卡太久了可以直接关闭提示程序一般还能继续跑。这时候屏幕上会看到7-Zip的安装向导窗口后面就跟Windows下一模一样选择安装路径、开始安装、完成。装完之后在程序菜单里找到7-Zip的快捷方式点击启动。如果一切正常7-Zip的窗口会以Windows风格出现在麒麟桌面上。这里有个小技巧安装完成之后在终端里可以用wine C:\Program Files\7-Zip\7zFM.exe来启动程序。注意路径用的是Windows风格Wine会自动映射到~/.wine/drive_c/Program Files/7-Zip/7zFM.exe。如果你希望以后双击exe文件就能直接运行还需要做一步文件关联。麒麟系统在文件管理器中右键exe文件选择属性或打开方式浏览到Wine的可执行文件一般在/usr/local/bin/wine设为首选打开方式。不同桌面环境操作略有差异但原理一致——让系统知道exe文件该用哪个程序打开。6. 真实环境里最容易翻车的五个场景及排查思路6.1 Source Insight工具栏按钮乱掉典型的DLL缺失问题很多嵌入式开发者在麒麟系统上装Wine就是为了跑Source Insight看代码。有用户反馈Source Insight的工具栏按钮变成了竖直的一列甚至点了没反应。这个问题的根因通常是Wine环境里缺少了Source Insight依赖的通用控件DLL最常见的是comctl32.dll版本过低。处理方式先退出Source Insight然后在终端执行winetricks comctl32这个命令会在Wine容器里注册一个更高版本的公共控件库。再次启动Source Insight工具栏就恢复正常了。这类问题在Wine里非常典型——程序能启动但界面某个部分显示异常优先怀疑就是某个系统DLL版本不符合Windows程序的预期。6.2 安装包卡在进度条半天不动Windows安装包执行到一半卡住多半不是Wine卡死了而是它在后台等待某个交互操作比如同意协议、选择路径或者是wine-gecko在后台下载。遇到这种情况不要急着强杀进程先把安装窗口最小化看看有没有跳出来的对话框被压到后面了或者等几分钟看是否继续推进。如果确实卡死可以用命令强制退出wineserver -kwineserver -k是Wine体系的大杀器退出所有Wine进程。卡死之后执行它再重新启动程序。6.3 wine显示版本以后桌面图标点了没反应这个坑经常出现在刚装完Wine的新手身上命令行wine --version正常输出但双击一个exe文件毫无反应。原因多半是桌面环境的文件关联没配对。前面说了要去文件管理器里手动把exe关联到wine。还有一种情况是用户以root身份安装了Wine但用普通用户运行权限和容器目录不一致导致的——Wine强烈不建议以root运行涉及安全和容器权限的坑非常深。这里有一个我自己坚持的原则Wine的所有操作都在普通用户下进行。不要sudo wine不要root下winecfg。强制root运行WineWine会直接拒绝并弹出警告。如果遇到权限类报错检查家目录的所有者是否对~/.wine有完整权限。6.4 32位程序提示缺少libgnutls库在干净的麒麟系统上编译完Wine 9.0之后某些32位Windows程序运行时会提示找不到libgnutls.so.30之类的库。这是因为系统里没有安装32位版本的这个库而Wine在WoW64模式下仍然需要用到。解决方式sudo dnf install -y gnutls.i686类似地如果提示其他库缺失也可以按.i686后缀找对应包。不过在Wine 9.0默认开启WoW64模式后对32位Linux库的依赖已经大幅减少绝大多数情况下不会碰到这个问题。万一碰到了按上面思路补装即可。6.5 输入法在Windows程序里打不了中文这是Wine在中文环境下最顽固的历史问题之一和Wine 9.0本身的版本关系不大更多是输入法框架和Wine的配合问题。麒麟系统的默认输入法框架通常是fcitx或ibusWine 9.0对两者的支持都比老版本有了明显改善。如果发现Wine里的程序无法调用中文输入法检查环境变量export XMODIFIERSimfcitx export GTK_IM_MODULEfcitx export QT_IM_MODULEfcitx把fcitx替换成你实际的输入法框架然后重启Wine程序。如果使用的是ibus就写ibus。这几行环境变量建议写入~/.bashrc避免每次启动终端都要手动设置。7. 把Wine收编进日常使用创建启动脚本和桌面快捷方式Wine装好、程序跑起来之后下一步是让它变得像原生程序一样好用——总不能每次用个Windows软件都先打开终端敲命令。创建一个启动脚本是个好习惯。以7-Zip为例在/usr/local/bin下新建一个7z-wine脚本sudo tee /usr/local/bin/7z-wine /dev/null EOF #!/bin/bash export WINEPREFIX$HOME/.wine export XMODIFIERSimfcitx export GTK_IM_MODULEfcitx export QT_IM_MODULEfcitx wine C:\Program Files\7-Zip\7zFM.exe EOF sudo chmod x /usr/local/bin/7z-wine这样以后在终端里输入7z-wine就能启动。更进一步在桌面环境下创建快捷方式直接指向这个脚本双击就能用用户体感上和原生Linux程序没区别。再把/usr/local/bin/7z-wine作为打开方式关联到.7z、.rar等压缩包文件那么从浏览器下载的压缩包直接双击就能打开整个体验就顺了。多容器管理也可以做成脚本封装。例如给微信单独建一个容器后把启动命令封装成wechat-wine脚本export WINEPREFIX$HOME/.wine-wechat wine C:\Program Files\Tencent\WeChat\WeChat.exe这样每个Windows程序都有各自的壳互不干扰也方便后续维护。回头看整个流程确认架构、装依赖、编译/安装、配字体和运行库、测试程序、处理坑点。每一步都谈不上高深但缺一环都容易让人卡在原地怀疑人生。如果按照上面的顺序走下来在麒麟V10 SP1上装好一个能用的Wine 9.0问题应该不大。另外想多说一句Wine在麒麟系统上的性能表现大部分情况下是够用的但如果跑的程序特别吃硬件比如AutoCAD、大型行业软件卡顿是正常的毕竟翻译层本身就有额外开销。这个时候更务实的思路可能是寻找Linux原生的替代方案或者考虑在虚拟机里跑Windows。Wine适合解决的是轻量、低频、应急的Windows软件需求把它放在正确的位置上它才能发挥最大价值。最后再分享一个小技巧把本文用到的依赖包列表和编译参数存成一个shell脚本放在服务器上下次要给其他同事的麒麟机器装Wine时直接一键执行能省下不少重复操作的功夫。