我安装了 Wine,里面有几款游戏,大部分都运行良好。但是 Wine 在我的主目录中创建了用于存放玩家数据、保存等的目录。
有没有办法将它们放在 ~/.winesaves 或类似目录中?我更希望 wine 不要弄乱我的主目录。
(wine:1.5.27,所讨论的游戏是 SCII 和 DE:IW)
编辑以澄清:
~/.wine 中的一切都很好,但我不希望应用程序创建 ~/GameSaves 或类似的东西。
答案1
您可能需要试验sandbox
中的选项winetricks
,这可能会对您有所帮助,因为当该设置应用到带有 的默认 WINEPREFIX 时,所有Wine
到 的符号链接都将被删除。$HOME
winetricks 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
启动它。例如,您可以创建自己的包装器(假设在您的 中),它设置:wine
HOME
~/bin/wine
~/bin
PATH
#!/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 文档。