2010-11-18 1 views
2

xlib로 모든 창 이벤트를 검색하려고합니다. XChangeWindowAttributes를 사용하여 루트 구조에 SubstructureRedirectMask를 추가했습니다. 나는이 프로그램을 실행하면, 그것은 다음과 같은 BadAccess을 보여 주었다 :xlib XChangeWindowAttributes를 사용하여 모든 XWindow 이벤트 검색

[email protected]:~/src/xwindow$ sudo ./tmp 
X Error of failed request: BadAccess (attempt to access private resource denied) 
    Major opcode of failed request: 2 (X_ChangeWindowAttributes) 
    Serial number of failed request: 7 
    Current serial number in output stream: 8 

이 프로그램은 다음입니다 :

/* 
    Simple Xlib application drawing a box in a window. 
    To Compile: gcc -O2 -Wall -o test test.c -L /usr/X11R6/lib -lX11 -lm 
    */ 

#include<X11/Xlib.h> 
#include<stdio.h> 
#include<stdlib.h> // prevents error for exit on line 18 when compiling with gcc 

int main() { 
    Display *d; 
    XEvent e; 

    /* open connection with the server */ 
    d = XOpenDisplay(NULL); 
    if (d == NULL) { 
     printf("Cannot open display\n"); 
     exit(1); 
    } 

    // sniffer events 
    XSetWindowAttributes attr; 

    attr.override_redirect = 1; 
    attr.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | 
     KeyReleaseMask | PointerMotionMask ; 
    XChangeWindowAttributes(d, XDefaultRootWindow(d), CWEventMask , &attr); 
    XSync(d, False); 

    /* event loop */ 
    while(1) { 
     XNextEvent(d, &e); 
     printf("event: %d\n", e.type); 
    } 

    /* close connection to server */ 
    XCloseDisplay(d); 

    return 0; 
} 

내가 SubstructureRedirectMask을 제거하면

는,이 도시 오류가 아닙니다된다. 그게 뭐가 잘못 됐는지 알아?

+0

xinit에서 직접 실행 하시겠습니까? – WhyMe

답변

0

한 번에 하나의 클라이언트 만 허용됩니다. 당신은 이미 그러한 클라이언트를 가지고 있습니다. 그것은 당신의 창 관리자입니다.