문제

은 거기에 좋은 라이브러리를 사용할 수집하는 사용자 입력에서 리눅스에서는 마우스/키보드/조이스틱 하지 않는 힘을 만드 표시 창을까?SDL 을 얻을 수 있는 사용자 입력에서 합리적인 방법으로,하지만 보인다 너를 만드는 창에 골칫거가 있는 경우 추상화되어도록 통제 기계를 하지 않는 것 같은 기계를 만듭니다.그러나,경우에는 제어하고 렌더링 기계가 동일한,이 결과로 생긴 작은 SDL 창의 상단에 표시됩니다.

편집을 명확히:
렌더러 출력 창에서 정상적인 사용 경우,해당 창에서 전면 경우를 제외하고,그들은 모두 동일한 컴퓨터에서 실행되는,단지 그래서 그것을 가능하게 컨트롤러의 초점입니다.이 실제로 여러 개의 렌더러로 표시하는 다른 뷰의 데이터에 서로 다른 컴퓨터에 의해 제어되는 모든 동 컨트롤러,따라서 총을 분리한 입력 출력에서(기 활용에 내장 된 X11 클라이언트/서버에 물건을 표시하기 위해 적용)또한,여러 개의 컨트롤러 응용 프로그램 중 하나에 대한 렌더러도 가능합니다.통신 사 컨트롤러 및 렌더러는 소켓을 통해.

도움이 되었습니까?

해결책

OK,는 경우에는 X11 및을 얻고 싶은 당신 kbd,당신이 할 필요가 있습니다.하지 않은 경우,나만 좋은 대답은 ncurses 에서 터미널도 있습니다.

여기에 당신이 어떻게 모든 것을 잡아에서 키보드와 출시 다시:

/* Demo code, needs more error checking, compile
 * with "gcc nameofthisfile.c -lX11".

/* weird formatting for markdown follows.  argh! */

#include <X11/Xlib.h>

int main(int argc, char **argv)
{
   Display *dpy;
   XEvent ev;
   char *s;
   unsigned int kc;
   int quit = 0;

   if (NULL==(dpy=XOpenDisplay(NULL))) {
      perror(argv[0]);
      exit(1);
   }

   /*
    * You might want to warp the pointer to somewhere that you know
    * is not associated with anything that will drain events.
    *  (void)XWarpPointer(dpy, None, DefaultRootWindow(dpy), 0, 0, 0, 0, x, y);
    */

   XGrabKeyboard(dpy, DefaultRootWindow(dpy),
                 True, GrabModeAsync, GrabModeAsync, CurrentTime);

   printf("KEYBOARD GRABBED!  Hit 'q' to quit!\n"
          "If this job is killed or you get stuck, use Ctrl-Alt-F1\n"
          "to switch to a console (if possible) and run something that\n"
          "ungrabs the keyboard.\n");


   /* A very simple event loop: start at "man XEvent" for more info. */
   /* Also see "apropos XGrab" for various ways to lock down access to
    * certain types of info. coming out of or going into the server */
   for (;!quit;) {
      XNextEvent(dpy, &ev);
      switch (ev.type) {
         case KeyPress:
            kc = ((XKeyPressedEvent*)&ev)->keycode;
            s = XKeysymToString(XKeycodeToKeysym(dpy, kc, 0));
            /* s is NULL or a static no-touchy return string. */
            if (s) printf("KEY:%s\n", s);
            if (!strcmp(s, "q")) quit=~0;
            break;
         case Expose:
               /* Often, it's a good idea to drain residual exposes to
                * avoid visiting Blinky's Fun Club. */
               while (XCheckTypedEvent(dpy, Expose, &ev)) /* empty body */ ;
            break;
         case ButtonPress:
         case ButtonRelease:
         case KeyRelease:
         case MotionNotify:
         case ConfigureNotify:
         default:
            break;
      }
   }

   XUngrabKeyboard(dpy, CurrentTime);

   if (XCloseDisplay(dpy)) {
      perror(argv[0]);
      exit(1);
   }

   return 0;
}

이에서는 터미널의 모든 kbd 이벤트해야 합니다.나는 그것을 테스트에서 Xorg 하지만 그것을 사서,안정적인 부분 또는 전는 메커니즘이 있습니다.

이게 도움이 되었으면 좋겠습니다.

주의 잡고 아래 X새로운 때,그들은 때때로 그것은 좋 아이디어를 시작 시간 지연을 것입니다 프로세스 ungrab 할 때 서버에 당신 코드를 테스트하고 그것이 앉아서 실행하고 ungrab 모든 몇 분 정도 소요됩니다.그것은 필요가 없을 죽이거나 전환에서 외부에서 서버를 재설정 상태입니다.

여기에서,나는 그것을 떠나 당신은 방법을 결정하는 멀티플렉스 renderes.읽기 이 XGrabKeyboard 문서 및 XEvent 문서를 시작합니다.만약 당신이 작은 윈도우 노출 화면에서 모서리할 수 있습 jam 포인터를 하나로 모서리를 선택합 컨트롤러입니다.할 수 있습 XWarpPointer 밀어 포인터를 하나의뿐만 아니라 그들을 에서 코드입니다.

하나 이상의 포인트:당신이 잡을 수 있는 포인터,뿐만 아니라 다른 리소스입니다.당신이 하나 있었으 컨트롤러에서 실행 되자 앞에서는 당신이 앉아,당신이 사용할 수 있 키보드와 마우스를 입력하는 스위치 그것이 오픈 소켓 렌더러.당신이 필요가 없 크기 출력 창보다 적은 전체 화면으로 더 이상 이 접근 방식,니다.더 많은 작업할 수 있습니다 실제로 드 알파-혼합된 위에 오버레이를 사용하는 형상 및 종합의 확장에 좋은 오버레이 기능을 사용자 입력에 대한 응답으로(수 있는 카운트로 금 릴리).

다른 팁

마우스를 사용할 수 있는 GPM.

나는 확실하지 않 상단의 머리를 위한 키보드 또는 조이스틱입니다.

그것은 아마 없을 것이 너무 나쁜 직접 읽을 거기 /dev 파일이 필요하다면.

그것을 희망하는 데 도움이

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top