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

11

Je veux en fait poser deux questions:

  1. Où puis-je trouver plus d'informations sur les raccourcis arguments / paramètres disponibles pour l'entrée Exec dans les fichiers de 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é en recherchant ici cette suggestion: z:%fqui ne m'est d'aucune utilité, comme si je lance simplement un fichier .desktop sans passer de fichier dessus, il suppose que cet argument est z:et commence à analyser z:"lecteur"


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 et je peux le faire de cette façon. 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

zetah
la source
Qu'essayez-vous de faire btw? Pouvez-vous ajouter un exemple?
Bruno Pereira
Hé Bruno;) Je pensais que c'était clair - j'ai fait un fichier de bureau (but - lanceur) pour l'application wine et je veux pouvoir passer un fichier dessus. La z:%fsolution de contournement ci- dessus n'est pas bonne, car chaque fois que je lance cet argument d'application vin z:est transmis et je veux éviter cela
zetah
Vous avez donc un programme Windows appelé (c.-à-d.) application.exeQue vous voulez lui transmettre le fichier sélectionné en cours dans Nautilus, c. file.txt-à- d. ?
Bruno Pereira
Désolé, j'aurais dû ajouter un exemple dans mon premier post. Je l'ai ajouté maintenant
zetah
J'ai regardé cela jusqu'à présent et la seule autre option pour cela est un script placé dans la execligne qui vérifie %fs'il existe, lancez l'application sur le fichier, sinon lancez simplement l'application. Prenez-en soin ou n'est-ce pas une option?
Bruno Pereira

Réponses:

8

C'est le mieux 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

zetah
la source
Voir mon amélioration ci-dessous pour passer plusieurs fichiers.
Harvey
1

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 passer tous les fichiers déposés, en remplaçant le ^ (pour le début de la ligne) par suffisamment de nom de chemin pour le rendre plus probablement unique, le 'g' à la fin de la commande sed pour que le remplacement se répète pour tous les fichiers passés et enfin le $ au lieu du / afin 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 vers un chemin où le chemin n'a pas d'espace, j'ai donc déplacé mon éditeur de boxeur de:

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

à:

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

Il y avait beaucoup de solutions piratées publiées dans ce fil. Voici une bien meilleure solution 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'"

Modifier : si votre application peut gérer plusieurs fichiers dans une seule instance (par exemple une visionneuse PDF à onglets multiples) et que vous souhaitez que l'instance actuelle soit mise au point automatiquement chaque fois que vous lancez un nouveau fichier, vous devez effectuer les opérations suivantes:

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

Une ligne Exec avec un tuyau de winepath vers xargs, utilisée avec des citations appropriées et leurs options -0, fonctionne parfaitement dans Ubuntu 14.04 pour ouvrir des fichiers simples et 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'"
lbo
la source
0

C'est la façon dont je viens de travailler 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 quelques 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 à l'aide d'une barre oblique inverse.

[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
la source
0

Je viens d'écrire un petit script Python qui convertit les chemins de style Unix en format Wine Path.

Téléchargez le zip , extrayez wine-launcher.py dans votre dossier personnel et éditez votre fichier .desktop comme ceci:

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