Wine (简体中文)
Wine 是类UNIX系统下运行微软Windows程序的"兼容层"。在Wine中运行的Windows程序,就如同运行原生Linux程序一样,不会有模拟器那样的性能问题。
安装
通过 pacman 从官方仓库安装软件包 wine 即可获取 Wine 模拟器。 对于64位系统,需要启用 Multilib 仓库。
另外,您可能需要安装 wine_gecko 和 wine-mono 软件包。它们分别用于运行依赖于 Internet Explorer 和 .NET 的程序。不过,也可以随后通过 Wine 在需要时下载安装这些组件。但如果提前下载安装,您就可以离线使用它们,而且 Wine 不必为了每一个 WINEPREFIX 都单独下载。
平台差异
默认的Wine是32位的程序,也是i686的Arch软件包。所以它不能运行64位的Windows程序(反正是罕见的)。
然而,x86_64的Wine软件包目前以 --enable-win64
方式编译。这个参数激活了WoW64的Wine版本。
- 在Windows中,这个复杂的子系统允许用户同时使用32位和64位的Windows程序,甚至是在同一目录。
- 在Wine中,用户将必须建立单独分开的目录/前缀。这项Wine功能仍是试验阶段,并建议用户使用一个win32
WINEPREFIX
。浏览Wine64以获取有关这个的详细信息。
总结一下,配置WINEARCH=win32
后,x86_64平台的Arch和i686平台的Arch完全相同。
配置
Wine默认将配置文件和安装的Windows程序保存在~/.wine
。这样的目录称为一个"Wine prefix"或"Wine bottle"(保留原文,下文称“系统目录”)。每次运行Windows程序(包括内置程序,如winecfg
)时,系统目录会自动创建(如果缺失)或更新。系统目录中存放有相当于Windows下 C:\
C盘(更确切的说应是系统盘)的文件夹。
通过设置WINEPREFIX
环境变量,可以更改Wine系统目录的位置。如果希望让不同的Windows程序使用不同的系统环境或配置,这一变量会非常有用。
例如,如果您使用
$ env WINEPREFIX=~/.win-a wine-A程序.exe
参数来运行一个程序。另一个使用
$ env WINEPREFIX=~/.win-b wine-B程序.exe
参数,这两个程序将使用独立的C盘和注册表配置。
以下命令会建立一个默认的系统目录,且不启动任何Windows程序:
$ env WINEPREFIX=~/.customprefix wineboot -u
配置Wine的方式通常有:
- 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
winetricks也接受WINEPREFIX
变量,以安装Steam为例:
env WINEARCH=win32 WINEPREFIX=~/.local/share/wineprefixes/steam winetricks steam
显卡驱动
使用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:lib32-nvidia-libgl 至于老显卡,请到 AUR 搜索 lib32-nvidia-utils (如-173xx)。
- NVIDIA (开源驱动):lib32-nouveau-dri[broken link: replaced by lib32-mesa]。
- Intel:lib32-intel-dri[broken link: replaced by lib32-mesa]。运行Wine时需要手动添加
LIBGL_DRIVERS_PATH=/usr/lib32/xorg/modules/dri
- AMD/ATI:lib32-catalyst-utils。
- AMD/ATI (开源驱动): lib32-ati-dri[broken link: replaced by lib32-mesa]。
声音
Wine程序有可能遇到某些声音问题。首先,确保winecfg
中只启用了一种声卡驱动。目前,Wine对Alsa的支持最好。
x86_64平台下使用Alsa的话,需要安装lib32-alsa-lib。如果还要使用PulseAudio,则需安装lib32-libpulse。
若使用OSS,需要安装lib32-alsa-oss。仅靠内核驱动是不行的。
安装上述软件包后,若winecfg
仍无法识别声卡(Selected driver: (none)),请尝试registry 通过注册表配置。
运行使用某些高级声音系统的游戏,可能还需要安装lib32-openal。
其他函数库
某些程序(如 Office 2003)需要解析HTML、XML(使用MSXML库),需要安装lib32-libxml2。
播放音频的程序可能依赖lib32-mpg123。
对于使用图像处理库的程序,可能依赖lib32-giflib和lib32-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下,安装程序(如setup.exe
)通常会在桌面和开始菜单建立快捷方式,而Wine下会创建遵循freedesktop.org规范的.desktop文件(即启动器,相当于快捷方式)。
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
如果图标无法显示或者你觉得很丑陋,换成其他图标也可以。右键设置启动器,应该有更改图标的地方。很多图标主题,例如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:\.desktop</Filename> </Include> <Include> <Filename>wine-Uninstall Programs.desktop</Filename> </Include> </Menu> </Menu>
再看看菜单,应该万事大吉了。
Gnome3 中清理 Wine 菜单启动项
系统全局的菜单启动器安装在 /usr/share/applications/
,清除相应程序的“.desktop”文件即可从整个系统删除该启动器。
如果这样还是无法解决问题,那么很可能 Wine 的启动器存放在用户级别的 ~/.local/share/applications/wine/Programs/
目录中。删除相应的“.desktop”文件即可清理对应启动项。删除整个 Programs 文件夹将清理所有 Wine 程序的启动项。
修复 KDE 4 菜单问题
Wine菜单项有可能错误地出现在"Lost & Found(其他)"
,而非Wine子菜单。原因是kde-applications.menu文件缺失MergeDir
配置。
编辑/etc/xdg/menus/kde-applications.menu
。
在文件末尾处,<DefaultMergeDirs/>
后添加<MergeDir>applications-merged</MergeDir>
。修改后内容大致如下:
<Menu> <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 程序
运行Windows程序:
$ wine <exe文件>
内置的msiexec程序可以运行MSI安装包:
$ msiexec installername.msi
技巧
这里介绍一些安装Windows组件的工具。由于这些工具可能严重破坏Wine配置,没有需要时最好不要使用。
安装 Microsoft Office
更新(2013年4月9日):对于 Wine 1.5.27,下面所述的步骤已经不必要了。先安装 winbind(包含在 samba 中),然后执行:
$ export WINEPREFIX="<用户家目录中的某一可写目录>" $ export WINEARCH="win32" $ wine /到/office安装盘/的路径/setup.exe
可以把上述 export 语句加入 bashrc 文件。
安装结束后,打开 Word 或 Excel,联网激活。完成后,关闭程序,执行 winecfg,在“函数库”选项卡中把 riched20 设置为“Native (Windows)”。这样 PowerPoint 就可以正常工作。 (使用 Office Home/Student 2010 和 wine 1.5.27 测试。在线激活有效)
安装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,了解特定程序的相关信息。
将 Wine 作为 Win16/Win32 程序的解释器
可以通知内核把Wine作为Win16/Win32程序的解释器。
Configuration
通知内核识别和执行 Win16/Win32 程序的方式:
echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register
To make the setting permanent, create a configuration file in /etc/tmpfiles.d
with the following contents:
测试效果,若一切正常,可以使该设置永久生效。在 /etc/tmpfiles.d
目录创建新的配置文件,内容为:
/etc/tmpfiles.d/enable-doswin-exe.conf
w /proc/sys/fs/binfmt_misc/register - - - - :DOSWin:M::MZ::/usr/bin/wine:
说明一下,和 initscripts 不同,systemd 会自动挂载 /proc/sys/fs/binfmt_misc
,所以只需要通过临时文件机制向内核写入配置即可。
更多信息,参见 Systemd (简体中文)#临时文件。
效果测试
现在,直接运行Windows程序试试:
chmod 755 exefile.exe ./exefile.exe
Wine 控制台
有些时候,可能需要运行.exe
给游戏打补丁,比如给古董游戏添加宽屏支持。这时直接通过Wine运行可能没有用。那么,打开终端,运行一下命令:
$ wineconsole cmd
将进入一个和Windows下cmd一样的命令行环境。在该环境下试试也许就可以了。
Winetricks
使用Winetricks快速脚本,能够方便地安装许多Windows组件,包括DirectX、msxml(被Office 2007、IE浏览器依赖)visual运行库还有其他更多的。
您可以使用pacman或者从AUR上获取winetricks-svn软件包来安装该工具:
运行:
$ winetricks
第三方工具
这些程序有其自己的主页和支持论坛。
CrossOver
PlayOnLinux
PlayOnLinux是一个图形界面的Windows/DOS程序管理器。它提供了一些帮助配置/运行程序的脚本,能够管理多个不同版本的Wine,甚至能对不同程序使用不同Wine版本。参考AppDB,看看哪个Wine版本对你要运行的程序兼容最好。从AUR安装playonlinux。
PyWinery
PyWinery是一个简单的、图形界面的Wine系统目录管理器,用它可以方便地管理不同系统目录,并从不同系统目录运行程序。同时可以开启winetricks在同一系统目录,打开系统目录所在文件夹, winecfg
, 软件卸载程序和wineDOS。AUR中提供了软件包pywinery。当你使用很多系统目录(一个打游戏用、一个编程用……)时,这个程序会非常有用。
它在默认情况下使用winetricks打开.exe
文件,所以你可以选择你有的任何Wine的配置。
Q4wine
Q4Wine 是一个图形界面的系统目录(wine-prefix)管理器。它的特色是可以把 QT 主题导入 Wine 配置,使两者完美整合。q4wine 软件包在 [multilib] 仓库中提供。
相关链接
- Wine官方网站
- Wine程序数据库
- 加速Wine,显卡及OpenGL高级配置
- FileInfo —— Find Win32 PE/COFF headers in EXE/DLL/OCX files under linux/unix environment