使用 xdg-open 啟動執行檔
我正在嘗試從命令行或 C++編寫一個
launchSystemFile
像 windows 一樣工作的函式。ShellExecuteEx
如果我
ShellExecuteEx
在blah.txt
預設編輯器中打開它。如果我ShellExecuteEx
afirefox.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-open
或gvfs-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