How to properly use XGrabKey to get a program hotkey

Russell Shaw rjshaw at netspace.net.au
Wed Oct 27 16:22:20 PDT 2010


cheshirekow wrote:
> Hello,
> 
> My goal is to have a program that sleeps in the background but can be 
> activated by the user via some "hotkey". From digging around the Xlib 
> manual and the Xlib O'reilly manual, I gather that the correct way to to 
> this is with XGrabKey. However my understanding of the process is 
> incorrect as a simple proof of concept does not work.
> 
> My understanding is that if I call XGrabKey with the root window as the 
> grab_window, and owner_events false, then whenever my hotkey is pressed 
> the event will be sent *only* to the root window.
 >
 > If I then select
> KeyPress events from the root window, and then listen for X events, I 
> should get a key press event when the hotkey is pressed. I've pasted a 
> minimal example below.
> 
> What I expect is that when the program is run, regardless of what window 
> has focus, if Ctrl+Shift+K is pressed, my program should output "Hot key 
> pressed!" in the console, and then terminate.
> 
> Furthermore, it is my understanding that if the XGrabKey fails, the 
> default error handler will display a message, and since it does not I am 
> assuming that the call succeeds.
> 
> Obviously, my understanding is flawed somehow. Can anyone point me in 
> the right direction?

This will only work if the window manager or the window with focus doesn't
already grab the same keys. Does the example work without a window manager
running?



More information about the xorg mailing list