确定在illumos/solaris上是否在控制台上运行

问题描述:

在Debian的X包装中使用了a function。这个函数确定X是否在控制台(虚拟终端)上运行,它可以在linux和freebsd上运行。确定在illumos/solaris上是否在控制台上运行

有什么办法可以在Illumos/solaris上做同样的事情?

VT_GETSTATE ioctl可用于确定Solaris 11上的活动VT。有关详细信息,请参阅vt(7I) man page

+0

是的,我用KDGETMODE。我的问题是我不明白如何使用ioctl :-)。这个想法很简单:控制台ioctl仅适用于控制台。 – Igor 2013-06-20 07:09:59

diff --git a/debian/local/xserver-wrapper.c b/debian/local/xserver-wrapper.c 
index d4a6ab8..31e5343 100644 
--- a/debian/local/xserver-wrapper.c 
+++ b/debian/local/xserver-wrapper.c 
@@ -116,6 +116,9 @@ 
#define TTY_MAJOR_DEV 4 
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) 
#include <sys/consio.h> 
+#elif defined(__sun__) 
+#include <sys/kd.h> 
+#include <sys/vt.h> 
#endif 

#define X_WRAPPER_CONFIG_FILE "/etc/X11/Xwrapper.config" 
@@ -171,6 +174,10 @@ onConsole() 

    if (ioctl(0, VT_GETINDEX, &idx) != -1) 
    return TRUE; 
+#elif defined(__sun__) 
+ int mode; 
+ if (ioctl(0, KDGETMODE, &mode) != -1) /* mode = 0 (KD_TEXT) or 1 (KD_GRAPHICS) */ 
+ return TRUE; 
#else 
#warning This program needs porting to your kernel. 
    (void) fprintf(stderr, "X: unable to determine if running on a console\n");