我有一个 MS Windows 应用程序需要新版本的 Wine。我已使用 PlayOnLinux 将其本地安装到主文件夹中。
我只能创建简单的 bash/dash/sh 脚本来启动文件夹中的 .exe 应用程序。我尝试了标准pushd/popd
,cd && exec
,(cd && exec)
方法但失败了。
我需要的:
桌面文件作为脚本的启动器
一个脚本,其:
- 将目录更改为 .exe 应用程序的目录
wine .exe
在应用程序目录中执行
目前,我对以下包装器脚本的 Python 代码很满意(将放置在在/usr/local/bin/wine32-wrapper):
#!/usr/bin/python3
import os
import sys
import subprocess
if len(sys.argv) >= 2:
path = sys.argv[1]
wd = os.path.dirname(path)
exec_path = ["/home/{}/.PlayOnLinux/wine/linux-x86/6.15/bin/wine".format(os.getenv('USER'), path), "{}".format(path)]
p = subprocess.run(exec_path, cwd=wd)
else:
print("\nUsage {} with one argument - full file path.".format(sys.argv[0]));
和 .desktop 文件(放置在~/.local/share/applications/wine32.desktop), 为了它:
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon=mate-panel-launcher
Exec=wine32-wrapper %f
Name=Local Wine32-6.15
然后我使用 Caja 将我的 exe 文件与这个 wine 脚本关联起来。
是否可以用具有完全相同功能的 bash/dash/sh 脚本替换上述 python 脚本?
答案1
对于桌面条目,有一个小路参数可用。以下是星际争霸 II 启动器(在 Wine 安装过程中创建)的样子:
[Desktop Entry]
Name=StarCraft II
Exec=env WINEPREFIX="/home/spas/.wine" /opt/wine-staging/bin/wine C:\\\\windows\\\\command\\\\start.exe /Unix /home/spas/.wine/dosdevices/c:/users/Public/Desktop/StarCraft\\ II.lnk
Type=Application
StartupNotify=true
Comment=Play StarCraft II
Path=/home/spas/.wine/dosdevices/c:/Program Files (x86)/StarCraft II
Icon=89A5_StarCraft II.0
StartupWMClass=starcraft ii.exe
答案2
经过更深入的分析,我发现了 Wine 软件包中“Wine Windows Program Loader”的有趣桌面文件。它有特殊选项Exec
场地:
Exec=wine start /unix %f
并强制在其目录中启动 exe 文件。
就我的情况来说,它可能适合~/.local/share/applications/wine32.desktop如下所示:
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon=mate-panel-launcher
Exec=/home/user/.PlayOnLinux/wine/linux-x86/6.15/bin/wine start /unix %f
Name=Local Wine32-6.15
因此不需要脚本部分,我们以具有特殊start /unix
选项的单个桌面文件结束。
注意:当从官方 Ubuntu 存储库安装 Wine 时,可以使用如下命令注册“Wine Windows 程序加载器” mkdir -p ~/.local/share/applications/ && cp /usr/share/doc/wine-stable/examples/wine.desktop ~/.local/share/applications/
。