Cómo pasar el archivo como argumento en el archivo .desktop para la aplicación de vino

11

De hecho, quiero hacer dos preguntas:

  1. ¿Dónde puedo encontrar más información sobre los accesos directos de argumentos / parámetros disponibles para la entrada Exec en archivos de escritorio (como% U,% u,% f ...)

  2. Pregunta principal, ¿cómo pasar el archivo como argumento en .desktop launcher para la aplicación de vino?

Encontré buscando aquí esta sugerencia: z:%fque no me sirve, como si simplemente ejecutara el archivo .desktop sin pasar el archivo, asume que el argumento es z:y comienza a escanear z:"drive"


Ejemplo:

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

Quiero colocar un archivo XML en mi lanzador .desktop personalizado para esta aplicación de vino y puedo hacerlo de esta manera. El problema es que si hago clic en el icono del iniciador para evocar este programa, z:siempre se pasa un argumento y eso no es aceptable

zetah
fuente
¿Qué estás tratando de hacer por cierto? ¿Puedes agregar un ejemplo?
Bruno Pereira
Hola Bruno;) Pensé que estaba claro: hice un archivo de escritorio (propósito - lanzador) para la aplicación de vino y quiero poder pasarle el archivo. La z:%fsolución anterior no es buena ya que cada vez que lanzo este argumento de la aplicación de vino z:se pasa y quiero evitar eso
zetah
Entonces, ¿tiene un programa de Windows llamado (es decir) application.exeque desea pasarle el archivo seleccionado actual en nautilus, es decir file.txt?
Bruno Pereira
Lo siento, debería haber agregado un ejemplo en mi primera publicación. Lo agregué ahora
zetah
He estado mirando esto hasta ahora y la única otra opción para esto es un script ubicado en la execlínea que verifica %fsi, si existe, inicie la aplicación en el archivo, si no solo inicie la aplicación. ¿Cuidarlo o no es una opción?
Bruno Pereira

Respuestas:

8

Esto es lo mejor que puedo hasta ahora (ejemplo de Bloc de notas)

[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

Espero mejores respuestas considerando que soy principiante

zetah
fuente
Vea mi mejora a continuación para pasar varios archivos.
Harvey
1

Una mejora en la respuesta de zetah. Esto funciona para pasar múltiples archivos al programa. El% f se cambia a% F (mayúscula) para pasar todos los archivos descartados, reemplazando ^ (para el comienzo de la línea) con suficiente nombre de ruta para que sea más probable que sea único, la 'g' al final del comando sed para hacer que el reemplazo se repita para todos los archivos pasados ​​y finalmente $ en lugar de / para que los caracteres \ escape no sean necesarios.

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

También moví el programa para que se ejecute a una ruta donde el nombre de la ruta no tiene espacios, así que moví mi editor de boxeador de:

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

a:

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

Hubo muchas soluciones hackeadas publicadas en este hilo. Aquí hay una solución mucho mejor que trata con múltiples archivos y con espacios en los nombres de archivo.

Cree el archivo .desktop como lo hace normalmente, y simplemente use esta línea 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'"

Editar : si su aplicación puede manejar múltiples archivos en una sola instancia (por ejemplo, un visor de PDF con múltiples pestañas) y desea que la instancia actual se enfoque automáticamente cada vez que inicie un nuevo archivo, entonces debe hacer lo siguiente:

  • Agregue esta línea al archivo .desktop: StartupWMClass=app.exe

  • Use este comando 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
fuente
1

Una línea Exec con un canal de winepath a xargs , utilizada con una cita adecuada y sus opciones -0, funciona perfectamente en Ubuntu 14.04 para abrir archivos únicos y múltiples.

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
fuente
0

Esta es la forma en que funcionó para mí en un cuadro RHEL 6.3 después de una prueba y error y leyendo la Especificación de entrada de escritorio. No es específico para el vino con argumentos, pero debería funcionar con algo así Exec=wine \"filename.exe\".

Espero que ayude a alguien, ya que me tomó un poco de búsqueda para que funcione.

Creo que debe usar comillas dobles y escapar de ellas, así como cualquier carácter especial que utilice una barra diagonal inversa.

[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;
usuario80295
fuente
0

Acabo de escribir un pequeño script de Python que convierte las rutas de estilo Unix al formato de ruta Wine.

Descargue el zip , extraiga wine-launcher.py en su carpeta de inicio y edite su archivo .desktop de esta manera:

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