作為一名試圖從 Windows 7 遷移的新 Linux“超級用戶”,我一直拒絕提出可以透過搜尋來回答的基本問題,但我一直堅持這一點。
當我在 Linux 終端機中使用 gcc 從 C 建立可執行檔時,稱hello.exe
它已被授予X
權限。然後從終端我可以./hello.exe
毫無問題地運行。
但是當我嘗試從 Caja 運行它時,它只是將其組件顯示為文字檔案。但是,我可以選擇“以管理員身份運行”,但隨後我必須輸入登入密碼。
這與啟用這兩個設定中的哪一個無關:
- 打開可執行文字檔案時運行它們。
- 開啟可執行文字檔案時查看它們。
不過,我將其保留為第二個設置,否則每次查看或編輯文字檔案時都會被問到我想做什麼。
我嘗試使用sudo caja
(需要密碼)從終端啟動 Caja,但是 Caja 不會運行可執行文件 根本不因為“運行”選項不再存在。
如何直接從 Caja 運行可執行檔:雙擊?
編輯:您可以運行可執行檔嗎任何只需雙擊即可開啟檔案總管?
編輯 2:現在使用 Nemo 檔案管理器運行 Mint Cinnamon,但問題基本上相同。我是否缺少一些允許直接運行可執行檔的設定?
編輯3:
在我的研究過程中我發現
GNOME 正在刪除 Nautilus 啟動二進位應用程式的能力:
“或者,換句話說,你將無法使用 Nautilus 雙擊程式、腳本或應用程式來啟動它們。” (2018年5月)
正如我懷疑文件管理器作者將它們開發為開源程式碼的衍生物(或可能使用通用系統元件)一樣,也許他們現在都沒有這樣做。
我還找到了這個維基百科頁面文件管理器的比較有各種桌子。那個叫文件特徵最後一欄是“運行可執行檔”,所以我嘗試了其中的幾個檔案管理器。
- 沒有任何其中一些將運行我編譯的可執行檔(其中一些甚至不允許輕鬆存取我的工作驅動器 - 這永遠不是系統驅動器)。
但無論如何,我現在發現了一個簡單的解決方法,那就是我最喜歡的文本編輯器Geany 將通過單擊或按F5 按鍵來運行當前源文件的可執行檔(如果存在),而不會將其放入項目中。
答案1
是的,您可以從檔案總管(例如 Caja)執行可執行檔。
hello.c
假設您的主目錄中有一個文件,/home/User
其中包含一個沒有 GUI 的簡單「hello, world」程序,例如:
#include <stdio.h>
int main()
{
printf("hello, world\n");
}
程式運行後編譯gcc -o hello hello.c
產生可執行檔hello
。
要直接從 Caja 啟動hello
,您可以提供一個啟動器來啟動終端並在其中運行可執行文件,或者您可以提供帶有簡單 GUI 的可執行檔。
如果您打算使用啟動器,那麼在執行任何其他操作之前(除非您之前已經執行過此操作),最好打開一個終端,轉到“首選項”,添加一個名為“HoldOpen”的新配置文件,然後設定「當命令退出時」將該設定檔的「命令」標籤上的「保持終端開啟」。否則,終端將開啟、運行程序,然後在您從啟動器啟動時看到任何結果之前關閉。
然後為該hello
程式建立一個啟動器。啟動器只是一個帶有.desktop
擴展名的文字檔案;從概念上講,它類似於 Windows 快捷方式。當檔案出現在 Caja 中時,副.desktop
檔名不會顯示,但在終端機的目錄清單中可見。一個簡單的啟動器,應按原樣保存hello.desktop
:
[Desktop Entry]
Version=1.0
Type=Application
Name=hello
Comment=
Exec=mate-terminal --profile=HoldOpen -e "/home/User/hello"
Icon=
Path=
Terminal=false
StartupNotify=false
啟動器可以手動編寫,或者(如上面的那樣)通過右鍵單擊桌面,選擇“創建啟動器...”,並至少填寫“名稱”和“命令”框(後者對應於“Exec”鍵) 。
雙擊 Caja 中的啟動器檔案應hello
在其自己的終端機中啟動並在其中顯示其輸出。
請注意,“Terminal”鍵設定為“false”,因為它實際上是正在運行的 mate-terminal,並且hello
是在 mate-terminal 中運行。
另請注意,如果您使用 gnome-terminal 而不是 mate-terminal,則可能需要在“hello, world”之前添加幾個換行符才能在終端中看到輸出。
有關啟動器的更多信息,請參閱 Freedesktop.org桌面入門規格。
另一種允許在 Caja 中直接雙擊運行程式而不需要啟動器的替代方案是使用 Zenity 應用程式根據需要產生 GUI 對話框,從而為程式提供簡單的 GUI。您應該能夠透過運行來安裝 Zenity sudo apt-get install zenity
。然後,可以將hello.c程式中的printf語句替換為stdio,並用stdlib和系統呼叫來顯示對話框:
#include <stdlib.h>
int main()
{
system("zenity --info --title='Hello' --text='hello, world'");
}
man zenity
有關 Zenity 應用程式的更多信息,請參閱 參考資料。