I'm trying to imitate the setup I had on OS X (via Karabiner): Pressing the left Shift on its own key inserts a left (, but holding it down and pressing another key acts as a normal Shift key (and similarly with the right Shift & right )). Is this possible with xkb?

  • 1
    That sounds like a cool feature. Won't be easy to do though. The first thing I thought of was xbindkeys. But that won't work because this doesn't allow passing on the keyevent or reacting only to keydown/keyup etc. So basically, I guess what you'd need is essentially a keylogger that reacts reacts to e.g. a keyup-LShift event and inserts a ( if no other key pressed. – kba Feb 16 '16 at 22:42
  • You could use xcape, also as package in some distros, and do xcape -e 'Shift_L=parenleft' and xcape -e 'Shift_R=parenright' , but not sure it meets your needs / restrictions etc. – Runium Feb 16 '16 at 23:22
  • And that should likely be xcape -e 'Shift_L=parenleft;Shift_R=parenright' ... – Runium Feb 16 '16 at 23:41
  • @Sukminder xcape looks like exactly what I want, I will give that a try – jamesnvc Feb 17 '16 at 0:48
  • @Sukminder just tried it, and it works exactly. Want to make that comment a response & I'll accept it? – jamesnvc Feb 17 '16 at 0:56

One way is to use xcape.

xcape [-d] [-t timeout] [-e map-expression]

This should do the trick:

xcape -e 'Shift_L=parenleft;Shift_R=parenright'

xcape is included as a package for some distributions.


It has a default delay of 500ms after which the mapped key will not be emitted. It can be set by the -t option.

Each map-expression run as a daemon and has it's own PID.

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.