wineアプリケーションの.desktopファイルで引数としてファイルを渡す方法


11

私は実際に2つの質問をしたいと思います。

  1. デスクトップファイル(%U、%u、%f ...など)のExecエントリに使用できる引数/パラメーターショートカットの詳細はどこで確認できますか?

  2. 主な質問、ワインアプリケーションの.desktopランチャーで引数としてファイルを渡す方法は?

私はここでこの提案を検索しました:z:%fこれは役に立たない、ファイルを渡さずに単に.desktopファイルを実行するかのように、引数は「ドライブ」であるz:と想定してスキャンを開始しますz:


例:

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

このワインアプリケーションのカスタム.desktopランチャーにXMLファイルをドロップしたいのですが、これを行うことができます。問題は、ランチャーアイコンをクリックしてこのプログラムを呼び出すと、引数z:が常に渡され、それが受け入れられないことです。


ところであなたは何をしようとしていますか?例を追加できますか?
Bruno Pereira、2011

Hey Bruno;)私はそれが明確だと思った-私はワインアプリケーション用のデスクトップファイル(目的-ランチャー)を作成し、それにファイルを渡せるようにしたいと思っています。上記のz:%f回避策は、このワインアプリケーションを起動するたびに引数z:が渡され、それを回避したいので、良いことではありません
zetah

つまり、(つまり)application.exenautilusで現在選択されているファイルをそれに渡すWindowsプログラムがありますfile.txt
Bruno Pereira

申し訳ありませんが、最初の投稿に例を追加する必要がありました。私は今それを追加しました
zetah

私はこれまでこれを見回してきましたが、他の唯一のオプションは、存在するかどうかexecを確認する行に配置されたスクリプトであり%f、アプリケーションを起動するだけでなく、ファイルでアプリケーションを起動します。それを気にかけますか、それともオプションではありませんか?
Bruno Pereira

回答:


8

これは私が今までで最高です(メモ帳の例)

[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

私は初心者なので、より良い答えを期待しています


複数のファイルを渡すには、以下の改善点をご覧ください。
Harvey


1

ゼタの答えの改善。これは、複数のファイルをプログラムに渡す場合に機能します。%fは%F(大文字)に変更され、ドロップされたすべてのファイルが渡されます。^(行の先頭)を一意にするのに十分なパス名に置き換え、末尾に「g」を付けます。 sedコマンドを使用して、渡されたすべてのファイルに対して置換を繰り返し、最後に/ではなく$を使用して、\エスケープ文字が不要になるようにします。

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

また、実行するプログラムを、パス名にスペースがないパスに移動したので、ボクサーエディターを次の場所から移動しました。

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

に:

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

1

このスレッドに投稿されたハックなソリューションがたくさんありました。ここでは、複数のファイルとファイル名にスペースを使用するより優れたソリューションを示します。

通常どおりに.desktopファイルを作成し、次の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'"

編集:アプリケーションが単一のインスタンス(たとえば、マルチタブPDFビューア)で複数のファイルを処理でき、新しいファイルを起動するたびに現在のインスタンスを自動フォーカスさせたい場合は、以下を実行する必要があります。

  • 次の行を.desktopファイルに追加します。 StartupWMClass=app.exe

  • 次の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

xargsへのwinepathのパイプを含む Exec行は、適切な引用とそれらの-0オプションとともに使用され、単一および複数のファイルを開くためにUbuntu 14.04で問題なく動作します。

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

0

これは、試行錯誤を繰り返し、デスクトップエントリの仕様を読んだ後、RHEL 6.3ボックスで動作する方法です。これは、引数を持つwineに固有のものではありませんが、などのように動作するはずExec=wine \"filename.exe\"です。

それが機能するようにするために私がいくつかの検索をしたときにそれが誰かを助けることを願っています。

二重引用符を使用し、バックスラッシュを使用して特殊文字と同様にエスケープする必要があると思います。

[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

UnixスタイルのパスをWineパス形式に変換する小さなPythonスクリプトを書いたところです。

zipをダウンロードしてwine-launcher.pyをホームフォルダーに抽出し、.desktopファイルを次のように編集します。

Exec=python ~/wine-launcher.py "program.exe" %F
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.