如何查看是否从terminal或GUI运行

我试图build立一个类,如果运行使用一个shell或从一个GUI行为是一种不同的方式。

它可以使用#include“myclass.h”包含在两个表单中…

不过,在构造函数中,我想区分Shell运行和GUI运行。

我可以很容易地实现它使用一个参数,将传递给构造函数时声明它,但我想探索我的select。

我在Ubuntu上使用C ++,我的GUI使用Qt。

Solutions Collecting From Web of "如何查看是否从terminal或GUI运行"

确定X Window是否存在的标准C方式:

 #include <stdlib.h> if (NULL == getenv("DISPLAY")) is_gui_present = false; else is_gui_present = true; 
  • 这允许在终端仿真器和纯粹的tty启动中区分伪终端。

如果你想确定是否有一个shell,或者应用程序是从一个文件管理器运行,那么这不是一件容易的事情:两种情况都只是调用一个shell或文件管理器/ GUI程序的exec系统调用(通常具有相同的参数),你需要明确地传递一个标志来看看。

PS我刚刚找到了一种方法:检查变量“TERM”的环境 – 它被设置为一个shell并继承到Qt程序,通常不会在GUI程序中设置。 但不要把这当成一个准确的解决方案!

从桌面启动程序(双击或从桌面文件/开始菜单)通常会将其stdin文件描述符重定向到管道。 你可以检测到这一点:

 #include <cstdio> // fileno() #include <unistd.h> // isatty() if (isatty(fileno(stdin))) // We were launched from the command line. else // We were launched from inside the desktop