关于 CrossOver Mac 的一些高级设置

大部分用户是不需要用到本章内容的。本章中大部分操作是需要使用文本命令的,所以除非您对命令行有一定的了解,否则请不要轻易尝试这些步骤。

发布容器

CrossOver 支持通过使用 发布容器 功能给更多用户、更多系统推送 Windows 应用程序。一个 已发布的容器,可以让单一系统上的所有用户共享容器中安装的 Windows 应用程序。

首先,请在一个新容器中安装您想要共享的 Windows 应用程序。然后,在 Windows 应用程序中移除隐私数据(比如:缓存的密码、账号信息等)。最后,点击菜单 容器 > 发布容器。

发布的容器一般会命名为 已发布的_容器名。我们建议您使用默认命名,这可以方便您了解该容器所使用的初始容器。输入系统管理员的账号密码后,CrossOver 将会发布该容器。

已发布的容器会在 CrossOver 的左侧边栏显示。可以在本机中登录、启动 CrossOver 的用户,现在也有访问已发布的容器中的 Windows 应用程序的权限了。

当用户打开一个已发布的容器,一个 容器存根 会在用户的主账号中生成。这些容器存根保存着用户对容器的修改,并具有指向已发布的容器中的大文件和文件夹的符号链接。容器存根与其指向的已发布的容器同名。用户针对已发布容器的修改,在通过点击菜单中的 容器>更新已经发布的容器 更新容器之前,其他用户是无法看到的。

分发已发布的容器

要将已发布的容器分发到另外一台 Mac,您只需要简单地将它复制到新系统中的同一个位置。默认让所有用户都可以访问到的的位置是 /Library/Application Support/CrossOver/Bottles。新系统中的用户只需要在容器添加后运行 CrossOver 即可,届时 CrossOver 会创建容器中所有的应用图标。

取决于您的需求和网络设置,您可能会希望容器在分发给其它机器之前,能提供下面部分甚至所有自定义的功能。

分发现成的图标

如果您可以自动在用户的程序坞中添加图标,那么您可能会考虑将 CrossOver 分发的容器中的图标也添加进来。只要容器的路径在两个机器上是一致的,那么直接将图标复制到另一个机器是可以生效的。一旦通过图标启动了 CrossOver,它会检查图标文件,如有必要,它可能会用系统本身的图标替换它。

需要注意的是,发布容器后,您将拥有两套图标。一套是指向您的私有容器,另一套是指向已发布的容器。请确认您分发的图标是指向已发布的容器。

提供定制或即用的偏好设置

系统管理员可能会想要在分发前修改 CrossOver 的一些默认行为。这可以通过在每个用户账号运行脚本命令或者准备一个可以即用的 defaults 文件来实现。CrossOver 中 defaults 文件存储于 ~/Library/Preferences/com.codeweavers.CrossOver.plist,将其复制到其它用户账号的同一个位置,启动 CrossOver 时就可以拥有同样的偏好设置。以下是一些常见的可以在 CrossOver 的 defaults 文件中修改的设置。

修改用户存储容器的路径

用户的容器默认存储在 ~/Library/Application Support/CrossOver/Bottles。即使是用户在已发布的容器中所做的本地修改,也会存储在该路径中。该存储路径可以通过 BottleDir 配置修改:

$ defaults write com.codeweavers.CrossOver.plist BottleDir /path/to/user_private/non_networked/bottle/dir

请不要将该设置指向包含已发布的容器的路径,因为这样用户的设置会跟系统的设置起冲突。我们也不建议使用一个远端或者需要网络的存储设备,因为这可能会导致显著的性能问题。

修改 CrossOver 查找已发布容器的路径
如果您希望将已发布的容器存储于外部设备,或是共享于多个系统之间,那么您需要重定向 CrossOver 搜索容器的路径。您可以通过调整 ManagedBottleDirs 设置来实现。

$ defaults write com.codeweavers.CrossOver.plist ManagedBottleDirs /path/to/shared/non_networked/bottle/dir

自定义驱动器的标签或序列号

CrossOver 会自动获取挂载的驱动器的序列号和标签,比如 CD-ROM 或外部硬盘。如果您的应用程序依赖一个特定的 Windows 盘的序列号或者标签,那么您可以通过 CrossOver 控制面板中的 Wine 配置方便地修改。本例中将会在 /Users/balfour/Music 文件夹中设定一个驱动器的标签和序列号,并且将其映射到 D: 盘符。

首先,选择您的 Windows 应用程序所在的容器,打开控制面板中的 Wine 配置

