第 13 章。WINE

13.1。概述

WINE,代表“Wine Is Not an Emulator”,从技术上来说是一个软件翻译层。它允许在 FreeBSD(和其他)系统上安装和运行为 Windows® 编写的软件。

它的工作原理是拦截系统调用,或软件向操作系统的请求,并将它们从 Windows® 调用翻译成 FreeBSD 能够理解的调用。它还会根据需要将任何响应翻译成 Windows® 软件期望的格式。因此,在某种程度上,它模拟了 Windows® 环境,因为它提供了许多 Windows® 应用程序所期望的资源。

但是,它不是传统意义上的模拟器。许多这些解决方案通过使用软件进程代替硬件来构建一个完全独立的计算机。虚拟化(例如由 emulators/qemu 端口提供的虚拟化)以这种方式工作。这种方法的优势之一是能够将要虚拟化的操作系统的完整版本安装到模拟器中。这意味着该环境在应用程序看来与真实机器没有什么区别,并且很有可能所有东西都能在它上面正常运行。这种方法的缺点是,充当硬件的软件本质上比实际硬件慢。在软件中构建的计算机(称为客户机)需要来自真实机器(主机)的资源,并且在运行期间会一直占用这些资源。

另一方面,WINE 项目对系统资源的占用要轻得多。它会动态地翻译系统调用,因此虽然它很难像真正的 Windows® 计算机一样快,但它可以非常接近。另一方面,WINE 试图跟上一个不断变化的目标,因为它需要支持所有不同的系统调用和其他功能。因此,有些应用程序在 WINE 上可能无法按预期运行,根本无法运行,甚至根本无法安装。

归根结底,WINE 提供了另一种尝试在 FreeBSD 上运行特定 Windows® 软件程序的方法。它始终可以作为首选选项,如果成功,它可以提供良好的体验,而不会不必要地消耗主机 FreeBSD 系统的资源。

本章将描述

  • 如何在 FreeBSD 系统上安装 WINE。

  • WINE 的工作原理,以及它与其他选择(如虚拟化)的不同之处。

  • 如何微调 WINE 以满足某些应用程序的特定需求。

  • 如何在 WINE 中安装 GUI 辅助工具。

  • 在 FreeBSD 上使用 WINE 的常见提示和解决方案。

  • 在多用户环境中,考虑在 FreeBSD 上使用 WINE。

在阅读本章之前,了解以下内容将很有帮助

13.2。WINE 概述和概念

WINE 是一个复杂的系统,因此在 FreeBSD 系统上运行它之前,了解它的作用和工作原理是值得的。

13.2.1。什么是 WINE?

正如本章的 概述 中所述,WINE 是一个兼容性层,允许 Windows® 应用程序在其他操作系统上运行。理论上,这意味着这些程序应该可以在 FreeBSD、macOS 和 Android 等系统上运行。

当 WINE 运行 Windows® 可执行文件时,会发生两件事

  • 首先,WINE 实现了一个模拟各种版本的 Windows® 环境的环境。例如,如果应用程序请求访问 RAM 等资源,WINE 拥有一个内存接口,该接口在应用程序看来与 Windows® 一样。

  • 然后,一旦该应用程序使用该接口,WINE 就会接收内存空间的传入请求并将其转换为与主机系统兼容的格式。同样,当应用程序检索该数据时,WINE 会帮助从主机系统获取该数据并将其传递回 Windows® 应用程序。

13.2.2。WINE 和 FreeBSD 系统

在 FreeBSD 系统上安装 WINE 将涉及几个不同的组件

  • FreeBSD 应用程序用于执行任务,例如运行 Windows® 可执行文件、配置 WINE 子系统或编译支持 WINE 的程序。

  • 大量的库,这些库实现了 Windows® 的核心功能(例如 /lib/wine/api-ms-core-memory-l1-1-1.dll.so,它是前面提到的内存接口的一部分)。

  • 许多 Windows® 可执行文件,它们是(或模拟)常见实用程序(例如 /lib/wine/notepad.exe.so,它提供了标准的 Windows® 文本编辑器)。

  • 其他 Windows® 资产,特别是字体(如 Tahoma 字体,存储在安装根目录的 share/wine/fonts/tahoma.ttf 中)。

13.2.3。WINE 中的图形模式与文本模式/终端程序

作为终端实用程序是“一等公民”的操作系统,很自然地假设 WINE 将包含对文本模式程序的广泛支持。然而,Windows® 的大多数应用程序,尤其是最受欢迎的应用程序,都是为图形用户界面 (GUI) 而设计的。因此,WINE 的实用程序默认情况下设计为启动图形程序。

