/****************************************************** *Code by Rudi, his site http://www.koeniglich.de/ * ******************************************************/ #include #include #define KEY_MISCELLANY #include #include #include #define KEY_VOLUME_ADD 176 #define KEY_VOLUME_SUB 174 #define KEY_MUTE 160 #define KEY_PLAY_PAUSE 162 #define KEY_STOP 164 #define KEY_REWIND 144 #define KEY_FASTFORWARD 153 #define KEY_WLAN 136 #define KEY_BATTERY 135 #define KEY_EJECT 137 Display *dpy; static int keylist[] = { KEY_VOLUME_ADD, KEY_VOLUME_SUB, KEY_MUTE, //commented out -- using gnome for these //KEY_PLAY_PAUSE, //KEY_STOP, //KEY_REWIND, //KEY_FASTFORWARD, //KEY_WLAN, //KEY_BATTERY, //KEY_EJECT, 0 }; void GrabKeyAll(unsigned int keycode, unsigned int modi) { int i; for (i = ScreenCount(dpy) - 1; i >= 0; i--) { XGrabKey(dpy, keycode, modi, RootWindow(dpy, i), False, GrabModeAsync, GrabModeAsync); #ifdef DEBUG printf("grab keycode %d, modi %d, Root %d, a %d, b %d\n", keycode, modi, RootWindow(dpy, i), a, b); XSync(dpy, False); #endif } } void UngrabKeyAll(unsigned int keycode, unsigned int modi) { int i; for (i = ScreenCount(dpy) - 1; i >= 0; i--) XUngrabKey(dpy, keycode, modi, RootWindow(dpy, i)); } int main(int ac, char *av[]) { int i, muted = 0; XEvent e; dpy = XOpenDisplay(0); if(!dpy) { printf("Cannot open the display\n"); exit(1); } if (fork()) return 0; for(i = 0; keylist[i]; i++) GrabKeyAll(keylist[i], AnyModifier); for(;;) { XNextEvent(dpy, &e); XAllowEvents(dpy, AsyncKeyboard, CurrentTime); XFlush(dpy); if(e.type != KeyPress) continue; switch(e.xkey.keycode) { case KEY_VOLUME_ADD: system("amixer sset Master 1+ 1+ unmute -q"); break; case KEY_VOLUME_SUB: system("amixer sset Master 1- 1- -q"); break; case KEY_MUTE: // changed to amixer the default in FC2 if(muted) system("amixer sset Master 3 3 unmute -q"); else system("amixer sset Master 3 3 mute -q"); muted = !muted; break; case KEY_PLAY_PAUSE: break; case KEY_STOP: for(i = 0; keylist[i]; i++) UngrabKeyAll(keylist[i], AnyModifier); exit(0); break; case KEY_REWIND: break; case KEY_FASTFORWARD: //system("xterm -u8 -fn -misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1 &"); break; case KEY_WLAN: break; case KEY_BATTERY: break; case KEY_EJECT: //system("eject cdrom&"); break; } } return 0; }