web-dev-qa-db-ja.com

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

私は実際に2つの質問をしたいです:

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

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

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


例:

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

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

10
zetah

これは私がこれまでのところできることです(メモ帳の例)

[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

私は初心者だと考えてより良い答えを期待しています

6
zetah

最初の質問については、 デスクトップエントリ仕様-Execキー をご覧ください。

4
enzotib

このスレッドには多くのハック的なソリューションが投稿されました。これは、複数のファイルとファイル名のスペースを扱う、はるかに優れたソリューションです。

通常どおり.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
Caleb

適切なクォートとその-0オプションで使用されるwinepathからxargsへのパイプを持つExec行は、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'"
1
lbo

ゼータの答えの改善。これは、プログラムに複数のファイルを渡すために機能します。 %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
Harvey

これは、試行錯誤を重ねてデスクトップエントリ仕様を読んだ後、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
user80295

UnixスタイルのパスをWineパス形式に変換する小さな Pythonスクリプト を作成しました。

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

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