Wine (简体中文)

From ArchWiki
Revision as of 03:13, 14 July 2012 by Cuihao (Talk | contribs)

Jump to: navigation, search

Wine是类UNIX系统下运行微软Windows程序的兼容层。在Wine中运行的Windows程序,就如同运行原生Linux程序一样,不会有模拟器那样的性能问题,而且界面与桌面环境更加相配。

安装

最新版的Wine软件包收录在:i686平台的[community]仓库、x86_64的[multilib]仓库。

注意: x86_64平台用户需要启用[multilib]软件仓库(默认关闭),否则无法安装wine。
# pacman -S wine

另外,安装wine_gecko以模拟 Internet Explorer 支持(很多网络程序需要):

# pacman -S wine_gecko

平台差异

i686平台提供的Wine是标准的32位wine程序,不能运行64位Windows程序。x86_64平台的Wine则同时兼容32位和64位Windows程序。

一种叫做WoW64的技术,让Wine能够同时运行32位和64位Windows程序,甚至是在同一个WINEARCH为win64的WINEPREFIX中(相当于一个64位Windows环境)。Wine对此支持非常有限,为避免问题,推荐用户放弃64位支持,使用win32的WINEPREFIX。详情参见:Wine (简体中文)#使用_WINEARCH

配置WINEARCH=win32后,x86_64平台的Arch和i686平台的Arch完全相同。

配置

Wine默认将配置文件和安装的Windows程序保存在~/.wine。这样的目录称为一个"Wine prefix"或"Wine bottle"(保留原文,下文称“系统目录”)。每次运行Windows程序(包括内置程序,如winecfg)时,系统目录会自动创建(如果缺失)或更新。系统目录中存放有相当于Windows下C盘(更确切的说应是系统盘)的文件夹。

通过设置WINEPREFIX环境变量,可以更改Wine系统目录的位置。如果希望让不同的Windows程序使用不同的系统环境或配置,这一变量会非常有用。例如,对甲程序使用一个系统目录:

$ env WINEPREFIX=~/.win-a wine 甲程序.exe

乙程序使用另一个:

$ env WINEPREFIX=~/.win-b wine 乙程序.exe

两个程序将使用独立的C盘和注册表配置。

以下命令会建立一个默认的系统目录,且不启动任何Windows程序:

$ env WINEPREFIX=~/.customprefix wineboot -u
注意: Wine的系统目录与“沙箱”一类的虚拟环境截然不同。即,你在系统中有权限访问的东西,任何一个Wine程序都可以访问。Wine不是监狱。

配置Wine的方式通常有:winecfg、Wine控制面板、regegit(注册表编辑器)。

  • winecfg是Wine的图形界面配置程序。控制台下调用
    $ winecfg
    (或指定系统目录:
    $ WINEPREFIX=~/.系统目录 winecfg
    )即可启动
  • control.exe是Windows控制面板的Wine实现,通过
    $ wine control
    命令启动
  • regedit是Wine的注册表编辑器,比较前两者,该工具能配置更多东西。部分常用键值参见:WineHQ's article on Useful Registry Keys

使用 WINEARCH

对于64位用户,如果使用[multilib]仓库里的Wine,默认创建的系统目录是64位环境的。若想使用纯32位环境,修改WINEARCH变量win32为即可:

$ WINEARCH=win32 winecfg 

这样就会生成32位Wine环境。若不设置WINEARCH得到的就是64位环境。

通过WINEPREFIX变量,在不同的系统目录分别创建32位和64位环境:

$ WINEARCH=win32 WINEPREFIX=~/win32 winecfg 
$ WINEPREFIX=~/win64 winecfg

注意,64位环境下也可以运行32位程序。但是,这方面支持还比较有限,目前仍推荐使用32位环境。

注意: 创建系统目录时,64位Wine会把所有已存在目录视作64位系统目录处理,因而不会在其中生成32位环境。要创建32位环境,必须让Wine自己创建WINEPREFIX指定的文件夹,即该文件夹之前必须不存在。

winetricks也接受WINEARCH变量,以安装Steam为例:

env WINEARCH=win32 WINEPREFIX=~/.local/share/wineprefixes/steam winetricks steam

注意:不必手动在wineprefixes文件夹下建立steam文件夹,Wine会自动创建不存在的系统目录。

显卡驱动

使用Wine运行Windows游戏时,可能需要高性能的显卡驱动。Nvidia (简体中文)Amd/ATI用户最好使用闭源驱动。Intel显卡用户也可以选择开源驱动,它已经非常成熟。

要是显卡驱动有问题或者相关配置有误,控制台用Wine运行某些程序时会输出:

