Why do these xte commands work in terminal, but not when bound with xbindkeys?

This xte command, when I run it in a terminal, triggers Expo mode:

xte 'keydown Super_L' 'key S' 'keyup Super_L'

However, when I put this in my .xbindkeysrc file:

"xte 'keydown Super_L' 'key S' 'keyup Super_L'" b:11

Nothing happens when I click the button. The following binding makes the letter X appear in my console when I press button 11:

"xte 'key X'" b:11

So why doesn't the Expo binding work?


This is the verbose output of xbindkeys -n -v when clicking button 11:

Button press !
e.xbutton.button=11
e.xbutton.state=16
"xte 'keydown Super_L' 'key W' 'keyup Super_L'" m:0x0 + b:11 (mouse)
got screen 0 for window 2bb
Start program with fork+exec call
Button release !
e.xbutton.button=11
e.xbutton.state=16

And nothing happens. Does this have anything to do with the way xbindkeys executes the command? (fork+exec call)


Attempt number two.

expo.sh:

#!/usr/bin/env bash
export DISPLAY=:0
xte 'keydown Super_L' 'key S' 'keyup Super_L'

Executing this script from the command line activates Expo. Binding it in xbindkeys:

"sh ~/expo.sh" b:11

Clicking mouse button 11:

Button press !
e.xbutton.button=11
e.xbutton.state=16
"sh ~/expo.sh" m:0x0 + b:11 (mouse)
got screen 0 for window 2bb
Start program with fork+exec call

Nothing happens!

7

5 Answers

Another simpler solution: instead of using just "b:11" in the xbindkeys definition, use "b:11 + release". It will wait until you release the button to fire the command.

Example:

"sh ~/expo.sh" b:11 + release
1

This is very weird. It turns out that if my mouse button is still pressed (not yet released) when the Super+W keystroke is simulated, nothing happens. I don't know who to blame for that (perhaps Cinnamon?). I have worked around it though, by adding a short delay to the xte command:

xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'

It now waits 0.1 seconds before simulating Super+S. If I press and hold the mouse button more than 0.1 seconds, nothing happens.

This is a workaround answer. I'd much prefer a proper answer.

6

I faced the same problem.

"xte 'key b'"

was working in the console but not in the xbindkeys parameter file. I changed b by his keysym code, using the "xev" command to obtain it :

"xte 'key Ox62'"

It worked for me

Try with +Release

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
b:11 + Release

That may help.

Have similar issue while using sxhkcd keymapper. It turns out your actual shortcut keys are detected as still being pressed.

There are some semi-workarounds:

  • look for the release event
  • add sleep 0.2 in front of your command
  • use shortcut with leader-key
  • release your shortcut modifiers in front of your xte sequence

However you cant get realtime actions with that =)

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like