Como passar arquivo como argumento no arquivo .desktop para o aplicativo wine

11

Na verdade, quero fazer duas perguntas:

  1. Onde posso encontrar mais informações sobre os atalhos de argumentos / parâmetros disponíveis para a entrada do Exec em arquivos da área de trabalho (como% U,% u,% f ...)

  2. Pergunta principal, como passar o arquivo como argumento no iniciador .desktop para aplicação wine?

Encontrei pesquisando aqui esta sugestão: z:%fque não serve para nada, como se eu simplesmente executasse o arquivo .desktop sem passar o arquivo, assume que esse argumento é z:e começa a verificar a z:"unidade"


Exemplo:

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

Quero soltar o arquivo XML no meu iniciador .desktop personalizado para este aplicativo wine e posso dessa maneira. O problema é que, se eu clicar no ícone do iniciador para evocar este programa, o argumento z:sempre é passado e isso não é aceitável

zetah
fonte
O que você está tentando fazer? Você pode adicionar um exemplo?
Bruno Pereira
Ei Bruno;) Eu pensei que era claro - eu criei um arquivo da área de trabalho (lançador de propósito) para o aplicativo wine e quero poder passar o arquivo para ele. Acima z:%fsolução alternativa não é bom como sempre que eu lançar esta aplicação vinho argumento z:é passado sobre ele e eu quero evitar isso
zetah
Então você tem um programa do Windows chamado (ie) application.exeque deseja passar o arquivo selecionado atual no nautilus para ele, ou seja file.txt?
Bruno Pereira
Desculpe, eu deveria ter adicionado exemplo no meu primeiro post. Eu adicionei agora
zetah 10/12/11
Eu tenho observado isso até agora e a única outra opção para isso é um script colocado na execlinha que verifica %fse, se existe, inicia o aplicativo no arquivo, se não apenas o inicia. Se importa com isso ou não é uma opção?
Bruno Pereira

Respostas:

8

É o melhor que posso até agora (exemplo do bloco 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 melhores respostas, considerando que sou iniciante

zetah
fonte
Veja minha melhoria abaixo para passar vários arquivos.
Harvey
1

Uma melhoria na resposta de zetah. Isso funciona para passar vários arquivos para o programa. O% f é alterado para% F (maiúsculo) para passar todos os arquivos descartados, substituindo o ^ (para o início da linha) pelo nome do caminho suficiente para torná-lo mais provável, único, o 'g' no final do comando sed para repetir a substituição de todos os arquivos passados ​​e, finalmente, $ em vez de / para que os caracteres \ escape não sejam necessários.

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

Também mudei o programa para ser executado em um caminho em que o nome do caminho não tem espaços, então mudei meu editor de boxer de:

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

para:

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

Havia muitas soluções hackish postadas neste tópico. Aqui está uma solução muito melhor que lida com vários arquivos e com espaços nos nomes de arquivos.

Crie o arquivo .desktop como costuma fazer, e simplesmente use esta linha 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 : se seu aplicativo puder manipular vários arquivos em uma única instância (por exemplo, um visualizador de PDF com várias guias) e você desejar que a instância atual seja focada automaticamente sempre que iniciar um novo arquivo, faça o seguinte:

  • Adicione esta linha ao arquivo .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
fonte
1

Uma linha Exec com um pipe de winepath para xargs, usado com aspas apropriadas e suas opções -0, funciona perfeitamente no Ubuntu 14.04 para abrir arquivos únicos e múltiplos.

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

Esta é a maneira que funcionou para mim em uma caixa RHEL 6.3 após algumas tentativas e erros e lendo a Especificação de entrada na área de trabalho. Não é específico ao vinho com argumentos, mas deve funcionar com algo parecido Exec=wine \"filename.exe\".

Espero que ajude alguém, pois levei algumas pesquisas para fazê-lo funcionar.

Eu acho que você precisa usar aspas duplas e evitá-las, assim como caracteres especiais usando uma barra invertida.

[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
fonte
0

Acabei de escrever um pequeno script Python que converte caminhos no estilo Unix no formato de caminho do Wine.

Faça o download do zip , extraia wine-launcher.py para sua pasta pessoal e edite seu arquivo .desktop desta maneira:

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