LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 536|回复: 6

问wine的问题

[复制链接]
发表于 2012-2-16 00:37:05 | 显示全部楼层 |阅读模式
我计划装几个win的游戏,希望不同的游戏独立,而且每个游戏都可以让所有用户访问。

wine的缺省行为是为每个用户建立/home/xxx/.wine/drive_c。每个用户自己安装win程序,全部安在这个目录下。

我希望的目录结构是:
/opt/windows-program/
              |---- Neighbor From Hell
                               |---- drive_c
                                                 |---- ...
                               |---- start.desktop
                               |---- start.sh
             |---- start.cfg
     |---- Neighbor From Hell 2
                                                 |---- drive_c
                                                 |---- ...
                               |---- start.desktop
                               |---- start.sh
             |---- start.cfg
     |---- SimCity 2000
                                                  |---- drive_c
                                                 |---- ...
                               |---- start.desktop
                               |---- start.sh
             |---- start.cfg
     |---- Fifa 2002
                                                   |---- drive_c
                                                 |---- ...
                               |---- start.desktop
                               |---- start.sh
             |---- start.cfg

由root安装。
每个游戏都完全独立,卸载的时候只要删除目录即可,无拉圾残留。
在图形界面和命令行下也都有启动脚本。而且是所有用户共享的。

有一个问题是,希望不同的游戏运行于不同的配置,比如NFH运行在winxp,Fifa 2002运行在win98。
如果能有start.cfg分别指定配置是最好,但是现在的wine使用wincfg集中在一个地方配置,这个就似乎无法解决了。
发表于 2012-2-16 08:20:25 | 显示全部楼层
简单的答案:WINEPREFIX。WINEPREFIX可以用来指定Wine的配置目录的位置,只需为每个用户的每个游戏创建一个WINEPREFIX。
http://wiki.jswindle.com/index.php/Wine_Prefixes

如果您希望找到更“干净”、更容易维护的解决方法,请参考Wine Wiki中关于使用户部分共享一个WINEPREFIX的内容:
http://wiki.jswindle.com/index.p ... a_Wine_Installation

Simcity 2000...真是经典。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-18 22:10:08 | 显示全部楼层
多谢,我先学习下。

一直喜欢玩simcity2000,在linux下能玩。
虽然游戏老但是感觉建的城市很鲜艳。每次在simcity4里建城市结果都是灰了吧唧的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-18 22:34:16 | 显示全部楼层
大致看了一遍,我觉得分开wine目录,用WINEPREFIX就很清爽了。

有几个问题在文档里没看到,再请问一下richard:

1. WINEPREFIX用来指定新的wine目录,新的wine目录是不是得手工拷贝?有没有命令实现在指定位置创建wine目录?[SOLVED]

网页里说以前有wineprefixcreate命令,现在没了,在搜索说应改成winepath命令,但是试验和看man page发现好像不是用来建wine目录的。
看了官方论坛里的一个帖子,建议使用WINEPREFIX=xxx wineboot。
http://forum.winehq.org/viewtopic.php?t=1004

2. 如果wine升级,drive_c下的dll文件可能也会变化。wine应该会自动更新~/.wine目录吧?手工建立的新wine目录是不是还得手工更新?[SOLVED]

只要WINEPREFIX指定的wine目录,在wine启动时都会自动更新。

3. 能不能禁止wine创建~/.wine目录?
    我的所有wine目录应该都会放在/opt里。我装系统的策略是只有root能安装卸载,非root用户只有使用权。

4. 记得以前装wine游戏的时候,系统菜单里会存在游戏的全部windows快捷方式,包括乱七八糟的主页链接,卸载图标。这次我想自己写启动游戏的desktop文件,windows的快捷方式就不让出现在系统菜单里了。我打算装上游戏后搞这个问题,这个你以前有没有做过?

5. 我的/opt/win-prog目录以及内容的owner肯定是root,读写权限也都是root,但这样会导致普通用户在玩游戏时修改不了注册表?这个会不会有影响?
    windows注册表真是一个麻烦事。

6. 这次准备调用setup.exe安装后,将安装后的wine目录和安装前的做个对比。然后做一个补丁文件(类似原代码补丁),当然如果是大游戏这个补丁可能会有几百兆。
    以后安装可以先创建wine目录,再打这个补丁就能把游戏装好,避免了setup.exe的GUI交互,更自动化,甚至可以做成ebuild。
    这个应该还是挺复杂的,有人做过吗?
回复 支持 反对

使用道具 举报

