So übergeben Sie eine Datei als Argument in einer .desktop-Datei für eine Weinanwendung

10

Ich möchte eigentlich zwei Fragen stellen:

  1. Wo finde ich mehr über verfügbare Argumente / Parameter-Verknüpfungen für den Exec-Eintrag in Desktop-Dateien (wie% U,% u,% f ...)?

  2. Hauptfrage, wie Datei als Argument auf .desktop Launcher für Weinanwendung übergeben werden?

Ich habe hier nach diesem Vorschlag gesucht: z:%fWas für mich nicht von Nutzen ist, als ob ich einfach eine .desktop-Datei ausführen würde, ohne eine Datei darauf zu übergeben. Es wird davon ausgegangen, dass das Argument "Laufwerk" ist z:und mit dem Scannen beginnt.z:


Beispiel:

[Desktop Entry]
Name=Some Windows program
Exec=wine "program.exe" z:%f
Type=Application
Terminal=false
MimeType=application/docbook+xml

Ich möchte eine XML-Datei auf meinem benutzerdefinierten .desktop-Launcher für diese Weinanwendung ablegen und kann dies auf diese Weise. Das Problem ist, dass, wenn ich auf das Startsymbol klicke, um dieses Programm aufzurufen, z:immer Argumente darüber weitergegeben werden und dies nicht akzeptabel ist

Zetah
quelle
Was versuchst du übrigens zu tun? Können Sie ein Beispiel hinzufügen?
Bruno Pereira
Hey Bruno;) Ich dachte, es ist klar - ich habe eine Desktop-Datei (Zweck - Launcher) für die Weinanwendung erstellt und möchte die Datei weitergeben können. Die z:%fz:
obige Problemumgehung
Sie haben also ein Windows-Programm namens (dh) application.exe, an das Sie die aktuell ausgewählte Datei in nautilus übergeben möchten, dh file.txt?
Bruno Pereira
Entschuldigung, ich hätte in meinem ersten Beitrag ein Beispiel hinzufügen sollen. Ich habe es jetzt hinzugefügt
Zetah
Ich habe mich bis jetzt umgesehen und die einzige andere Option dafür ist ein Skript in der execZeile, das prüft %f, ob die Anwendung in der Datei gestartet wird, wenn nicht nur die Anwendung gestartet wird. Kümmere dich darum oder ist es keine Option?
Bruno Pereira

Antworten:

6

Dies ist das Beste, was ich bisher konnte (Notepad-Beispiel)

[Desktop Entry]
Name=Notepad
Exec=sh -c "echo %f | sed 's/^\//z:\//' | xargs wine /home/zetah/.wine/drive_c/windows/notepad.exe"
Type=Application
Terminal=false
Categories=Wine
MimeType=text/plain

Ich erwarte bessere Antworten, wenn ich Anfänger bin

Zetah
quelle
Siehe meine Verbesserung unten für die Übergabe mehrerer Dateien.
Harvey
1

Eine Verbesserung der Antwort von Zetah. Dies funktioniert zum Übergeben mehrerer Dateien an das Programm. % F wird in% F (Großbuchstaben) geändert, um alle abgelegten Dateien zu übergeben. Dabei wird das ^ (für den Zeilenanfang) durch genügend Pfadnamen ersetzt, um die Wahrscheinlichkeit eindeutiger zu machen, das 'g' am Ende des Befehls sed, damit die Ersetzung für alle übergebenen Dateien wiederholt wird, und schließlich das $ anstelle des /, sodass die Zeichen \ Escape nicht erforderlich sind.

Exec=sh -c "echo %F | sed 's$/home$z:/home$g' | xargs wine /home/owner/.wine/dosdevices/c:/Progs/Boxer/b.exe"

Ich habe auch das auszuführende Programm in einen Pfad verschoben, in dem der Pfadname keine Leerzeichen enthält. Deshalb habe ich meinen Boxer-Editor verschoben von:

/home/owner/.wine/dosdevices/c:/Program Files/Boxer Text Editor/

zu:

/home/owner/.wine/dosdevices/c:/Progs/Boxer/
Harvey
quelle
1

In diesem Thread wurden viele hackige Lösungen veröffentlicht. Hier ist eine viel bessere Lösung, die sich mit mehreren Dateien und Leerzeichen in Dateinamen befasst.

Erstellen Sie die .desktop-Datei wie gewohnt und verwenden Sie einfach diese Exec-Zeile:

Exec=/usr/bin/env bash -c "printf 'z:%%q\\n' %F | WINEPREFIX='/home/<your username>/.wine' xargs wine 'C:\\Path\\to the executable\\app.exe'"

Bearbeiten : Wenn Ihre Anwendung mehrere Dateien in einer Instanz verarbeiten kann (z. B. einen PDF-Viewer mit mehreren Registerkarten) und Sie möchten, dass die aktuelle Instanz beim Starten einer neuen Datei automatisch fokussiert wird, müssen Sie folgende Schritte ausführen:

  • Fügen Sie diese Zeile zur .desktop-Datei hinzu: StartupWMClass=app.exe

  • Verwenden Sie diesen Exec-Befehl:

    Exec=/usr/bin/env bash -c "(printf 'z:%%q\\n' %F | WINEPREFIX='/home/<your username>/.wine' xargs wine 'C:\\Path\\to the executable\\app.exe' &); xdotool windowactivate \$(xdotool search --sync --onlyvisible --class \"app.exe\")"
    
Caleb
quelle
1

Eine Exec-Zeile mit einer Pipe Winepath zu Xargs , die mit korrektem Anführungszeichen und ihren -0-Optionen verwendet wird, funktioniert in Ubuntu 14.04 einwandfrei zum Öffnen einzelner und mehrerer Dateien.

Exec=/usr/bin/env sh -c "winepath -w -0 %F | WINEPREFIX='/home/your_user_name/.wine' xargs -0 wine 'C:\\\\Program Files\\\\Some Vendor\\\\SomeProgram.exe'"
lbo
quelle
0

Dies ist die Art und Weise, die gerade für mich an einer RHEL 6.3-Box nach einigem Ausprobieren und Lesen der Desktop-Eintragsspezifikation funktioniert hat. Es ist nicht spezifisch für Wein mit Argumenten, aber es sollte mit so etwas funktionieren Exec=wine \"filename.exe\".

Ich hoffe, es hilft jemandem, da ich etwas gesucht habe, um es zum Laufen zu bringen.

Ich denke, Sie müssen doppelte Anführungszeichen verwenden und diese sowie alle Sonderzeichen mit einem Backslash maskieren.

[Desktop Entry]
Version=1.0
Name=Ansys User Lic Prefs 12.1
GenericName=Ansys User Lic Prefs 12.1
Comment=Ansys User License Prefs 12.1
Encoding=UTF-8
Exec=anslic_admin \"\-userprefs121\"
Icon=ansysLogo_16x16.png
Terminal=false
Type=Application
Categories=Ansys;
user80295
quelle
0

Ich habe gerade ein kleines Python-Skript geschrieben, das Pfade im Unix-Stil in das Wine-Pfadformat konvertiert.

Laden Sie die Zip- Datei herunter , extrahieren Sie wine-launcher.py in Ihren Home-Ordner und bearbeiten Sie Ihre .desktop-Datei wie folgt :

Exec=python ~/wine-launcher.py "program.exe" %F
Ivan Filho
quelle