Direct rendering is disabled, most likely your OpenGL drivers have not been installed correctly

x86-64用户需要从[multilib]或AUR安装额外的32位库:

  • NVIDIA
    # pacman -S lib32-nvidia-utils
    关于旧版本lib32-nvidia-utils(例如nvidia-96xx驱动),请到这里查找。
  • Intel
    # pacman -S lib32-intel-dri
    运行Wine时需要手动添加
    LIBGL_DRIVERS_PATH=/usr/lib32/xorg/modules/dri
  • AMD/ATI
    # pacman -S lib32-ati-dri
    如果用的是闭源驱动,则需从AUR安装lib32-catalyst-utilsAUR
注意: 安装上述软件包后,可能需要重启才能生效。

声音

Wine程序有可能遇到某些声音问题。首先,确保winecfg中只启用了一种声卡驱动。目前,Wine对Alsa的支持最好。

x86_64平台下使用Alsa的话,需要安装lib32-alsa-lib。如果还要使用PulseAudio,则需安装lib32-libpulse

若使用OSS,需要安装lib32-alsa-oss。仅靠内核驱动是不行的。

安装上述软件包后,若winecfg无法识别声卡(Selected driver: (none)),请尝试registry 通过注册表配置


运行使用某些高级声音系统的游戏,可能还需要安装lib32-openal

其他函数库

某些程序需要解析HTML、XML(使用MSXML库),需要安装lib32-libxml2

播放音频的程序可能依赖lib32-mpg123

对于使用图像处理库的程序,可能依赖lib32-gifliblib32-libpng

x86_64的加密支持需要lib32-gnutls软件包。

字体

如果没有安装微软Truetype字体,Wine程序的字体显示可能会一团糟,参见MS Fonts (简体中文)。如果还是不行,试试winetricks allfonts

上述操作后,杀死wine相关进程再运行winecfg,字体应该变好看了。

如果字体看起来很毛糙,试试用regedit导入下列文本文件:

[HKEY_CURRENT_USER\Software\Wine\X11 Driver]
"ClientSideWithRender"="N"

启动器和菜单

Wine不会为内置程序(如winecfg、winebrowser)创建桌面启动器和菜单项。但手动安装的Windows程序通常会自动创建启动器和菜单项。在Windows下,安装程序后通常会在桌面和开始菜单建立快捷方式,而Wine下会创建遵循freedesktop.org规范的.desktop文件(即启动器,相当于快捷方式)。

小贴士: 如果启动器没有自动创建,或者这些文件丢失了,可以尝试使用winemenubuilder修复。

Ubuntu下,Wine项目以子菜单形式出现在系统菜单。以下步骤将实现这个效果:

创建菜单项

首先,用Wine安装一个Windows程序,以建立基本的菜单。完成后,向其中添加菜单项。桌面右键选择“创建启动器...”(不同桌面环境操作有所差异),设置如下:

类型(Type): 应用程序(Application)
名称(Name): 配置
命令(Command): winecfg
备注(Comment): Wine配置工具
类型: 应用程序
名称: 卸载程序
命令: wine uninstaller
备注: 卸载Wine下的Windows程序
类型: 应用程序
名称: 浏览 C:\
命令: wine winebrowser c:\\
备注: 浏览Wine中虚拟的C盘

现在,桌面上出现了三个启动器,下面将把它们移入菜单。不过首先,我们给这些启动器加上动态图标(由图标主题提供)。方法是,用文本编辑器打开启动器,编辑Icon项目:

配置 启动器:

Icon=wine-winecfg

卸载程序 启动器:

Icon=wine-uninstaller

浏览 C:\ 启动器:

Icon=wine-winefile
小贴士: 多数桌面环境在上述“创建启动器”步骤即可设置图标。以第一个启动器为例,在选择图标窗口中搜索wine-winecfg,选择即可,无需手动编辑。 ——译者注

如果图标无法显示或者你觉得很丑陋,换成其他图标也可以。右键设置启动器,应该有更改图标的地方。很多图标主题,例如GNOME-colors,都提供这些图标。

现在,将启动器移入菜单。把启动器复制到 ~/.local/share/applications/wine/ 目录即可。

诶?图标还没出现在菜单中!还剩下最后一步,创建下列文本文件:

~/.config/menus/applications-merged/wine-utilities.menu
 <!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
 "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
 <Menu>
   <Name>Applications</Name>
   <Menu>
     <Name>wine-wine</Name>
     <Directory>wine-wine.directory</Directory>
     <Include>
 	<Filename>wine-Configuration.desktop</Filename>
     </Include>
     <Include>
 	<Filename>wine-Browse C:\ Drive.desktop</Filename>
     </Include>
     <Include>
 	<Filename>wine-Uninstall Programs.desktop</Filename>
     </Include>
   </Menu>
 </Menu>

