bien, si eres menor de X11 y desea obtener la mbd, lo que necesita hacer un agarre. Si no es así, mi única buena respuesta es ncurses desde un terminal.
Así es como agarrar todo, desde el teclado y suelte nuevamente:
/* 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;
}
Run esto desde un terminal y todos los eventos kbd deben golpearlo. Lo estoy probando bajo Xorg pero usa mecanismos Xlib venerables y estables.
Espero que esto ayude.
tener cuidado con juego bajo X. Cuando eres nuevo en ellos, a veces es una buena idea para iniciar un proceso de retardo de tiempo que el servidor ungrab cuando estás código de prueba y dejar que repose y correr y desabrocha cada par de minutos. Se ahorra tener que matar o cambiar del servidor al estado de reinicio externo.
Desde aquí, le dejo a usted decidir cómo multiplexar renderes. Lea los documentos de XGrabKeyboard y los documentos de XEvent para comenzar. Si tiene pequeñas ventanas expuestas en las esquinas de la pantalla, puede atascar el puntero en una esquina para seleccionar un controlador. XWarpPointer puede empujar el puntero a uno de ellos también desde el código.
Un punto más: puede agarrar el puntero y otros recursos. Si tenía un controlador ejecutándose en la caja en frente de la cual se sienta, podría usar la entrada de teclado y mouse para alternar entre tomas abiertas con diferentes representadores.Ya no deberías necesitar cambiar el tamaño de la ventana de salida a menos de la pantalla completa con este enfoque. Con más trabajo, podría colocar superposiciones combinadas alfa en la parte superior utilizando las extensiones SHAPE y COMPOSITE para obtener una buena función de superposición en respuesta a la entrada del usuario (que podría contar como dorado del lirio).
Eliminé la "respuesta" que condujo a la aclaración anterior ... Creo que la aclaración debe permanecer, pero cubre lo suficiente como para que mi pseudo-respuesta, que podría haber sido un comentario, se pueda eliminar por completo. –