a function이 데비안의 X 래퍼에 사용됩니다. 이 함수는 X가 콘솔 (가상 터미널)에서 실행 중인지 여부를 결정합니다.이 함수는 linux와 freebsd에서 작동합니다.illumos/solaris의 콘솔에서 실행 중인지 확인
illumos/solaris에서 동일한 작업을 수행하는 방법은 무엇입니까?
a function이 데비안의 X 래퍼에 사용됩니다. 이 함수는 X가 콘솔 (가상 터미널)에서 실행 중인지 여부를 결정합니다.이 함수는 linux와 freebsd에서 작동합니다.illumos/solaris의 콘솔에서 실행 중인지 확인
illumos/solaris에서 동일한 작업을 수행하는 방법은 무엇입니까?
VT_GETSTATE
ioctl은 Solaris 11에서 활성 VT를 결정하는 데 사용할 수 있습니다. 자세한 내용은 vt(7I) man page을 참조하십시오.
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");
그래, 나는 KDGETMODE를 사용했다. 내 문제는 ioctl이 어떻게 사용되는지 이해하지 못했다는 것이다 :-). 아이디어는 간단합니다. console ioctl은 콘솔에서만 작동합니다. – Igor