views:

240

answers:

2

Hi,

I'm trying to toggle caps lock on/off when the two shift buttons are held down for a second. I've tried using the virtkey module, but it's not working. That module does work for other keys though, so I don't think I'm using the module incorrectly.

Does anybody have a way for doing this?

Just to be clear, I want to actually toggle caps lock on/off and not just the LED.

Thanks!

A: 

Funny thing. I gave virtkey a try in the interpreter, and it seemed like it was working. After calling press_keycode(50), my machine acts like caps lock has been pressed (Ubuntu 9.10, python-virtkey .50ubuntu2). If I release the key- release_keycode(50)- it acts like nothing has happened.

import virtkey

v = virtkey.virtkey()
v.press_keycode(50)

if run as a script, leaves the caps key pressed for a virtual terminal tab. Very annoying.

Have you looked into the xvkbd command? It's an X virtual keyboard with command line options, and worst case you could call it from python. Another idea to look into is xmodmap, which lets you re-map keys in X. See this post on SU for an example.

Matt Luongo
That's actually what I'm using for the other keys, and what I tried to use for the caps-lock.
FallSe7en
+2  A: 

This works for me (turns the led on and off as well as enable/disable caps)

import virtkey

v = virtkey.virtkey()
v.press_keycode(66)
v.release_keycode(66)  # first release doesn't release it
v.release_keycode(66)

Here are some more examples

v.press_keycode(66)    # turns capslock on
v.release_keycode(66)
v.press_keycode(66)    # turns capslock off
v.release_keycode(66)

You can also get a toggle like behaviour just using release_keycode

v.release_keycode(66)  # toggles capslock
v.release_keycode(66)  # toggles back again capslock
gnibbler
Thanks for the examples! I was trying to do it with press_keysym(0xff14) and release_keysym(0xff14)--it was what I used for enter and backspace (with the hex value for what I thought was capslock). I wonder why that didn't work...anyways, it works great now--thanks again!
FallSe7en