Puncte:1

Cum se creează desktop-launcher pentru aplicația .exe care ar trebui să fie lansată folosind wine în directorul său?

drapel zw

Am o aplicație MS Windows care necesită o nouă versiune de Wine. L-am instalat local în folderul de acasă folosind PlayOnLinux.

Sunt blocat să creez un script simplu bash/dash/sh pentru a lansa aplicația .exe în folderul său. Am incercat standard pushd/popd, cd && exec, (cd && exec) abordare, dar nu a reușit.

Ceea ce am nevoie:

  • Fișier desktop ca lansator pentru un script

  • Un script care:

    1. schimbă directorul în directorul aplicației .exe
    2. execută vin .exe în directorul aplicației

În prezent, sunt mulțumit de următorul cod Python pentru scriptul wrapper (care urmează să fie plasat în /usr/local/bin/wine32-wrapper):

#!/usr/bin/python3
import os
import sys
subproces de import

dacă len(sys.argv) >= 2:
    cale = sys.argv[1]
    wd = os.path.dirname(cale)
    exec_path = ["/home/{}/.PlayOnLinux/wine/linux-x86/6.15/bin/wine".format(os.getenv('USER'), cale), "{}".format(cale)]
    p = subprocess.run(exec_path, cwd=wd)
altceva:
    print("\nUtilizarea {} cu un argument - calea completă a fișierului.".format(sys.argv[0]));

și .desktop-file (de plasat în ~/.local/share/applications/wine32.desktop), pentru aceasta:

#!/usr/bin/env xdg-open
[Intrare pe desktop]
Versiunea=1.0
Tip=Aplicație
Terminal=fals
Pictogramă=mate-panel-lansator
Exec=wine32-wrapper %f
Nume=Vin local32-6.15

apoi îmi asociez fișierele exe cu acest script de vin folosind Caja.

Este posibil să înlocuiți scriptul python de mai sus cu scriptul bash/dash/sh cu exact aceeași funcționalitate?

jpbrain avatar
drapel ca
Bună Norbert. nu este suficient pentru a pune xdg-open pe linia exec cu %F?
N0rbert avatar
drapel zw
Mulțumesc, @jpbrain, Nu este suficient, deoarece aplicația .exe citește datele din directorul său.
Puncte:1
drapel cn

Pentru intrările Desktop există un cale parametru disponibil. Iată cum arată lansatorul StarCraft II (creat în timpul instalării de către Wine):

[Intrare pe desktop]
Nume=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
Tip=Aplicație
StartupNotify=true
Comentariu=Joacă StarCraft II
Path=/home/spas/.wine/dosdevices/c:/Program Files (x86)/StarCraft II
Pictogramă=89A5_StarCraft II.0
StartupWMClass=starcraft ii.exe
N0rbert avatar
drapel zw
Problema aici este că „Calea” este dinamică. Nu pot prezice din ce director va lansa .exe. Imaginează-ți situația în care .exe își citește .ini (sau DB, sau o resursă) din același director.
Puncte:1
drapel zw

După câteva analize mai profunde, am găsit fișiere desktop bune și interesante pentru „Wine Windows Program Loader” care provin din pachetele Wine. Are opțiuni speciale în Exec camp:

Exec=vin porniți /unix %f

și forțează lansarea fișierului exe în directorul său.

Pentru cazul meu poate fi adaptat ~/.local/share/applications/wine32.desktop așa cum se arată mai jos:

#!/usr/bin/env xdg-open
[Intrare pe desktop]
Versiunea=1.0
Tip=Aplicație
Terminal=fals
Pictogramă=mate-panel-lansator
Exec=/home/user/.PlayOnLinux/wine/linux-x86/6.15/bin/wine start /unix %f
Nume=Vin local32-6.15

Astfel, partea de script nu este necesară, încheiem cu un singur fișier desktop cu special porniți /unix opțiune.

Notă: atunci când Wine este instalat din depozitele oficiale Ubuntu, astfel de „Wine Windows Program Loader” pot fi înregistrate folosind comenzi precum mkdir -p ~/.local/share/applications/ && cp /usr/share/doc/wine-stable/examples/wine.desktop ~/.local/share/applications/ .

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.