如何阻止 wine 在我的主目录中创建目录?

如何阻止 wine 在我的主目录中创建目录?

我安装了 Wine,里面有几款游戏,大部分都运行良好。但是 Wine 在我的主目录中创建了用于存放玩家数据、保存等的目录。

有没有办法将它们放在 ~/.winesaves 或类似目录中?我更希望 wine 不要弄乱我的主目录。

(wine:1.5.27,所讨论的游戏是 SCII 和 DE:IW)


编辑以澄清:

~/.wine 中的一切都很好,但我不希望应用程序创建 ~/GameSaves 或类似的东西。

答案1

您可能需要试验sandbox中的选项winetricks,这可能会对您有所帮助,因为当该设置应用到带有 的默认 WINEPREFIX 时,所有Wine到 的符号链接都将被删除。$HOMEwinetricks sandbox

但是,wine主文件夹中仍保留了您的用户权限,并且通常在安装新程序时,安装中的操作可能会触发沙盒被删除。因此,它根本不是真正的“沙盒”,但它可能对您的用例有帮助。

官方葡萄酒常见问题解答值得注意的是:

Winetricks 确实有一个沙盒动词,它至少可以部分地将 Wine 程序与系统的其余部分隔离开来。它可以防止错误而不是恶意。它很有用,例如,可以防止游戏将其设置保存在主目录的随机子目录中。

官方 winetricks 页面,解释为

如果您想隔离某个应用程序,使其不将任何内容保存到您的主目录,您可以尝试“winetricks sandbox”。这将删除指向您的主目录的符号链接。请在保存任何数据之前执行此操作,否则您必须将主目录中的旧保存数据复制到 $WINEPREFIX/drive_c/users/$USERNAME。

重要笔记

  • wine 沙盒选项可能需要重复使用,即将其包含在运行winetricks sandbox然后启动游戏的启动器脚本中,因为其中的许多内容wine可以触发符号链接的重建。

  • /home/$USER/.wine/drive_c/users/$USER/"My Documents"例如,为了恢复游戏,您需要将已生成的保存文件夹移动到 WINEPREFIX。如果wine您刚刚创建了一个名为 的文件夹~/gamesaves,只需将该文件夹移动到上述位置即可。否则,请观察目录结构;如果游戏保存文件夹是 ,~/Documents/Syberia/save请确保在 中创建一个等效文件夹/home/$USER/.wine/drive_c/users/$USER/"My Documents"

  • 当您将来安装游戏时,请确保winetricks sandbox在开始时运行,这样游戏将自动开始使用您的 WINEPREFIX 作为保存位置,而不是您的$HOME.

答案2

这不是一个完全阻止 wine 修改主目录的完整解决方案,但我发现这可以防止大多数程序污染我的主目录,并且是一个相当干净的解决方案。

大多数情况下(以我的经验来看),当通过 wine 运行的程序访问“~/.wine”文件夹之外的内容时,它都是通过“~/.wine”目录中的符号链接进行访问的。例如,我让安装程序在我的主目录中安装一个文件夹,但实际上它试图安装在“C:/users/用户名/My Documents”中,而 wine 会将其重定向到“~/.wine/drive_c/users/用户名/My Documents”。结果发现这里的“My Documents”实际上是指向我的主目录“~”的符号链接。

因此,只需删除符号链接“我的文档”并在“~/.wine/drive_c/users/用户名/我的文档”中创建一个文件夹“我的文档”就可以了。

PS:考虑到这个问题已经有 6 年的历史了,我很惊讶我似乎找不到这个答案,但也许我只是没有仔细查看,所以如果这篇文章是多余的,请告诉我。

答案3

对我有用的是创建一个包装器,使用不同的wine启动它。例如,您可以创建自己的包装器(假设在您的 中),它设置:wineHOME~/bin/wine~/binPATH

#!/bin/sh
export "HOME=$HOME/.wine/home"
exec /usr/bin/wine "$@"

使用空的WINEPREFIX( ~/.wine/),Wine 将在 中创建到其自己的私有主目录的符号链接~/.wine/home/

您可以将其进一步扩展为不同 Wine 前缀的多个包装器(例如 32 位与 64 位)。

答案4

如果您已经bubblewrap安装,您可以使用其机制来限制文件系统访问。

例1.您希望 wine 能够访问~/.wine~/Downloads,但不能访问其他内容。那么您可以使用以下命令:

bwrap --dev-bind / / --tmpfs ~ --bind ~/.wine ~/.wine --bind ~/Downloads ~/Downloads --new-session wine ~/.wine/path-to-your-program

在上面的命令中,我们创建一个新的命名空间,绑定根目录/,将内存文件系统绑定到~,并将两个目录绑定到上面~。在这两个目录之外所做的任何更改都将进入 tmpfs,一旦 bubblewrap(和您的程序)退出,这些更改就会丢失。

例2.您不需要复杂的层次结构,您只希望所有与葡萄酒相关的东西都存在于 中~/.bubblewrap-wine-container。而不是其他地方。在这种情况下,您可以使用:

bwrap --dev-bind / / --bind ~/.bubblewrap-wine-container ~ --new-session wine path-to-your-program-relative-to-this-directory

如果你想禁止互联网访问对于任何这些示例,添加--unshare-net参数。或者甚至--unshare-all看看它是否会启动。有关更多详细信息,请参阅 bubblewrap 文档。

相关内容