Table of Contents
大部分用户是不需要哟感到本章内容的。本章大部分操作是需要使用文本命令的,所以除非您对命令行有一定的了解,否则请不要轻易尝试这些步骤。
发布容器
CrossOver 支持通过 发布容器 功能给更多的用户、系统推送 Windows 应用程序。已发布的容器 可以让单一系统上的所有用户共享容器中安装的 Windows 应用程序。在容器中创建 RPM 或 Debian 软件包可以在多个独立系统上安装 CrossOver。此外,如果您的网络使用 NFS or Samba 共享驱动器,则可以通过共享卷进行安装。
如何发布容器
发布容器可以让同一系统上的用户都能访问该容器中的 Windows 应用程序。当系统上的某个用户启动 CrossOver 时,所有已发布的容器都会在 ~/.cxoffice 下生成一个 容器存根。用户的所有个性化修改和配置都将存储在这个本地容器存根中。
首先,请在一个新容器中安装您想要共享的 Windows 应用程序。然后,在 Windows 应用程序中移除隐私数据(比如:缓存的密码、用户名等等)。最后,选择 主菜单 > 容器 > 发布容器。

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

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

创建一个 RPM 或 Debian 软件包
CrossOver 支持将容器打包成一个可安装的程序。该功能可以让您在一个系统中创建容器,然后将其打包,再重新安装到多台机器上。
创建一个可安装的软件包,需要先选择一个容器,然后前往 主菜单>容器>从容器创建软件包。

在创建软件包的对话窗口中,您可以选择生成一个 Debian 或 RPM 的软件包。版本号、打包者 以及 产品 ID 字段都是补充性元数据,您可以进行修改或者不做任何改动。

CrossOver 将会检测所需的软件包构建依赖项,并询问是否自动安装。

系统将打开一个终端窗口,并在其中显示软件包的创建进度。

容器的软件包创建成功了,您可以将其复制到其它系统上进行安装。