但是,有三种方法可以运行这些所谓的控制台用户界面 (CUI) 程序

  • Bare Streams 方法会将输出直接显示到标准输出。

  • wineconsole 实用程序可以与usercurses 后端一起使用,以利用 WINE 系统为 CUI 应用程序提供的一些增强功能。

这些方法在 WINE Wiki 上有更详细的描述。

13.2.4。WINE 派生项目

WINE 本身是一个成熟的开源项目,因此它被用作更复杂解决方案的基础也就不足为奇了。

13.2.4.1。商业 WINE 实现

许多公司已经将 WINE 纳入自己的专有产品(WINE 的 LGPL 许可证允许这样做)。以下是最著名的两个例子:

  • Codeweavers CrossOver

该解决方案提供了一种简化的“一键式”安装 WINE 的方法,其中包含额外的增强功能和优化(尽管该公司将其中许多增强功能贡献回 WINE 项目的上游)。Codeweavers 的一个重点是使最受欢迎的应用程序能够顺利安装和运行。

虽然该公司曾经发布了其 CrossOver 解决方案的原生 FreeBSD 版本,但似乎早已被放弃。虽然一些资源(例如 专门论坛)仍然存在,但它们在一段时间内也未见任何活动。

  • Steam Proton

游戏公司 Steam 也使用 WINE 使 Windows® 游戏能够在其他系统上安装和运行。它的主要目标是基于 Linux® 的系统,尽管也对 macOS 提供了一些支持。

虽然 Steam 没有提供原生 FreeBSD 客户端,但可以使用 FreeBSD 的 Linux® 兼容性层使用 Linux® 客户端。

13.2.4.2。WINE 辅助程序

除了专有产品外,其他项目还发布了旨在与标准的开源版本 WINE 协同工作的应用程序。这些解决方案的目标范围从简化安装到提供轻松安装流行软件的方法。

这些解决方案在后面关于 GUI 前端 的部分中有更详细的介绍,包括以下内容:

  • winetricks

  • Mizutamari

13.2.5。WINE 的替代方案

对于 FreeBSD 用户,WINE 的一些替代方案如下:

  • 双启动:一个直接的选择是在该操作系统上原生运行所需的 Windows® 应用程序。当然,这意味着退出 FreeBSD 以启动 Windows®,因此如果需要同时访问两个系统中的程序,则此方法不可行。

  • 虚拟机:正如本章前面提到的,虚拟机 (VM) 是模拟完整硬件集的软件进程,可以在其上安装和运行其他操作系统(包括 Windows®)。现代工具使 VM 变得易于创建和管理,但这种方法也有成本。主机系统的大量资源必须分配给每个 VM,并且这些资源不能在 VM 运行时被主机系统回收。一些 VM 管理器的例子包括开源解决方案 qemu、bhyve 和 VirtualBox。有关更多详细信息,请参阅关于 虚拟化 的章节。

  • 远程访问:与许多其他类 UNIX® 系统一样,FreeBSD 可以运行各种应用程序,使用户能够远程访问 Windows® 计算机并使用其程序或数据。除了 xrdp 等连接到标准 Windows® 远程桌面协议的客户端外,还可以使用其他开源标准,例如 vnc(前提是另一端存在兼容的服务器)。

13.3。在 FreeBSD 上安装 WINE

可以通过 pkg 工具或编译端口来安装 WINE。

13.3.1。WINE 先决条件

在安装 WINE 本身之前,安装以下先决条件将很有用。

  • GUI

大多数 Windows® 程序期望有一个图形用户界面可用。如果在没有 GUI 的情况下安装 WINE,它的依赖项将包括 Wayland 复合管理器,因此 GUI 将与 WINE 一起安装。但是,在安装 WINE 之前,将选择的 GUI 安装、配置并正常工作将很有用。

  • wine-gecko

Windows® 操作系统在一段时间内一直预安装了一个默认的 Web 浏览器:Internet Explorer。因此,一些应用程序在运行时假设会始终存在能够显示网页的内容。为了提供此功能,WINE 层包含一个使用 Mozilla 项目的 Gecko 引擎的 Web 浏览器组件。当 WINE 首次启动时,它会提供下载并安装该组件,并且用户可能希望这样做(这些将在后面的章节中介绍)。但是,他们也可以在安装 WINE 之前或与 WINE 本身的安装同时安装它。

使用以下命令安装此软件包:

# pkg install wine-gecko

或者,使用以下命令编译端口:

# cd /usr/ports/emulator/wine-gecko
# make install
  • wine-mono

此端口安装 MONO 框架,它是微软 .NET 的开源实现。将它与 WINE 安装一起包含在内,将大大提高在系统上安装和运行用 .NET 编写的任何应用程序的可能性。

要安装软件包

