Показать статистику
0 голосов
от (1.7тыс. баллов)

У меня есть приложение MS Windows, которому нужна новая версия Wine. Я установил его локально в домашнюю папку с помощью PlayOnLinux.

Я застрял в создании простого сценария bash/dash/sh для запуска приложения .exe внутри своей папки. Я пробовал стандартный подход, pushd/popd но он не удался .cd && exec(cd && exec)

Что мне нужно:

  • Desktop-файл как пусковая установка для скрипта

  • Скрипт, который:

    1. изменяет каталог на каталог приложения .exe
    2. выполняется 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

затем я связываю свои exe-файлы с этим  скриптом wine, используя Caja.

Можно ли заменить вышеприведенный скрипт python скриптом bash/dash/sh с точно такой же функциональностью?

261 просмотров 2 ответов

2 Ответы

0 голосов
от (26.4тыс. баллов)

Для записей Desktop доступен параметр Path . Вот как выглядит лаунчер StarCraft 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
0 голосов
от (2.7тыс. баллов)

После более глубокого анализа я нашел хорошие и интересные файлы рабочего стола для "Wine Windows Program Loader", которые пришли из пакетов Wine. Он имеет специальные параметры в 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 .

Примечание: когда Wine устанавливается из официальных репозиториев Ubuntu, такой « Wine Windows Program Loader » можно зарегистрировать с помощью таких команд, как

 mkdir -p ~/.local/share/applications/ && cp /usr/share/doc/wine-stable/examples/wine.desktop ~/.local/share/applications/.
...