// gcc -o xkev -Wall xkev.c -L/usr/X11R6/lib -lX11 #include #include #include #include int main(int argc, char **argv) { Display *d = XOpenDisplay(NULL); assert(d); int s = XDefaultScreen(d); Window w = XCreateSimpleWindow(d, XRootWindow(d, s), 0, 0, 320, 240, 0, XBlackPixel(d, s), XWhitePixel(d, s)); assert(w); XTextProperty title; XStringListToTextProperty(argv, 1, &title); XSetWMName(d, w, &title); XSetWMIconName(d, w, &title); XFree(title.value); XSelectInput(d, w, KeyPressMask | KeyReleaseMask); XMapWindow(d, w); while (1) { XEvent ev; XNextEvent(d, &ev); XKeyEvent *evp = &ev.xkey; assert(evp->type == KeyPress || evp->type == KeyRelease); char *what = (evp->type == KeyPress) ? "press" : "release"; unsigned int kc = evp->keycode; KeySym ks = XKeycodeToKeysym(d, kc, 0); char *str = XKeysymToString(ks); fprintf(stderr, "%s %s (kc=%u ks=%lu)\n", what, str, kc, ks); } return 0; }