# pkg install wine-mono

要从 ports 集合编译

# cd /usr/ports/emulator/wine-mono
# make install

13.3.2. 通过 FreeBSD 软件包库安装 WINE

在满足先决条件的情况下,使用以下命令通过软件包安装 WINE

# pkg install wine

或者使用以下命令从源代码编译 WINE 子系统

# cd /usr/ports/emulator/wine
# make install

13.3.3. WINE 安装中 32 位与 64 位的注意事项

与大多数软件一样,Windows® 应用程序也从旧的 32 位架构升级到 64 位。虽然现代操作系统有时可以继续运行旧的 32 位程序,但大多数最新软件都是为 64 位操作系统编写的。FreeBSD 也不例外,它从 5.x 系列开始就支持 64 位。

但是,使用不再默认支持的旧软件是模拟器的常见用途,用户通常会转向 WINE 来玩游戏和使用在现代硬件上无法正常运行的其他程序。幸运的是,FreeBSD 可以支持所有三种场景

  • 在现代的 64 位机器上,想要运行 64 位 Windows® 软件,只需安装上面各节中提到的端口。ports 系统将自动安装 64 位版本。

  • 或者,用户可能拥有旧的 32 位机器,不想使用其原始的、现在不再受支持的软件运行。他们可以安装 FreeBSD 的 32 位 (i386) 版本,然后安装上面各节中的端口。

13.4. 在 FreeBSD 上运行第一个 WINE 程序

现在 WINE 已经安装完毕,下一步是尝试运行一个简单的程序来试用它。一个简单的方法是下载一个自包含的应用程序,即只需解压并运行,无需任何复杂的安装过程。

所谓的应用程序“便携版”是进行此测试的不错选择,运行仅包含单个可执行文件的程序也是如此。

13.4.1. 从命令行运行程序

从终端启动 Windows 程序有两种不同的方法。第一种也是最直接的方法是导航到包含程序可执行文件 (.EXE) 的目录,并发出以下命令

% wine program.exe

对于需要命令行参数的应用程序,像往常一样在可执行文件后面添加参数

% wine program2.exe -file file.txt

或者,提供可执行文件的完整路径,以便在脚本中使用它,例如

% wine /home/user/bin/program.exe

13.4.2. 从 GUI 运行程序

安装后,图形外壳应更新为 Windows 可执行文件 (.EXE) 文件的新关联。现在可以使用文件管理器浏览系统,并以与其他文件和程序相同的方式启动 Windows 应用程序(单击一次或两次,具体取决于桌面的设置)。

在大多数桌面上,通过右键单击文件并查看上下文菜单中是否有打开文件的条目,确保此关联正确。其中一个选项(希望是默认选项)将是使用 **Wine Windows Program Loader**,如以下屏幕截图所示

wine run np++ 1

如果程序没有按预期运行,请尝试从命令行启动它并查看终端中显示的任何消息以进行故障排除。

如果在安装后,WINE 不是 .EXE 文件的默认应用程序,请检查当前桌面环境、图形外壳或文件管理器中此扩展名的 MIME 关联。

13.5. 配置 WINE 安装

在了解了 WINE 的概念及其工作原理后,下一步是有效地在 FreeBSD 上使用它,即熟悉其配置。以下各节将介绍 *WINE 前缀* 的关键概念,并说明如何使用它来控制通过 WINE 运行的应用程序的行为。

13.5.1. WINE 前缀

WINE *前缀* 是一个目录,通常位于 $HOME/.wine 的默认位置之下,但也可以位于其他位置。前缀是一组用于配置和运行给定应用程序所需的 Windows® 环境的配置和支持文件。默认情况下,一个全新的 WINE 安装在首次由用户启动时将创建以下结构

  • .update-timestamp: 包含 file /usr/share/wine/wine.inf 的最后修改日期。WINE 使用它来确定前缀是否已过期,并在需要时自动更新它。

  • dosdevices/: 包含有关将 Windows® 资源映射到主机 FreeBSD 系统上的资源的信息。例如,在新的 WINE 安装之后,这应该至少包含两个条目,它们允许使用 Windows® 样式的驱动器号访问 FreeBSD 文件系统

    • c:@: 一个指向下面描述的 drive_c 的链接。

    • z:@: 一个指向系统根目录的链接。

  • drive_c/: 模拟 Windows® 系统的主 (即 C:) 驱动器。它包含一个目录结构和相关文件,这些文件与标准 Windows® 系统的目录结构和相关文件相对应。一个新的 WINE 前缀将包含 Windows® 10 目录,例如 *Users* 和 *Windows*,其中包含操作系统本身。此外,安装在某个前缀中的应用程序将位于 *Program Files* 或 *Program Files (x86)* 中,具体取决于它们的体系结构。

  • system.reg: 此注册表文件包含有关 Windows® 安装的信息,在本例中,Windows® 安装是 drive_c 中的环境。

  • user.reg: 此注册表文件包含当前用户的个人配置,这些配置可以通过各种软件或通过使用注册表编辑器进行。

  • userdef.reg: 此注册表文件是为新创建的用户设置的一组默认配置。

