SavinaRoja / PyUserInput

A module for cross-platform control of the mouse and keyboard in python that is simple to install and use.
GNU General Public License v3.0
1.07k stars 244 forks source link

Wrong keys inputted when the layout is changed through GNOME #92

Open steelcowboy opened 8 years ago

steelcowboy commented 8 years ago

I noticed that GNOME's keyboard switcher does not use setxkb, so as far as X is concerned if I change to Colemak my keyboard is still in QWERTY so it presses the corresponding key locations. Therefore, GNOME should be treated as a special case for when the X server is found.

I can't figure out just how GNOME sets the keyboard layout. I'd like to fix the issue myself but need to figure out how to interface with GNOME stuff in Python (maybe dbus?). Any suggestions?

pepijndevos commented 8 years ago

Special-casing Gnome sounds like a bad idea. Before you know it we need code for every DE out there. We need a general solution for this.

I mean, if you change Gnome settings and open a non-Gnome app like xterm, does it also use the incorrect keyboard layout? If so, I'd consider that a Gnome bug. If not, we need to figure out a better way to detect key codes.

steelcowboy commented 8 years ago

I think GNOME only needs a special case because it manages the keyboard independently from X. I'm not sure what KDE, XFCE, Budgie, etc do but if they don't directly change X the only way to write a cross-desktop solution would be to create a new keycode-detecting library.

GNOME changes the keyboard layout for the entire session, the app is not important. I had it type in URXVT and Chrome. It's not a GNOME bug I don't think -- GNOME just doesn't inform X if the variant changes because it handles that change itself. I can confirm changing the variant with setxkbmap works fine in GNOME, I just am learning Colemak and need to switch variants often when I need to type faster.

moses-palmer commented 8 years ago

I vaguely remember this being an issue with _fakeinput, since it uses a lot of implicit state.

In pynput, I had to use _sendevent of the Window object to work around this; this is unfortunately a lot of work. Perhaps you could test with that library and see if it works? If it does, copying code from pynput might be worth the effort.

On 19 Jul 2016 4:35 p.m., "Jim Heald" notifications@github.com wrote:

I think GNOME only needs a special case because it manages the keyboard independently from X. I'm not sure what KDE, XFCE, Budgie, etc do but if they don't directly change X the only way to write a cross-desktop solution would be to create a new keycode-detecting library.

GNOME changes the keyboard layout for the entire session, the app is not important. I had it type in URXVT and Chrome. It's not a GNOME bug I don't think -- GNOME just doesn't inform X if the variant changes because it handles that change itself. I can confirm changing the variant with setxkbmap works fine in GNOME, I just am learning Colemak and need to switch variants often when I need to type faster.

On Jul 19, 2016 02:11, "Pepijn de Vos" notifications@github.com wrote:

Special-casing Gnome sounds like a bad idea. Before you know it we need code for every DE out there. We need a general solution for this.

I mean, if you change Gnome settings and open a non-Gnome app like xterm, does it also use the incorrect keyboard layout? If so, I'd consider that a Gnome bug. If not, we need to figure out a better way to detect key codes.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub < https://github.com/SavinaRoja/PyUserInput/issues/92#issuecomment-233574689

, or mute the thread < https://github.com/notifications/unsubscribe-auth/AIxn7AQXLIiXcyNWvmaZn-thEMr21Qi0ks5qXJS-gaJpZM4JPMvz

.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/SavinaRoja/PyUserInput/issues/92#issuecomment-233652571, or mute the thread https://github.com/notifications/unsubscribe-auth/AAjOY7QDhFn5w7BNXNshZdkRmLDjZVQwks5qXOCzgaJpZM4JPMvz .

steelcowboy commented 8 years ago

I just tried https://rosettacode.org/wiki/Simulate_input/Keyboard#C and it had the same issue, but to me it looks like that uses send_event. I think the problem is that it goes through X when GNOME may need to process it somehow