File-Opening

使用 xdg-open 啟動執行檔

  • June 11, 2021

我正在嘗試從命令行或 C++編寫一個launchSystemFile像 windows 一樣工作的函式。ShellExecuteEx

如果我ShellExecuteExblah.txt預設編輯器中打開它。如果我ShellExecuteExafirefox.exe它啟動執行檔。

我一直在用 C++ 做,popen "xdg-open blah"除了執行檔外它工作得很好。

無論如何要xdg-open執行執行檔嗎?比如 Firefox 在 path /usr/lib/firefox/firefox

我試過xdg-open "/usr/lib/firefox/firefox"了,但失敗並顯示錯誤消息:

gvfs-open:/usr/lib/firefox/firefox:錯誤打開位置:沒有應用程序註冊為處理此文件

xdg-open只是一個檢測桌面環境並呼叫相應程序的shell腳本(gvfs-open for gnome,exo-open for XFCE,mate-open等)

因此,啟動執行檔的限制來自每個 DE 的相應啟動器,在您的情況下是 gvfs-open。

查看gvfs-open 手冊頁,這個應用程序(類似於其他 DE 應用程序)只是呼叫按文件類型註冊的預設應用程序,因為它是由gvfs-mime設置定義的。

在您的情況下, gvfs-open 嘗試(但失敗)找到相應的應用程序來啟動firefox file.

如果您使用 html 連結執行 xdg-open(或 gvfs-open)https://www.google.com,那麼應該可以正常工作;gvfs-open 將搜尋 mime 數據庫以查找如何處理 html 連結,mime 會建議呼叫 firefox,然後會呼叫 firefox。

查看 xdg-open shell 腳本函式,有一些函式可以Exec從相應.desktop文件中提取條目,並且在某些桌面環境下,在 .desktop 文件的 Exec 部分中找到的命令只是由 xdg-open 執行。

換句話說,您不必呼叫xdg-opengvfs-open啟動像 firefox 這樣的執行檔。

只需啟動“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

引用自:https://unix.stackexchange.com/questions/340531