13.5.2. 创建和使用 WINE 前缀

虽然 WINE 会在用户的 $HOME/.wine/ 中创建一个默认前缀,但可以设置多个前缀。这样做有几个原因

  • 最常见的原因是根据软件的兼容性需求,模拟不同的 Windows® 版本。

  • 此外,经常会遇到在默认环境中无法正常运行的软件,并且需要特殊配置。将这些软件隔离到它们自己的自定义前缀中,这样更改就不会影响其他应用程序,这一点非常有用。

  • 同样,将默认前缀或“主”前缀复制到单独的“测试”前缀中,以便评估应用程序的兼容性,可以减少损坏的可能性。

从终端创建前缀需要使用以下命令

% WINEPREFIX="/home/username/.wine-new" winecfg

这将运行 winecfg 程序,可以使用它来配置 wine 前缀(有关此程序的更多信息,请参见后面的部分)。但通过为 WINEPREFIX 环境变量提供目录路径值,如果该位置不存在前缀,则会在该位置创建一个新前缀。

为 wine 程序提供相同的变量,也会导致所选程序使用指定的前缀运行

% WINEPREFIX="/home/username/.wine-new" wine program.exe

13.5.3. 使用 winecfg 配置 WINE 前缀

如上所述,WINE 包含一个名为 winecfg 的工具,用于从 GUI 中配置前缀。它包含各种功能,这些功能将在以下各节中详细介绍。当从某个前缀中运行 winecfg,或在 WINEPREFIX 变量中提供某个前缀的位置时,它将启用对所选前缀的配置,如以下各节所述。

在 *Applications* 选项卡上进行的选择将影响在 *Libraries* 和 *Graphics* 选项卡上进行的更改的范围,这些更改将仅限于所选应用程序。有关更多详细信息,请参阅 WINE Wiki 中的 Using Winecfg 部分。

13.5.3.1. 应用程序

wine config 1

*Applications* 包含一些控件,这些控件使程序可以与特定版本的 Windows® 关联。在首次启动时,*Application settings* 部分将包含一个条目:*Default Settings*。这对应于前缀的所有默认配置,这些配置(如已禁用的 *Remove application* 按钮所示)无法删除。

但可以使用以下步骤添加其他应用程序

  1. 单击 *Add application* 按钮。

  2. 使用提供的对话框选择所需的程序可执行文件。

  3. 选择要与所选程序一起使用的 Windows® 版本。

13.5.3.2. 库

wine config 2

WINE 在其发行版中提供了一组开源库文件,这些文件提供与其 Windows® 对应文件相同的函数。但是,如本章前面所述,WINE 项目始终试图跟上这些库的新更新。因此,WINE 附带的版本可能缺少最新 Windows® 程序期望的功能。

但是,winecfg 使得能够为内置库指定覆盖,特别是如果与主机 FreeBSD 安装在同一台机器上存在某个版本的 Windows®。对于要覆盖的每个库,请执行以下操作

  1. 打开 *New override for library* 下拉列表,并选择要替换的库。

  2. 单击 *Add* 按钮。

  3. 新的覆盖将在 *Existing overrides* 列表中显示,请注意括号中的 *native, builtin* 标识。

  4. 单击选择库。

  5. 单击 *Edit* 按钮。

  6. 使用提供的对话框选择要替换内置库的相应库。

请务必选择真正与内置库相对应的文件,否则可能会出现意外行为。

13.5.3.3. 图形

wine config 3

*Graphics* 选项卡提供了一些选项,使通过 WINE 运行的程序窗口能够与 FreeBSD 顺利运行

  • 当窗口全屏时自动捕获鼠标。

  • 允许 FreeBSD 窗口管理器为通过 WINE 运行的程序装饰窗口,例如它们的标题栏。

  • 允许窗口管理器控制通过 WINE 运行的程序的窗口,例如对其运行调整大小功能。

  • 创建一个模拟的虚拟桌面,所有 WINE 程序都将在其中运行。如果选中此项,可以使用“桌面大小”输入框指定虚拟桌面的大小。

  • 设置通过 WINE 运行的程序的屏幕分辨率。

13.5.3.4. 桌面集成

wine config 4

