I wrote a small GTK+ 2+ program (in Python) that responds to a button click by sending a gtk.Event
to simulate a key press. It works fine on every version of Ubuntu that I have including Kubuntu, but it fails on every version of Lubuntu.
On Lubuntu, the character that gets transmitted by the Event is determined by event.hardware_keycode
; event.keyval
doesn't matter. On every other platform, the character is determined by event.keyval
and event.hardware_keycode
doesn't matter.
The problem is that as far as I can tell it is not possible to specify Unicode characters through event.hardware_keycode
because they do not have a corresponding key. Unicode works fine on other platforms using keyval.
Does anyone know how to get Lubuntu to behave the same as Ubuntu in this regard? If not, can anyone suggest a better place to post this question?
Here's a simple test program, as requested by Sneetsher:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import gtk
class KeyPressTest:
def __init__(self):
button = gtk.Button("Test")
button.connect('clicked', self.on_button_clicked)
button.set_can_focus(False)
entry = gtk.Entry()
vbox = gtk.VBox()
vbox.pack_start(button)
vbox.pack_start(entry, expand=False)
window = gtk.Window()
window.connect('destroy', lambda w: gtk.main_quit())
window.add(vbox)
window.show_all()
def on_button_clicked(self, button):
# Lubuntu ignores keyval, so you get "a" in the entry when you click
# the button. Ubuntu ignores hardware_keycode, so you get À. I could
# make the program work on all platforms by specifying both, but what
# is hardware_keycode for unicode characters?
event = gtk.gdk.Event(gtk.gdk.KEY_PRESS)
event.keyval = int(gtk.gdk.unicode_to_keyval(ord(unicode(u"À"))))
event.hardware_keycode = 38 # hardware keycode for "a"
event.window = button.get_window()
event.put()
if __name__ == "__main__":
u = KeyPressTest()
gtk.main()
Here's the answer: Lubuntu has an environment variable set to specify the input method:
GTK_IM_MODULE=xim
Unset that variable and the program above works.
im-config
to set aibus
as default input system. You better post an answer. Avoid putting it within question post. See About