11.7. FreeBSD 多用户与 WINE

11.7.1. 使用通用 WINE Prefixes 的问题

与大多数类 UNIX® 的操作系统一样,FreeBSD 是为多个用户同时登录和工作而设计的。另一方面,Windows® 是多用户的,即在一个系统上可以设置多个用户账户。但是,人们期望在任何时候都只有一个人在使用物理机器(台式电脑或笔记本电脑)。

最近的消费者版本的 Windows® 已经采取了一些措施来改善多用户情况下的操作系统。但是,它在很大程度上仍然是围绕着单用户体验而设计的。此外,WINE 项目为创建一个兼容的环境所采取的措施意味着,与 FreeBSD 应用程序(包括 WINE 本身)不同,它将类似于这种单用户环境。

因此,每个用户将不得不维护他们自己的配置,这有可能是好事。然而,安装应用程序,特别是像办公套件或游戏这样的大型应用程序,只安装一次是很有利的。这样做的原因有两个例子:维护(软件更新只需要应用一次)和存储效率(没有重复的文件)。

有两种策略可以尽量减少系统中多个 WINE 用户的影响。

11.7.2. 将应用程序安装到一个公共驱动器上

如 WINE 配置一节所示,WINE 提供了将额外的驱动器附加到一个给定 WINE Prefixes 的能力。通过这种方式,应用程序可以被安装到一个共同的位置,而每个用户仍然有一个 WINE Prefixes,可以保留个人设置(取决于程序)。如果有相对较少的应用程序需要在用户之间共享,并且这些程序需要对 WINE Prefixes 进行少量的自定义调整才能运行,那么这是一个很好的设置。

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

  1. 首先,在系统上设置一个共享位置,将文件存放在那里,例如 /mnt/windows-drive_d/。创建新的目录在 mkdir 命令的手册页中有描述。

  2. 接下来,为这个新目录设置权限,只允许需要的用户访问它。一种方法是创建一个新的组,例如windows,将所需的用户添加到该组中(参见手册中用户和基本账户管理部分中关于组的小节),并将该目录的权限设置为 770(手册中 FreeBSD 基础章节中关于权限的部分说明了这个过程)。

  3. 最后,按照本章中关于 WINE 配置一节的描述,使用 winecfg 将该位置作为一个驱动器添加到用户的 WINE Prefixes 中。

完成后,应用程序可以被安装到这个位置,随后使用指定的盘符(或标准的 UNIX® 式目录路径)运行。然而,如上所述,应该只有一个用户同时运行这些应用程序(可能正在访问其安装目录内的文件)。一些应用程序在由非所有者的用户运行时也可能表现出意想不到的行为,尽管该用户是一个组的成员,应该对整个目录有完全的“读/写/执行”权限。

11.7.3. 使用 WINE 的普通安装

另一方面,如果有许多应用程序需要共享,或者它们需要特定的调整才能正常工作,则可能需要一个不同的方法。在这种方法中,要创建一个完全独立的用户,专门用于存储 WINE Prefixes 和所有安装的应用程序。然后,个别用户被授予使用su命令作为该用户运行程序的权限。其结果是,这些用户可以像平时一样启动 WINE 程序,只是它将像由新创建的用户启动一样,因此使用集中维护的包含设置和程序的 WINE Prefixes。为了达到这个目的,请采取以下步骤。

用下面的命令创建一个新的用户(以 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 部分命名的用户被允许使用 Defaults 部分列出的资源(当前显示)运行 Cmnd Alias 部分列出的程序,就好像他们是文件最后一行列出的用户一样。换句话说,被指定为 WINDOWS_USERS 的用户可以作为用户窗口运行 wine 和 winecfg 程序。因此,这里的配置意味着他们将不需要输入 windows 用户的密码。

接下来将显示的权限还给 windows 用户,WINE 程序将以其身份运行:

% xhost +local:windows

这应该被添加到登录时或默认图形环境启动时的命令列表中。完成上述所有工作以后,在 sudoers 中被配置为 WINDOW_USERS 之一的用户就可以使用以下命令运行共享 WINE Prefixes 的程序。

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