此选项卡允许配置以下项目

  • 通过 WINE 运行的程序将使用的主题和相关的视觉设置。

  • WINE 子系统是否应该在内部管理 MIME 类型(用于确定哪个应用程序打开特定的文件类型)。

  • 主机 FreeBSD 系统中目录到 Windows® 环境中有用文件夹的映射。要更改现有关联,请选择所需项目并单击“浏览”,然后使用提供的对话框选择目录。

13.5.3.5. 驱动器

wine config 5

“驱动器”选项卡允许将主机 FreeBSD 系统中的目录链接到 Windows® 环境中的驱动器号。此选项卡中的默认值应该看起来很熟悉,因为它们显示了当前 WINE 前缀中 dosdevices/ 的内容。通过此对话框进行的更改将反映在 dosdevices 中,并且在该目录中创建的格式正确的链接将显示在此选项卡中。

要创建新条目(例如,用于 CD-ROM(安装在 /mnt/cdrom 上)),请执行以下步骤

  1. 单击“添加”按钮。

  2. 在提供的对话框中,选择一个空闲的驱动器号。

  3. 单击“确定”。

  4. 通过键入资源的路径或单击“浏览”并使用提供的对话框选择资源路径来填充“路径”输入框。

默认情况下,WINE 将自动检测已链接的资源类型,但可以手动覆盖。有关高级选项的更多详细信息,请参阅 WINE Wiki 中的这一部分

13.5.3.6. 音频

wine config 6

此选项卡包含一些可配置选项,用于将 Windows® 程序的声音路由到本机 FreeBSD 声音系统,包括

  • 驱动程序选择

  • 默认设备选择

  • 声音测试

13.5.3.7. 关于

wine config 7

最后一个选项卡包含有关 WINE 项目的信息,包括指向网站的链接。它还允许输入(完全可选的)用户信息,尽管这不会像在其他操作系统中那样发送到任何地方。

13.6. WINE 管理 GUI

虽然 WINE 的基本安装附带了 GUI 配置工具 winecfg,但它的主要用途是:严格配置现有的 WINE 前缀。但是,还有一些更高级的应用程序可以帮助初始安装应用程序以及优化其 WINE 环境。以下部分包含一些最流行的应用程序。

13.6.1. Winetricks

winetricks 工具是一个跨平台的通用 WINE 辅助程序。它不是由 WINE 项目本身开发的,而是由一组贡献者在 GitHub 上维护的。它包含一些自动化的“配方”,用于使常用应用程序在 WINE 上正常运行,方法是优化设置以及自动获取一些 DLL 库。

13.6.1.1. 安装 winetricks

要在使用二进制包的 FreeBSD 上安装 winetricks,请使用以下命令(注意 winetricks 需要 i386-wine 或 i386-wine-devel 包,因此不会与其他依赖项一起自动安装)

# pkg install i386-wine winetricks

要从源代码编译它,请在终端中发出以下命令

# cd /usr/ports/emulators/i386-wine
# make install
# cd /usr/ports/emulators/winetricks
# make install

如果需要手动安装,请参阅 Github 帐户以获取说明。

13.6.1.2. 使用 winetricks

使用以下命令运行 winetricks

% winetricks

注意:这应该在 32 位前缀中运行 winetricks。启动 winetricks 会显示一个窗口,其中包含许多选择,如下所示

winetricks run 1

选择“安装应用程序”、“安装基准”或“安装游戏”中的任何一个,都会显示一个包含支持选项的列表,例如下面针对应用程序的列表

winetricks run 2

选择一个或多个项目并单击“确定”将启动它们的安装过程。最初,一些看起来像错误的消息可能会出现,但实际上它们是信息性警报,因为 winetricks 配置 WINE 环境以解决应用程序的已知问题

winetricks app install 1

绕过这些问题后,将运行应用程序的实际安装程序

winetricks app install 2

安装完成后,新的 Windows 应用程序应该可以从桌面环境的标准菜单中使用(在下面 LXQT 桌面环境的屏幕截图中显示)

winetricks menu 1

要删除应用程序,请再次运行 winetricks,然后选择“运行卸载程序”。

winetricks uninstall 1

将出现一个 Windows® 风格的对话框,其中列出了已安装的程序和组件。选择要删除的应用程序,然后单击“修改/删除”按钮。

winetricks uninstall 2

这将运行应用程序的内置安装程序,该安装程序也应该具有卸载的选项。

winetricks uninstall 3

13.6.2. Mizutamari

Mizutamari 是一个类似于 winetricks 的应用程序,尽管它受 Linux 上的 Lutris 游戏系统的启发。但虽然它专注于游戏,但也有非游戏应用程序可通过 Mizutamari 安装。

13.6.2.1. 安装 Mizutamari

