[英]Determine whether a program is a GUI or console application in Linux
我使用Qt-4作為框架在C ++中編程,給定一個目錄(即/ usr / bin)我想知道該程序是GUI還是控制台應用程序。
我發現了一些關於如何使用這個窗口的信息,以及關於Linux(在elf內)中類似(到Win)標識的不存在的信息。 有沒有其他方法可以在Linux上執行此操作?
我想:
EDIT0:這個項目是一個應用程序啟動器
編輯1:一旦我有分類的程序列表,我可以在用戶選擇非圖形應用程序時啟動終端模擬器
定論:
在人們回答並進行額外搜索之后,實際上無法可靠地辨別控制台和gui應用程序。 我最好的辦法是做一些考慮,例如搜索.desktop文件,做一些假設,比如在/ bin,/ sbin和/ usr / sbin等實用程序中列出的工具。
也許為每個找到的條目解析ldd的輸出。
謝謝。
程序可以嘗試作為GUI程序啟動,然后切換到控制台。 (實際上一些程序確實表現出這樣的行為,例如emacs
)。 它甚至可以隨機執行,或者由於某些特定配置...
例如,假設vi
是控制台程序並且emacs
是圖形程序,以下簡單程序可以隨機地是GUI或控制台:
#include <unistd.h>
int main(int argc, char**argv) {
if (getpid()%2 == 0)
{ argv[0]="vi"; execv("/usr/bin/vi", argv); }
else
{ argv[0]="emacs"; execv("/usr/bin/emacs", argv); }
return EXIT_FAILURE;
}
最簡單(但不是萬無一失)的方法是測試getenv("DISPLAY")
返回NULL。 更復雜的方法是調用XOpenDisplay
,它在失敗時返回NULL
(並且有幾個X11工具包可以做到這一點)。
所以,你的問題沒有一個確切的答案,並沒有真正的意義。
您可以使用ldd
....並手動添加像firefox
一樣的異常。
如果您正在編寫(又一個)應用程序啟動器,請按照創建所有其他應用程序啟動程序的人員的操作並使用.desktop
文件 。 該規范已經定義了Terminal
選項,這正是您正在尋找的選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.