web-dev-qa-db-fra.com

Comment passer un fichier comme argument dans un fichier .desktop pour une application Wine

En fait, je veux poser deux questions:

  1. Où puis-je trouver plus d'informations sur les raccourcis d'arguments/paramètres disponibles pour l'entrée Exec dans les fichiers du bureau (comme% U,% u,% f ...)

  2. Question principale, comment passer le fichier en argument sur le lanceur .desktop pour l’application Wine?

J'ai trouvé ici la recherche suivante: z:%f qui ne m’aide en rien, comme si j’exécutais simplement un fichier .desktop sans lui transmettre de fichier, il supposait que l’argument était z: et commençait à numériser z: "conduire"


Exemple:

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

Je veux déposer un fichier XML sur mon lanceur .desktop personnalisé pour cette application Wine, ce que je peux faire. Le problème est que si je clique sur l'icône du lanceur pour évoquer ce programme, l'argument z: est toujours transmis et ce n'est pas acceptable.

10
zetah

C’est la meilleure chose que je puisse faire jusqu’à présent (exemple du Bloc-notes)

[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

J'attends de meilleures réponses étant donné que je suis débutant

6
zetah

Pour la première question, vous pouvez jeter un oeil à touche d’entrée de bureau - La touche Exec

4
enzotib

Il y avait beaucoup de solutions hackish postées dans ce fil. Voici une solution bien meilleure qui traite de plusieurs fichiers et des espaces dans les noms de fichiers.

Créez le fichier .desktop comme vous le faites habituellement et utilisez simplement cette ligne Exec:

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'"

Édition: Si votre application peut gérer plusieurs fichiers en une seule instance (par exemple, une visionneuse PDF à plusieurs onglets) et que vous souhaitez que l'instance actuelle soit automatiquement mise au point à chaque lancement. un nouveau fichier, vous devez procéder comme suit:

  • Ajoutez cette ligne au fichier .desktop: StartupWMClass=app.exe

  • Utilisez cette commande Exec:

    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\")"
    
1
Caleb

Une ligne Exec avec un pipe de winepath to xargs, utilisée avec des citations appropriées et leurs options -0, fonctionne parfaitement dans Ubuntu 14.04 pour ouvrir des fichiers uniques ou multiples.

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'"
1
lbo

Une amélioration de la réponse de zetah. Cela fonctionne pour passer plusieurs fichiers au programme. Le% f est changé en% F (majuscule) pour transmettre tous les fichiers supprimés, en remplaçant le ^ (pour le début de la ligne) par suffisamment de nom de chemin pour le rendre probablement unique, le 'g' à la fin. de la commande sed pour que le remplacement se répète pour tous les fichiers transmis et enfin le $ au lieu du/de sorte que les caractères\escape ne soient pas nécessaires.

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

J'ai également déplacé le programme à exécuter sur un chemin où le nom du chemin ne contient aucun espace. J'ai donc déplacé mon éditeur de boxer de:

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

à:

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

C’est ce qui a fonctionné pour moi sur une boîte RHEL 6.3 après quelques essais et erreurs et la lecture de la spécification d’entrée de bureau. Ce n'est pas spécifique au vin avec des arguments, mais cela devrait fonctionner avec quelque chose comme Exec=wine \"filename.exe\".

J'espère que cela aide quelqu'un, car il m'a fallu des recherches pour le faire fonctionner.

Je pense que vous devez utiliser des guillemets doubles et les échapper, ainsi que tous les caractères spéciaux en utilisant une barre oblique inversée.

[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;
0
user80295

Je viens d'écrire un minuscule script Python qui convertit les chemins d'accès de type Unix au format chemin d'accès Wine.

Téléchargez le Zip , extrayez wine-launcher.py dans votre dossier personnel et modifiez votre fichier .desktop comme suit:

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