要安装 Mizutamari 的二进制包,请发出以下命令

# pkg install mizuma

Mizutamari 在 FreeBSD Ports 系统中可用。但是,不要在 Ports 或二进制包的“模拟器”部分中查找它,而是在“游戏”部分中查找它。

# cd /usr/ports/games/mizuma
# make install

13.6.2.2. 使用 Mizutamari

Mizutamari 的使用与 winetricks 非常相似。首次使用它时,请从命令行(或桌面环境运行程序小程序)中使用以下命令启动它

% Mizuma

这应该会显示一个友好的欢迎消息。单击“确定”继续。

homura launch 1

该程序还将提供在兼容环境的应用程序菜单中放置链接的选项

homura run 2

根据 FreeBSD 计算机的设置,Mizutamari 可能会显示一条消息,敦促安装本机图形驱动程序。

homura run 3

然后应该会出现应用程序的窗口,它相当于一个包含所有选项的“主菜单”。许多项目与 winetricks 相同,但 Mizutamari 提供了一些额外的有用选项,例如打开其数据文件夹(“打开 Mizutamari 文件夹”)或运行指定程序(“在前缀中运行可执行文件”)。

homura install 1

要选择要安装的 Mizutamari 支持的应用程序之一,请选择“安装”,然后单击“确定”。这将显示一个包含 Homura 可以自动安装的应用程序列表。选择一个应用程序,然后单击“确定”开始该过程。

homura install 2

作为第一步,Mizutamari 将下载所选程序。在支持的桌面环境中可能会出现通知。

homura install 3

该程序还将为该应用程序创建一个新的前缀。将显示带有此消息的标准 WINE 对话框。

homura install 4

接下来,Mizutamari 将安装所选程序的任何先决条件。这可能涉及下载和解压缩大量文件,其详细信息将显示在对话框中。

homura install 5

下载的软件包会根据需要自动打开和运行。

homura install 6

安装可能以简单的桌面通知或终端消息结束,具体取决于 Mizutamari 的启动方式。但在任何情况下,Mizutamari 应该返回主屏幕。要确认安装是否成功,请选择“启动程序”,然后单击“确定”。

homura install 7

这将显示已安装应用程序的列表。

homura install 8

要运行新程序,请从列表中选择它,然后单击“确定”。要卸载应用程序,请从主屏幕选择“卸载”,这将显示一个类似的列表。选择要删除的程序,然后单击“确定”。

homura uninstall 1

13.6.3. 运行多个管理 GUI

值得注意的是,上述解决方案不是相互排斥的。同时安装两者是完全可以接受的,甚至是有利的,因为它们支持不同的程序集。

但是,明智的做法是确保它们不访问任何相同的 WINE 前缀。这些解决方案中的每一个都应用了变通方法并对注册表进行了更改,这些更改基于已知的变通方法以解决现有的 WINE 问题,以便使给定的应用程序平稳运行。允许 winetricks 和 Homura 访问相同的前缀可能会导致其中一些被覆盖,导致一些或所有应用程序无法按预期工作。

13.7. 多用户 FreeBSD 安装中的 WINE

13.7.1. 使用公共 WINE 前缀的问题

与大多数类 UNIX® 操作系统一样,FreeBSD 设计为允许多个用户同时登录并工作。另一方面,Windows® 是多用户系统,因为可以在一个系统上设置多个用户帐户。但预期的是,在任何给定时间只有一个用户会使用物理机器(台式机或笔记本电脑)。

最近的消费者版 Windows® 采取了一些措施来改进多用户场景中的操作系统。但它仍然主要围绕单用户体验构建。此外,WINE 项目为创建兼容环境而采取的措施意味着,与 FreeBSD 应用程序(包括 WINE 本身)不同,它将类似于这种单用户环境。

因此,每个用户都必须维护自己的配置集,这可能是一件好事。但是,最好只安装一次应用程序,尤其是大型应用程序,例如办公套件或游戏。这样做有两个原因:维护(只需要应用一次软件更新)和存储效率(没有重复的文件)。

有两种策略可以最大程度地减少多个 WINE 用户对系统的影响。

13.7.2. 将应用程序安装到公共驱动器

如 WINE 配置部分所述,WINE 提供将额外的驱动器附加到特定前缀的功能。这样,应用程序可以安装到一个公共位置,而每个用户仍然拥有一个前缀,可以在其中保存个人设置(取决于程序)。如果要共享的应用程序相对较少,并且这些程序只需要对前缀进行少量自定义调整才能正常运行,那么这种设置非常适合。