您也可以通过命令行创建软件包。以下是从容器 Notepad++ 中同时创建 Debian 和 RPM 软件包的命令。
$ ~/cxoffice/bin/cxbottle --bottle Notepad++ --deb --rpm虽然您可以使用任何容器(已发布的或私有的)创建软件包,但软件包可以被安装在任何新系统上,如同容器已在该系统上发布一样。容器软件包安装完成后,其中包含的应用程序即可使用。请确保您已为每个正在使用的系统购买 CrossOver 授权许可,并注意遵守每个 Windows 程序的所有许可条款。CrossOver 不会强制执行软件许可限制。
安装在共享卷
CrossOver 可以安装在共享卷并在多个系统上运行。请先使用以下命令,确保 root 用户在共享卷中创建的文件的所有者是 root 用户。
$ touch /common/software/root-file
$ ls -l /common/software/root-file
-rw-r--r-- 1 root root 0 Nov 4 14:07 /common/software/root-file输出显示 root-file 归属于 root。确认完毕后,移除 root-file 文件,安装 CrossOver 并指定共享卷作为安装路径。
现在,您可以使用命令行运行应用程序。如果您希望您的用户计算机上也可以使用菜单和文件关联,请执行以下命令。
-
创建 CrossOver 菜单。
创建 CrossOver 菜单入口,请在每个系统中以 root 身份执行该命令。
$ /common/software/cxoffice/bin/cxmenu --ro-desktopdata --crossover --install-
将
.exe文件关联到 CrossOver。
将 .exe 扩展名与 CrossOver 关联后,用户可以通过在浏览文件时单击来启动 Windows 可执行文件。请在每个系统上以 root 身份执行以下命令:
$ /common/software/cxoffice/bin/cxassoc --ro-desktopdata --crossover --install-
设置 .tie 文件关联。
将 .tie 扩展名与 CrossOver 关联后,用户可以使用 CrossTie 文件安装 Windows 应用程序,请在每个系统上执行以下命令。
$ /common/software/cxoffice/bin/cxtie --register-
为 Windows 应用程序创建菜单和文件关联。
最后,以下命令将扫描已发布的容器,并为其包含的 Windows 应用程序创建菜单和文件关联。将 容器名 替换成一个已发布的容器名。如果您的共享卷中有多个已发布的容器,请为各个容器执行一次该命令。请在每个系统上以 root 身份执行以下命令。
$ /common/software/cxoffice/bin/cxbottle --ro-desktopdata --bottle 容器名 --install自定义驱动器的标签或序列号
CrossOver 会自动获取挂载的驱动器的序列号和标签,比如 CD-ROMs 或外部硬盘。如果您的应用程序依赖一个特定的 Windows 盘的序列号或者标签,那么您可以通过 CrossOver 控制面板中的 Wine 配置方便地修改。本例中将会在 /home/balfour/Music 目录中设定一个驱动器的标签和序列号,并且将其映射到 D: 盘符。
$ ln -s /home/balfour/Music "/home/balfour/.cxoffice/(bottle-name)/dosdevices/d:"您需要在命令中添加双冒号,将 D: 盘符与 /dev/sda1 设备关联。
$ ln -s /dev/sda1 "/home/balfour/.cxoffice/(bottle-name)/dosdevices/d::"您还可以在目录的根路径下创建 .windows-serial 和 .windows-label 文本文件,以此设置标签和序列号。。
$ echo 123456 > /home/balfour/Music/.windows-serial
$ echo TestLabel > /home/balfour/Music/.windows-label使用容器钩子定制化容器
CrossOver 可以使用容器钩子来自动自定义容器。容器钩子是通过脚本创建的,这使得它们高度灵活。它们可以修改盘符的分配、注册表的设置和 C: 盘的内容。该功能对多机器间的容器分发、针对用户的定制化都非常实用。要使用容器钩子,您需要在以下任一位置创建一个 scripts.d 目录。
系统级别的钩子应用于系统上的所有容器,包括所有者是非 root 用户的容器。因此,它们非常适合根据机器的配置或硬件来调整容器。这些钩子在 /opt/cxoffice/support/scripts.d 目录中。
用户钩子跟系统级别的钩子相同,但仅应用于用户的某个特定容器。用户钩子在系统级别的钩子运行完毕后运行。它们位于 /.cxoffice/scripts.d 目录中。
容器钩子存储于一个单独的容器,它非常适合让非 root 用户设置已发布的容器。备份容器时会自动包含这种类型的钩子,以确保在其它机器上还原容器时依然可以运行。这些钩子放置在容器根目录的 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
当已发布的容器首次在非 root 用户的账号被创建时,该钩子会被触发。$WINEPREFIX 变量指向新创建的容器存根,published-wineprefix 指的是 root 用户在 /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设置容器查找路径
将容器移动到非默认位置并且让 CrossOver 依然能找到它们的一个快捷方法是:先在 CrossOver 中创建一个容器,然后将容器移动到新位置,然后在 ~/.cxoffice 目录中创建指向新位置的符号链接。
您还可以通过设置 CX_BOTTLE_PATH 环境变量,来指定 CrossOver 查找容器的目录列表。该环境变量的默认设置为 ~/.cxoffice。您可以编辑 ~/.cxoffice/cxoffice.conf 文件添加查找路径。。
[EnvironmentVariables]
"CX_BOTTLE_PATH"="/extra/bottles:~/.cxoffice"CrossOver 将优先在 /extra/bottles 查找容器,然后才是默认的标准位置。这个顺序也是非常重要的,因为 CrossOver 会在查找路径列表中的第一个可写入目录中创建新容器。CrossOver 不会自动将现有的容器移动到新路径中。您可以选择保留列表中默认的容器路径,或者手动将您现有的容器移动到新的目录中。
您还可以修改 /opt/cxoffice/etc/cxoffice.conf,在全局范围修改该设置。您需要使用 USER 环境变量来确保每个用户都有专属的容器目录。
[EnvironmentVariables]
"CX_BOTTLE_PATH"="/extra/${USER}/bottles"已发布的容器存储在 /opt/cxoffice/etc 中,系统也会在此处进行容器查找。您可以修改 /opt/cxoffice/etc/cxoffice.conf 文件中的 CX_MANAGED_BOTTLE_PATH 环境变量重新设置该路径。
[EnvironmentVariables]
"CX_MANAGED_BOTTLE_PATH"="/extra/published_bottles"