关于 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