再看看菜单,应该万事大吉了。

修复 KDE 4 菜单问题[1]

Wine菜单项有可能错误地出现在“Lost & Found(其他)”,而非Wine子菜单。原因是kde-applications.menu文件缺失MergeDir配置。

编辑/etc/xdg/menus/kde-applications.menu

在文件末尾处,<DefaultMergeDirs/>后添加<MergeDir>applications-merged</MergeDir>。修改后内容大致如下:

        <Include>
                <And>
                        <Category>KDE</Category>
                        <Category>Core</Category>
                </And>
        </Include>
        <DefaultMergeDirs/>
        <MergeDir>applications-merged</MergeDir>
        <MergeFile>applications-kmenuedit.menu</MergeFile>
</Menu>

另一个方法是:

ln -s ~/.config/menus/applications-merged ~/.config/menus/kde-applications-merged

这样的好处是,不会因为KDE升级而重置配置。但该方法只对一个用户有效。

运行 Windows 程序

警告: 千万不要以root身份运行Wine!详情参见本文

运行Windows程序:

$ wine <exe文件>

内置的msiexec程序可以运行MSI安装包:

$ msiexec installername.msi
小贴士: Wine官方网站提供了大量用Wine运行Windows程序方面的信息。一些常用的页面:

Windows程序无法正常运行时,请先看看这些在线资源。

其他技巧

这里介绍一些安装Windows组件的工具。由于这些工具可能严重破坏Wine配置,没有需要时最好不要使用。

安装 Microsoft Office

安装Office套装前,需要先安装某些Windows组件:

$ WINEARCH=win32 WINEPREFIX=/path/to/wineprefix winecfg
# pacman -S winetricks
$ winetricks msxml3 # For MS Office 2007
$ winetricks msxml3 msxml6 # For MS Office 2010
$ wine /path/to/office_cd/setup.exe

更多信息,参见WineHQ上的文章

OpenGL 模式

很多游戏(比如魔兽争霸啦)都支持OpenGL模式,在Wine下可能比默认DirectX模式性能更好。一般添加-opengl启动程序即可,但不同程序可能有所不同

$ wine /path/to/3d_game.exe -opengl

请参考AppDB,了解特定程序的相关信息。

PlayOnLinux

PlayOnLinux是一个图形界面的Windows/DOS程序管理器。它提供了一些帮助配置/运行程序的脚本,能够管理多个不同版本的Wine,甚至能对不同程序使用不同Wine版本。参考AppDB,看看哪个Wine版本对你要运行的程序兼容最好。从AUR安装playonlinuxAUR

PyWinery

PyWinery是一个简单的、图形界面的Wine系统目录管理器,用它可以方便地管理不同系统目录,并从不同系统目录运行程序。AUR中提供了软件包pywineryAUR。当你使用很多系统目录(一个打游戏用、一个编程用……)时,这个程序会非常有用。

Sidenet的Wine配置工具

Sidenet's wine-config

  • 下载最新版本
  • 解压缩
  • 阅读 README
  • 运行
./setup
  • 按提示操作

注意:如这里所述,如果你拥有Windows98的许可证,那么只能够安装DCOM98。

将Wine作为Win16/Win32程序的解释器

可以通知内核把Wine作为Win16/Win32程序的解释器。首先,挂载binfmt_misc文件系统:

# mount -t binfmt_misc none /proc/sys/fs/binfmt_misc

或者,如果你想一直这么做,将以下内容加入/etc/fstab

none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0

然后,告知内核如何解释(运行)Win16/Win32程序:

echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register

如果你想一直这么做,添加上述内容到/etc/rc.local即可。最后的重定向是为了避免切换启动级别时的错误信息:

{ echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register; } 2>/dev/null

现在,直接运行Windows程序试试:

chmod 755 exefile.exe
./exefile.exe

Wine 控制台

有些时候,可能需要运行exe给游戏打补丁,比如给古董游戏添加宽屏支持。这时直接通过Wine运行可能没有用。那么,打开终端,运行一下命令:

$ wineconsole cmd

将进入一个和Windows下cmd一样的命令行环境。在该环境下试试也许就可以了。

Winetricks

使用Winetricks脚本,能够方便地安装许多Windows组件,比如DirectX、msxml(被Office 2007、IE浏览器依赖)。

从软件仓库安装该工具:

# pacman -S winetricks

普通用户身份运行:

$ winetricks

Wine 替代产品

  • Codeweavers —— Codeweaver 出品的 Crossover Office: 针对办公一族

相关链接