以这种方式安装应用程序的步骤如下:

  1. 首先,在系统上设置一个共享位置来存储文件,例如 /mnt/windows-drive_d/。创建新目录的说明在 mkdir(1) 手册页中介绍。

  2. 接下来,设置此新目录的权限,只允许指定的用户访问它。一种方法是创建一个名为 “windows” 的新组,将所需的用户添加到该组(参见 用户和基本账户管理 部分中的关于组的小节),并将目录的权限设置为 770权限 部分演示了此过程)。

  3. 最后,使用 winecfg 将该位置作为驱动器添加到用户的个人前缀中,如本章中关于 WINE 配置部分的描述。

完成后,可以将应用程序安装到此位置,并随后使用分配的驱动器号(或标准的 UNIX®-风格目录路径)运行它们。但是,如上所述,同一时间应只有一个用户运行这些应用程序(它们可能正在访问其安装目录中的文件)。即使是组成员拥有整个目录的完全 “读/写/执行” 权限,一些应用程序在非所有者用户运行时也可能会出现意外行为。

13.7.3. 使用 WINE 的公共安装

另一方面,如果要共享的应用程序很多,或者它们需要特定的调整才能正常工作,则可能需要采用不同的方法。在这种方法中,会创建一个完全独立的用户,专门用于存储 WINE 前缀及其所有安装的应用程序。然后,允许个人用户使用 sudo(8) 命令以该用户身份运行程序。结果是,这些用户可以像往常一样启动 WINE 应用程序,只是它会像由新创建的用户启动一样运行,因此会使用包含设置和程序的集中管理的前缀。为此,请执行以下步骤:

使用以下命令(以 root 身份)创建一个新用户,它将引导您完成所需的详细信息:

# adduser

输入用户名(例如,windows)和全名(“Microsoft Windows”)。然后,接受其余问题默认值。接下来,使用以下命令使用二进制包安装 sudo 实用程序:

# pkg install sudo

安装完成后,编辑 /etc/sudoers 如下:

# User alias specification

# define which users can run the wine/windows programs
User_Alias WINDOWS_USERS = user1,user2

# define which users can administrate (become root)
User_Alias ADMIN = user1

# Cmnd alias specification

# define which commands the WINDOWS_USERS may run
Cmnd_Alias WINDOWS = /usr/bin/wine,/usr/bin/winecfg

# Defaults
Defaults:WINDOWS_USERS env_reset
Defaults:WINDOWS_USERS env_keep += DISPLAY
Defaults:WINDOWS_USERS env_keep += XAUTHORITY
Defaults    !lecture,tty_tickets,!fqdn

# User privilege specification
root    ALL=(ALL) ALL

# Members of the admin user_alias, defined above, may gain root privileges
ADMIN ALL=(ALL) ALL

# The WINDOWS_USERS may run WINDOWS programs as user windows without a password
WINDOWS_USERS ALL = (windows) NOPASSWD: WINDOWS

这些更改的结果是,User_Alias 部分中列出的用户被允许使用 Cmnd Alias 部分中列出的程序,并使用 Defaults 部分中列出的资源(当前显示),就像它们是文件中最后一行中列出的用户一样。换句话说,被指定为 WINDOWS_USERS 的用户可以使用 windows 用户身份运行 WINE 和 winecfg 应用程序。额外的好处是,此处的配置意味着他们不需要输入 windows 用户的密码。

接下来,为 windows 用户提供显示屏访问权限,因为 WINE 程序将以该用户身份运行:

% xhost +local:windows

这应该添加到登录时或默认图形环境启动时运行的命令列表中。完成所有上述操作后,配置为 sudoersWINDOW_USERS 之一的用户可以使用以下命令运行使用共享前缀的程序:

% sudo -u windows wine program.exe

值得注意的是,多个用户同时访问此共享环境仍然存在风险。但是,还要考虑共享环境本身可以包含多个前缀。通过这种方式,管理员可以创建一个经过测试和验证的程序集,每个程序都有自己的前缀。同时,一个用户可以玩游戏,而另一个用户可以使用办公程序,而无需冗余的软件安装。

13.8. WINE 在 FreeBSD 上的常见问题解答

以下部分描述了在 FreeBSD 上运行 WINE 时的一些常见问题、技巧或常见问题,以及它们的答案。

13.8.1. 基本安装和使用

13.8.1.1. 如何在同一系统上安装 32 位和 64 位 WINE?

如本节前面所述,wine 和 i386-wine 包相互冲突,因此不能以正常方式安装在同一系统上。但是,可以使用 chroots/jails 等机制,或从源代码构建 WINE 来实现多个安装(注意,这 *不* 意味着构建端口)。

13.8.1.2. 可以在 WINE 上运行 DOS 程序吗?

