xdg-open を使用して実行可能ファイルを起動します。

xdg-open を使用して実行可能ファイルを起動します。

launchSystemFileWindowsなどのShellExecuteExコマンドラインまたはC ++で実行される関数を作成しようとしています。

私がすると、ShellExecuteExメインblah.txtエディタで開きます。私は実行可能ファイルShellExecuteExfirefox.exe起動します。

私はC ++でやっていて、popen "xdg-open blah"実行可能ファイルを除いてうまくいきます。

xdg-open実行を実行可能にする方法はありますか?たとえば、Firefoxのパスは/usr/lib/firefox/firefox

試しましたが、xdg-open "/usr/lib/firefox/firefox"次のエラーメッセージで失敗しました。

gvfs-open: /usr/lib/firefox/firefox: オープン位置エラー: このファイルを処理するために登録されたアプリケーションはありません。

答え1

xdg-openデスクトップ環境を検出し、そのプログラム(gnomeの場合はgvfs-open、XFCEの場合はexo-open、mate-openなど)を呼び出すために使用されるシェルスクリプトのみです。

したがって、実行可能ファイルの実行に関する制限は、各DEの対応する実行可能プログラム(あなたの場合はgvfs-open)から派生します。

見ているgvfs - マニュアルページを開く、このアプリケーション(他のDEアプリケーションと同様)は、設定gvfs-mimeで定義されているようにファイルタイプ別に登録されているデフォルトのアプリケーションのみを呼び出します。

あなたの場合、gvfs-openは起動する適切なアプリケーションを見つけようとし、失敗しますfirefox file

https://www.google.com

xdg-openシェルスクリプトの機能を見ると、そのファイルからExecアイテムを抽出する機能があり、.desktop一部のデスクトップ環境では、.desktopファイルのExecセクションのコマンドは単にxdg-openによって実行されます。

つまり、Firefox のように実行可能ファイルを呼び出したりxdg-open実行したりする必要はありません。gvfs-open

"firefox"を起動すると実行されます(例popen "/usr/bin/firefox":)

PS:または電話する必要があるかもしれません。(exec firefox &)

次のように、grepループを使用してすべての.desktopファイルのExecエントリを抽出することもできます。

for file in $(find /usr/share/applications/ -type f -name '*.desktop'); do
    executable=$(grep -m1 "^Exec=" "$file") #some files have more than one Exec entry
    echo "$file - $executable"
done

関連情報