发表于 2012-2-19 13:15:59 | 显示全部楼层
我个人的想法是:
  • 首先用root身份执行WINEPREFIX='/opt/winebase' winecfg,配置基础wine prefix。如果有安全风险,可以用另外一个受限用户的身份执行。
  • 对每一个游戏"GAME",用root身份执行WINEPREFIX='/opt/wine_GAME' winecfg,配置每个游戏的wine prefix,在该prefix下安装游戏。
  • 对比每个游戏的WINEPREFIX和基础WINEPREFIX,将单个游戏的WINEPREFIX中与基础WINEPREFIX相同的文件全部替换成symlink,节省空间,也便于更新Wine版本时更新WINEPREFIX。这一步可以用shell script自动实现,不过shell script的编写要费些心思。
    几个提示:diff -q -r dir1/ dir2/可以用来找到两个目录中中不同的文件。realpath --relative-to=XXX 可以用来生成相对路径,在ln -s时很有用。
  • 为每个用户的每个游戏创建一个WINEPREFIX。除了用户必须有修改权限的文件/目录之外(比如游戏存档目录、注册表文件),其他内容全部从/opt/wine_GAME中symlink过来。。如果不会出现有两个用户同时运行同一游戏的情况的话,也可以考虑赋予/opt/wine_GAME中某些文件777权限,备份这些可能被修改的文件,直接用/opt/wine_GAME的WINEPREFIX运行游戏,在游戏运行完成后复制回备份的文件。
  • 编写shell script或者菜单项,允许每个用户执行特定的游戏,在用户运行完程序后做好善后工作。


Post by fpemud;2160260

2. 如果wine升级,drive_c下的dll文件可能也会变化。wine应该会自动更新~/.wine目录吧?手工建立的新wine目录是不是还得手工更新?[SOLVED]

只要WINEPREFIX指定的wine目录,在wine启动时都会自动更新。


嗯,注意权限。每次升级wine之后可能要用root身份升级WINEPREFIX。

Post by fpemud;2160260

3. 能不能禁止wine创建~/.wine目录?
    我的所有wine目录应该都会放在/opt里。我装系统的策略是只有root能安装卸载,非root用户只有使用权。


除非您不允许用户直接执行wine,而使用sudo + shell script等机制将游戏封装起来,让wine以另外一个受限用户的身份执行。这样无疑会带来一些麻烦(比如如何保证用户不会破坏其他人的存档文件),但也会带来一些好处(例如下面的“快捷方式”问题不用管了)。

Post by fpemud;2160260

4. 记得以前装wine游戏的时候,系统菜单里会存在游戏的全部windows快捷方式,包括乱七八糟的主页链接,卸载图标。这次我想自己写启动游戏的desktop文件,windows的快捷方式就不让出现在系统菜单里了。我打算装上游戏后搞这个问题,这个你以前有没有做过?


这些“快捷方式”(其实是菜单项)应该会出现在~/.local/share/applications/中,删除它们就好。我不知道如何阻止wine生成它们。

Post by fpemud;2160260

5. 我的/opt/win-prog目录以及内容的owner肯定是root,读写权限也都是root,但这样会导致普通用户在玩游戏时修改不了注册表?这个会不会有影响?
    windows注册表真是一个麻烦事。


两种方案: 1. 运行游戏前备份,运行后复原,注意这样可能会导致两个用户不能同时玩一个游戏;2.为每个用户的每个游戏保存一份注册表。

Post by fpemud;2160260

6. 这次准备调用setup.exe安装后,将安装后的wine目录和安装前的做个对比。然后做一个补丁文件(类似原代码补丁),当然如果是大游戏这个补丁可能会有几百兆。
    以后安装可以先创建wine目录,再打这个补丁就能把游戏装好,避免了setup.exe的GUI交互,更自动化,甚至可以做成ebuild。
    这个应该还是挺复杂的,有人做过吗?


可以做,不算困难,一个shell script就搞定了。ebuild会有版权问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-26 01:06:11 | 显示全部楼层
从win2000开始,win和linux一样也支持多用户,那么win2000之后的游戏在win下是否已经能够多个人同时玩互不影响了?
我看现在win上装的极品9的存档文件是在用户自己目录下的。

正在学习winecfg,奇怪为什么winecfg要把自己的配置保存在注册表里。
回复 支持 反对

使用道具 举报

发表于 2012-2-26 08:45:06 | 显示全部楼层
Post by fpemud;2160793
从win2000开始,win和linux一样也支持多用户,那么win2000之后的游戏在win下是否已经能够多个人同时玩互不影响了?
我看现在win上装的极品9的存档文件是在用户自己目录下的。

正在学习winecfg,奇怪为什么winecfg要把自己的配置保存在注册表里。


很难说。不能排除某些程序不支持多用户同时运行的可能性(例如,它们可能禁止同时运行两个程序进程)。如果两个用户使用相同的WINEPREFIX,出现问题的可能性更大。

winecfg将配置信息保存在注册表中,可能是为了尽可能模拟Windows的行为。注意winecfg中的很多选项在Windows中是被保存在注册表里的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表