然后,点开 驱动器 标签,点击 添加 按钮,再选择您想要添加的盘符。

选中新增的盘符,然后点击 浏览

选择您想要分配给盘符的文件夹。

在选中盘符的状态下,输入您想要使用的标签和序列号,然后点击 应用 以及 确定

接下来是确认修改是否保存。前往控制面板 Wine 配置 中的 驱动器 标签,选择盘符,驱动器以及序列号会显示出来。另外,您也可以通过在文件夹的根目录下创建一个 .windows-序列号.windows-标签 的文本文件来设置标签和序列号。

$ echo 123456 > /Users/balfour/Music/.windows-serial
$ echo TestLabel > /Users/balfour/Music/.windows-label

使用容器钩子定制化容器

CrossOver 可以使用容器钩子来自动自定义容器。这些钩子是通过脚本创建的,这使得它们非常灵活。它们可以修改盘符的分配、注册表的设置和 C: 盘的内容。这个自定义功能对多机器间的容器分发、针对用户的自定义都是非常有用的。要使用容器钩子,您需要在以下任一位置创建一个 scripts.d 文件夹。

用户钩子只能应用于用户的某一个特定容器。它们位于 ~/Library/Application Support/CrossOver/support/scripts.d

容器钩子存储于一个单独的容器,它非常适合让非根用户设置已发布的容器。备份容器时会自动包含这种类型的钩子,以确保在其它机器上还原容器时依然可以运行。这些钩子放置在容器根目录的 scripts.d 文件夹中。

每一个钩子都是一个可执行的 shell 脚本,并且保存在上面提到的 scripts.d 文件夹中。钩子的命令规则是 nn.名字,nn 是规定钩子运行顺序的两位十进制数字,名字 通常是表明钩子的用途。名字 不可以包含点和波浪号。一个合法的钩子命名示例:10.remap_drive

无论什么情况下,钩子在 Wine 的环境中都会被调用。这意味着它们不需要使用 --bottle 选项,且可以通过以下环境变量被设置:

CX_ROOT - 安装 CrossOver 的绝对路径。
CX_BOTTLE - 当前容器的名称。
WINEPREFIX - 存储容器文件夹的绝对路径。

以下列出了触发钩子的不同操作。template 参数表示容器所基于的容器类型的名字(比如 win98,win2000,winxp,winvista,win7,win8,win10,win11)。64位的容器会在容器类型的后面追加 _64(比如 win10_64)

在容器被创建时触发
hook create template

在容器被还原时触发
hook restore

在容器被升级到新的 CrossOver 版本时触发
hook upgrade-from old-bottle-version
old-bottle-version 是容器最后使用时的 CrossOver 版本。这可以帮助您确认容器有多旧,但需要注意的是,钩子只会在 CrossOver 升级了容器之后执行。

在容器存根被创建之前和之后触发
hook pre-create-stub published-wineprefix
hook create-stub published-wineprefix
当已发布的容器第一次在非根用户的账号被使用时,该钩子会被触发。$WINEPREFIX 变量指向新创建的容器存根,published-wineprefix 指的是主用户在 /Library/Application Support/CrossOver/Bottles 中的引用副本。

在容器存根被更新之前和之后触发
hook pre-update-stub published-wineprefix
hook update-stub published-wineprefix

容器钩子也可以使用 wine 脚本,调用 WineLib 或 Windows 应用程序来修改注册表或容器相关的其它设置。

下面是一些代码示例,说明如何编写容器钩子的脚本。

以下代码是修改盘符的分配,移除 Y: 盘,然后添加一个 H: 盘到用户的 $HOME 目录:

#!/bin/sh
rm "$WINEPREFIX/dosdevices/y:"
if [ ! -d "$WINEPREFIX/dosdevices/h:" ]
then
 ln -s -f "$HOME" "$WINEPREFIX/dosdevices/h:"
fi

以下代码是容器被发布或者更新时,从容器存根中移除一个注册表项。

#!/bin/sh
if [ "$1" = "create-stub" ] || [ "$1" = "update-stub" ]
then
 $CX_BOTTLE reg delete "HKLM\Software\Test\Config"
fi

以下代码是容器被发布时,在容器存根中创建一个新的文件夹。

#!/bin/sh
if [ "$1" = "create-stub" ]
then
 # Create a user-specific directory
 mkdir -p "${WINEPREFIX}/drive_c/users/crossover/My Documents/Test Application/Saves"
fi

Next Step: 授权 CrossOver 文件系统访问权限

Last modified on 2025-03-24 05:45:42 UTC by Andrew Balfour