有时候免不了要使用Windows应用程序,于是在本教程中,我们将使用Wine教你如何在Linux上顺畅地运行Windows应用程序。
纵然Linux软件品种繁多,但有时候你还是觉得缺少了与Windows版对应的某个应用程序。需要那一个应用程序可能有好多原因,最常见的原因恐怕是Linux不支持某一种文件格式或实际使用的某个应用程序。幸好,有好多办法可以在Linux系统上使用Windows应用程序。
Wine的介绍
Wine是Wine Is Not an Emulator(Wine不是模拟器)的缩写,其实是一个转换层(或程序装入器),能够在Linux及与POSIX兼容的其他类似操作系统上运行Windows应用程序。Wine在Linux上无法模拟Windows应用程序,而是提供了另外的方法来实施DLL(典型的Windows应用程序可以调用这些DLL)和代替Windows NT内核的进程。Wine完全由非微软代码组成。
Wine支持数量众多的应用程序,但并非全部都得到同样的支持。可以访问Wine应用数据库(AppDB, http://appdb.winehq.org),看看你常用的Windows应用程序与Wine之间的兼容性有多好。AppDB由社区维护;你也可以添加自己发现的应用程序。AppDB定义了如下几种级别类型:
白金:如果某应用程序在“即开即用”状态下可以顺畅无阻地安装和运行,它可以被评为白金级。Wine配置文件不需要进行更改。
黄金:应用程序与一些DLL覆盖文件、其他设置或第三方软件可以顺畅无阻地协同运行。
白银:就“平常”使用而言,应用程序可以出色地运行。比如说,游戏在单人玩家模式下运行很好,但在多人玩家模式下不行;Windows Media Player作为插件和独立播放器运行很好,但无法处理数字版权管理(DRM)等。
青铜:应用程序可以运行,但存在一些问题,哪怕是平常使用。比如说,游戏无法正确地重新绘图或者用错误的颜色显示字体,速度比平常慢得多,等等。
垃圾:如果应用程序无法用于原本的用途,就会得到这个评级。如果这样,通用软件缺陷跟踪系统Bugzilla中应该至少有一个软件缺陷报告。应用程序无法安装、无法启动,或者就算能启动,也有好多错误,以至于几乎没法使用。
一. 安装Wine
Wine适应于所有流行的UNIX操作系统,包括Ubuntu、Debian、Red Hat、SUSE、Mandriva、FreeBSD、Solaris和Mac OS X。
在Ubuntu上:
1. 打开Applications(应用程序)>Ubuntu Software Center(Unbuntu软件中心),打开Ubuntu软件中心。
2. 然后点击Edit(编辑)>Software Sources(软件源)。选择Other Software(其他软件)选项卡,点击Add(添加)。然后输入下列apt行:
ppa:ubuntu-wine/ppa
3. 从左边的Get Software(取得软件)部分中选择“PPA for Ubuntu Wine Team”,然后选择Microsoft Windows Compatibility Layer(Development files) – wine1.3-dev。点击Install(安装)。这会安装最新的Wine软件包,包括开发库。
提示:卸载现有的Wine软件包,以确保最大的兼容性。另外,如果想干净安装,你可以删除Wine用户目录,为此可以从主目录中使用命令rm -r -v .wine。
4.在 64 位 Ubuntu 15.10 中编译最新版 32 位 Wine
Wine 发布了最新的1.7.53版本。此版本带来的大量性能提升,包括XAudio,Direct3D代码清理,改善OLE对象嵌入技术,更好的 Web Services DLL的实现,还有其他大量更新。
虽然有一个官方 Wine PPA,但目前只提供1.7.44版本,所以安装最新版本可以从源码编译安装。
下载源码包(直接下载地址在此)并解压 tar -xf wine-1.7.53。然后,安装如下依赖。
sudo apt-get install build-essential gcc-multilib libx11-dev:i386 libfreetype6-dev:i386 libxcursor-dev:i386 libxi-dev:i386 libxshmfence-dev:i386 libxxf86vm-dev:i386 libxrandr-dev:i386 libxinerama-dev:i386 libxcomposite-dev:i386 libglu1-mesa-dev:i386 libosmesa6-dev:i386 libpcap0.8-dev:i386 libdbus-1-dev:i386 libncurses5-dev:i386 libsane-dev:i386 libv4l-dev:i386 libgphoto2-dev:i386 liblcms2-dev:i386 gstreamer0.10-plugins-base:i386 libcapi20-dev:i386 libcups2-dev:i386 libfontconfig1-dev:i386 libgsm1-dev:i386 libtiff5-dev:i386 libmpg123-dev:i386 libopenal-dev:i386 libldap2-dev:i386 libgnutls-dev:i386 libjpeg-dev:i386
现在切换到 wine-1.7.53 解压后的文件夹,并输入:
./configure
make
sudo make install
同样地,你也可以给配置脚本指定 prefix 参数。以普通用户安装 wine:
./configure --prefix=$HOME/usr/bin
make
make install
二. 安装Wine支持包
现在,我们需要安装非开源(但免费)的支持包。这包括微软Core Fonts、Visual C++运行时环境等软件包。
不妨继续深入介绍。
安装Cabextract:
需要该软件包来解压缩微软.cab文件。
$ sudo apt-get install cabextract
下载winetricks脚本:
现在我们需要下载一个很棒的脚本,名为winetricks,它会自动下载和安装必要的支持包。
$ wget http://winetricks.org/winetricks
现在输入下列命令,安装必要的支持包:
$ sh winetricks corefonts Tahoma
提示:你还可以不用任何命令行参数来运行winetricks,那样就能从漂亮的GUI界面选择需要安装的软件包。
三. 安装微软Office
在本例中,我们将安装微软Office 2007。插入微软Office 2007光盘,鼠标右击setup.exe,选择“Open With Windows Program Loader”。这应该会启动微软Office安装程序。以平常的方式来安装,就像你在任何Windows系统上安装那样。
四. 建立库
鉴于已安装好了微软Office 2007,我们要确保Wine已经过配置,可以顺利使用该应用软件。你也看到,Wine以自己的方法实施了各种Windows库,但我们可以直接使用原生的Windows库,确保应用程序有最大的兼容性。Wine随带自己的配置工具:winecfg。除了其他功能外,该工具还让我们可以在内置版本的库与原生版本的库之间切换。
输入命令winecfg,即可打开Wine配置工具。进入到Libraries(库)选项卡,把riched20和usp10添加到“native, builtin”。这表明,Wine应该先试着装入原生的Windows库;要是没有这些库,它会试着装入内置的库。
五. 运行微软Office
微软Office现在应该已出现在Ubuntu程序菜单中。可以先后进入到Application(应用程序)> Programs(程序)>Microsoft Office(微软Office)来访问它。
这个过程确实相当简单。如果你只想临时运行某个Windows程序,假设兼容性很好,那么全都妥当了;但是高级用户想要再深入一步的话,需要继续读下去。[NextPage]
使用Winelib构建Windows应用程序
如果你想不受微软的约束,Wine确实大有帮助。这年头,连第三方的Windows应用开发人员都要受微软的支配。比如说,Windows多媒体应用开发人员处理最简单的任务都要依赖DirectX。DirectX是微软的专属财产,别人谁也无法访问不了源代码。有一天,微软可能会开发DirectX的一些独特功能,由于这些功能没有列入文档,独立软件开发商访问不了这些功能。那样的话,Windows Media Player将是该平台上最好的多媒体播放器,因为其他播放器*依赖DirectX,又无法完全控制它。
欢迎来到Linux社区:在这里,没有什么是不可能的。
不妨再以DirectX为例。Wine以自己的方法实施了DirectX(借助Transgaming Technologies而实现)。Wine实施了常见的多媒体应用编程接口(API),比如Direct3D、DirectInput、DirectSound、DirectShow及其他许多API,实施的办法就是将它们与功能强大的、开放的Linux对应API联系起来,如OpenGL、X11和ALSA/OSS API。因而,将DirectX应用程序移植到Linux时,你可以使用所有这些开放的技术。Winelib可以用作将应用程序从Windows平台取出来放到Linux系统上的第一步。然后,可以逐渐充分利用Linux提供的所有功能。
Winelib能够在Linux上运行和编译Windows应用程序,不需要Windows。Winelib是Wine项目的一部分。它以开源的方式实施了Win32 API,基于Linux和X Window System(如今常称为Xorg)而建。Winelib的代码与Wine完全共享,能够编译控制台应用程序和GUI应用程序。它还能编译DLL(动态链接库)等库文件。Wine通过下列两种方式来处理Windows源代码。
•提供二进制级的兼容性
二进制级的兼容性可通过Wine本身来获得。在此过程中,应用程序的源代码在Windows平台上编译,然后二进制文件被移到Linux系统上,通过Wine来运行。应用程序在二进制兼容的情况下运行时,它可以使用所有现有的.dll文件。这个过程相当简单,但无法释放Wine子系统的全部功能。这与我们使用Wine来运行微软Office 2007的方式一模一样。
•提供源码级的兼容性
在该方法中,源代码文件被移到Linux系统上,然后使用GCC对照Winelib库来进行编译。这样一来,应用程序还能够与UNIX API调用兼容,以便充分利用UNIX的全部功能。Winelib随带一款名为winemaker的工具,该工具可以通过VC++项目创建基于GNU标准autoconf的makefile文件。Winemaker是一个Perl脚本,负责处理转换源代码、使源代码专门用于UNIX、清空用例问题及其他众多方面的所有繁重任务。