Linux:如何在多库环境中运行多个 wine 版本?

Linux:如何在多库环境中运行多个 wine 版本?

我正在运行带有 32 位多库的 Slackware 64 14.0。

许多网站都解释说,无法运行多个版本的 wineserver,解决方案是终止旧版本的 wineserver 以使用新版本。少数几个网站提到,可以通过为每个 wineserver 版本使用不同的 WINEPREFIX 来实现。

几个月来我一直在无意中这样做,因为 Netflixplayer 本身就是这样做的。我不确定 Netflixplayer 的 wineserver 是否正在运行或使用我的 wine 安装的 wineserver。我无法验证安装的 wine 版本Netflix播放器因为当我跑步时:

/opt/Netflix64/bin/wine --version

或者

cd /opt/Netflix64/bin && ./wine --version

它会报告 /usr/bin 中安装的 wine 版本。我已通过安装/卸载多个版本验证了这一点。

根据http://sourceforge.net/projects/postinstaller/files/data/,Netflixplayer 自 2012 年 12 月 24 日起似乎没有更新过,当时最新的 wine 版本是 1.5.20http://sourceforge.net/projects/wine/files/Source/

所以我一直在奔跑

wine 1.5.25 32 位

和 Netflixplayer

wine <=1.5.20 32 位

根据“文件”,两个 Wine 版本都是 32 位的:

bash-4.2$ file /opt/Netflix64/bin/wine
/opt/Netflix64/bin/wine: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), BuildID[sha1]=0x2acec63c4ffa5cd7515f1c9fead64d54616df195, stripped

bash-4.2$ file /usr/bin/wine
/usr/bin/wine: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped

并且 readelf 显示库运行路径不同。

bash-4.2$ readelf -d /usr/bin/wine | grep -e Library -e library
 0x00000001 (NEEDED)                     Shared library: [libwine.so.1]
 0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x0000000f (RPATH)                      Library rpath: [$ORIGIN/../lib]
 0x0000001d (RUNPATH)                    Library runpath: [$ORIGIN/../lib]

bash-4.2$ readelf -d /opt/Netflix64/bin/wine | grep -e Library -e library
 0x00000001 (NEEDED)                     Shared library: [libwine.so.1]
 0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x0000000f (RPATH)                      Library rpath: [$ORIGIN/../lib32]
 0x0000001d (RUNPATH)                    Library runpath: [$ORIGIN/../lib32]

发生这一切后,我只能运行一次 Netflixplayer,那是因为我卸载了所有与 wine 相关的东西,删除了 /tmp 中的所有内容(包括隐藏文件),并删除了对 wine 的所有引用(不包括软件包历史记录)。我已恢复到 1.5.25,无论我做什么,甚至使用 wineserver -k 关闭旧版本的 wineserver 都不起作用。

执行此操作:

env WINELOADER="/opt/Netflix64/bin/wine" WINESERVER="/opt/Netflix64/bin/wineserver" WINEPREFIX="$HOME/.Netflix" /opt/Netflix64/bin/wine "C:\Program Files\Mozilla Firefox\firefox.exe" http://netflix.com/

产生这个:

wine client error:0: version mismatch 437/439.
Your wineserver binary was not upgraded correctly,
or you have an older one somewhere in your PATH.
Or maybe the wrong wineserver is still running?

Netflixplayer 将不再与系统上安装的任何其他 wine 兼容。我认为环境变量被忽略了。不知何故,WINEPREFIX 变得毫无用处。

答案1

我曾多次尝试问同一个问题,但当我填完表格时,几分钟后我才发现,这个问题花了几天甚至几周才得到答案。我可能应该自己问,自己回答,因为我的问题在谷歌上通常只有 1 或 2 页结果,隐藏在数千个相似但不相关的问题中。

无论如何,这是我的答案:

Netflix播放器使用的是 wine-1.5.19。我通过创建另一个用户并执行与问题相同的命令来获得此信息:

bash-4.2$ /opt/Netflix64/bin/wine --version
wine-1.5.19
bash-4.2$ /usr/bin/wine --version
wine-1.5.25

这告诉我,我当前的用户肯定出了问题。我的环境可能以某种方式被损坏了。

目前,我已经通过以新用户身份运行第二个 wineserver 解决了这个问题,但我认为如果我修复了当前用户,我可以在同一个帐户中运行两个 wineserver。但这不是什么大问题。然而,我担心的是,无论发生什么,都可能产生其他未知的副作用。

bash-4.2$ ps aux | grep wineserver
user1  7415 15.7  0.3  15460 12320 ?  Ss 17:40  17:26 /usr/bin/wineserver
user2  10661 8.7  0.3  13316 10272 ?  Ss 19:14   1:26 /opt/Netflix64/bin/wineserver

自动执行“sudo su - user”命令

我不确定,但可能是我之前编译时设置的 $LD_LIBRARY_PATH 干扰了可执行文件的库路径。我的新用户显然没有将其添加到路径中。

相关内容