可以,如本节前面提到的 “控制台用户界面” 应用程序。但是,运行 DOS 软件有一个更好的方法:DOSBox。另一方面,没有理由不至少尝试一下。只需创建一个新的前缀,安装软件,如果它无法正常工作,就删除前缀。

13.8.1.3. 是否应该安装 emulators/wine-devel 包/端口来使用 WINE 的开发版本而不是稳定版本?

是的,安装此版本将安装 WINE 的 “开发” 版本。与 32 位和 64 位版本一样,除非采取额外措施,否则它们不能与稳定版本一起安装。

请注意,WINE 还具有一个 “Staging” 版本,其中包含最新的更新。曾经,它可以作为 FreeBSD 端口获得;但是,它后来被删除了。但是,可以从源代码直接编译它。

13.8.2. 安装优化

13.8.2.1. 如何处理 Windows® 硬件(例如,显卡)驱动程序?

操作系统驱动程序在应用程序和硬件之间传递命令。WINE 模拟 Windows® 环境,包括驱动程序,而驱动程序 wiederum 使用 FreeBSD 的本机驱动程序进行此传输。不建议安装 Windows® 驱动程序,因为 WINE 系统设计为使用主机系统的驱动程序。例如,如果显卡需要专用驱动程序,请使用标准 FreeBSD 方法安装它们,而不是 Windows® 安装程序。

13.8.2.2. 是否有方法使 Windows® 字体看起来更好?

FreeBSD 论坛中的一位用户建议使用这种配置来修复 WINE 字体开箱即用的外观,这些字体可能略微像素化。

根据 FreeBSD 论坛中的一篇文章,将以下内容添加到 .config/fontconfig/fonts.conf 中将添加抗锯齿功能并使文本更易读。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd>"

<fontconfig>

  <!-- antialias all fonts -->
  <match target="font">
    <edit name="antialias" mode="assign"><bool>true</bool></edit>>
    <edit name="hinting" mode="assign"><bool>true</bool></edit>>
    <edit name="hintstyle" mode="assign"><const>hintslight</const></edit>>
    <edit name="rgba" mode="assign"><const>rgb</const></edit>>
  </match>
</fontconfig>

13.8.2.3. 在系统上的其他位置安装 Windows® 是否有助于 WINE 运行?

这可能取决于要运行的应用程序。如描述 winecfg 的部分中所述,一些内置的 WINE DLL 和其他库可以通过提供替代版本的路径来覆盖。如果 Windows® 分区或驱动器已挂载到 FreeBSD 系统并对用户可用,那么配置其中一些覆盖将使用本机 Windows® 库,并可能减少出现意外行为的可能性。

13.8.3. 应用程序特定

13.8.3.1. 哪里是查看应用程序 X 是否在 WINE 上运行的最佳位置?

确定兼容性的第一步应该是 WINE AppDB。这是一个关于程序在所有支持平台上运行情况(或不运行情况)的报告汇编,尽管(如前所述),一个平台的解决方案通常适用于其他平台。

13.8.3.2. 有什么可以帮助游戏运行得更好吗?

也许。许多 Windows® 游戏依赖于 DirectX,这是一个专有的 Microsoft 图形层。但是,开源社区中有一些项目试图实现对该技术的支持。

dxvk 项目是一个尝试使用 FreeBSD 兼容的 Vulkan 图形子系统来实现 DirectX 的项目。尽管它的主要目标是 Linux 上的 WINE,但 一些 FreeBSD 用户报告 编译和使用 dxvk。

此外,wine-proton 端口 的工作正在进行中。这将把 Steam 游戏平台开发商 Valve 的工作带到 FreeBSD。Proton 是 WINE 的一个发行版,旨在允许许多 Windows® 游戏在其他操作系统上运行,只需最少的设置。

13.8.3.3. FreeBSD WINE 用户是否有任何地方可以聚在一起交换技巧和窍门?

有很多地方可以搜索 FreeBSD 用户讨论与 WINE 相关的問題,并找到解决方案:

13.8.4. 其他操作系统资源

有一些专注于其他操作系统的资源,可能对 FreeBSD 用户有所帮助:

  • WINE Wiki 有大量关于使用 WINE 的信息,其中大部分适用于 WINE 支持的许多操作系统。

  • 同样,其他 OS 项目提供的文档也可能很有价值。Arch Linux Wiki 上的 WINE 页面 尤其是一个很好的例子,尽管一些 “第三方应用程序”(即 “配套应用程序”)显然在 FreeBSD 上不可用。

  • 最后,Codeweavers(商业版 WINE 的开发商)是活跃的上游贡献者。通常,其支持论坛 中问题的答案可以帮助解决开源版 WINE 的问题。


最后修改日期:2024 年 8 月 11 日,由 Fernando Apesteguía 修改