Xpra: Ticket #1070: Keyboard switch does not work

$ rpm -q xpra xpra-0.15.10-1.fc23.x86_64

Xpra start on server: $ xpra start --no-keyboard-sync -d keyboard :77

$ DISPLAY=:77 gedit

Attach on client:

$ xpra attach ssh:pasha@do.hubbitus.info:77 --password-file=/home/pasha/remote/do/home/pasha/.winswitch/server/sessions/77/session.pass
2016-01-02 23:07:57,760 xpra gtk2 client version 0.15.10 (r11439)
** Message: pygobject_register_sinkfunc is deprecated (GstObject)
2016-01-02 23:07:58,009 OpenGL_accelerate module loaded
2016-01-02 23:07:58,009 Using accelerated ArrayDatatype
2016-01-02 23:07:58,132 keyboard layouts: us,ru
2016-01-02 23:08:02,685 detected keyboard: rules=evdev, model=pc101, layout=us,ru
2016-01-02 23:08:02,686 desktop size is 3046x1050 with 1 screen(s):
2016-01-02 23:08:02,687   ':0.0' (805x277 mm - DPI: 96x96) workarea: 2891x1050
2016-01-02 23:08:02,687     eDP1 1366x768 at 0x282 (344x193 mm - DPI: 100x101)
2016-01-02 23:08:02,687     HDMI1 1680x1050 at 1366x0 (433x271 mm - DPI: 98x98)
2016-01-02 23:08:05,402 server: Linux Fedora 23 Twenty Three, Xpra version 0.15.10 (r11439)
2016-01-02 23:08:05,420 Attached to ssh:pasha@do.hubbitus.info:77 (press Control-C to detach)
** Message: pygobject_register_sinkfunc is deprecated (GstObject)
2016-01-02 23:08:09,089 sound-sink using audio codec: MPEG 1 Audio, Layer 3 (MP3)

Please note, two layouts listed "layout=us,ru".

But on run gedit kayboard only us works.

Log on server (relevant on my mind part, will attach full):

2016-01-02 20:08:03,684 get_keyboard_config(..)=KeyboardConfig(us,ru / )
2016-01-02 20:08:03,684 setting key repeat rate from client: 660ms delay / 40ms interval
2016-01-02 20:08:03,685 make_keymask_match: ignored as keynames_for_mod not assigned yet
2016-01-02 20:08:03,685 set_keymap(None, {}, False)
2016-01-02 20:08:03,690 current keyboard id=None, new keyboard id=us,ru//390ccf8383b4fe2be131057e44affe131219b4da
2016-01-02 20:08:03,693 do_set_keymap using xkbmap_query
2016-01-02 20:08:03,703 setting keymap: rules=evdev, model=pc101, layout=us,ru
2016-01-02 20:08:03,817 ['setxkbmap', '-rules', 'evdev', '-model', 'pc101', '-layout', 'us,ru']
2016-01-02 20:08:03,818 setting keymap options: grp:capstoggle
2016-01-02 20:08:03,880 ['setxkbmap', '-option', '', '-option', 'grp:caps_toggle']
2016-01-02 20:08:03,882 setting full keymap definition from client via xkbcomp
2016-01-02 20:08:03,927 ['xkbcomp', '-', ':77'] with stdin=xkb_keymap {\n       xkb_keycodes  { include "evdev+aliases(qwerty)" };\n    xkb_types     { include "complete"      };\n    xkb_compat    { include "compl
ete"      };\n    xkb_symbols   { include "pc+us+ru:2+inet(evdev)+capslock(grouplock)"    };\n    xkb_geometry  { include "pc(pc101)"     };\n};\n

Client:

$ setxkbmap -print
xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+us+ru:2+inet(evdev)+capslock(grouplock)"    };
        xkb_geometry  { include "pc(pc101)"     };
};
$ setxkbmap -query
rules:      evdev
model:      pc101
layout:     us,ru
variant:    ,
options:    grp:caps_toggle
$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        ISO_Next_Group (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Server:

$ setxkbmap -query
rules:      evdev
model:      pc101
layout:     us,ru
variant:    ,
options:    grp:caps_toggle
$ setxkbmap -print
xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+us+ru:2+inet(evdev)+capslock(grouplock)"    };
        xkb_geometry  { include "pc(pc101)"     };
};
$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        ISO_Next_Group (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)


Sat, 02 Jan 2016 20:20:56 GMT - Pavel Alexeev: attachment set


Sat, 02 Jan 2016 20:21:13 GMT - Pavel Alexeev: attachment set


Sat, 02 Jan 2016 20:22:04 GMT - Pavel Alexeev: attachment set


Sat, 02 Jan 2016 20:22:24 GMT - Pavel Alexeev: attachment set


Sat, 02 Jan 2016 20:22:42 GMT - Pavel Alexeev: attachment set


Sat, 02 Jan 2016 20:23:26 GMT - Pavel Alexeev: attachment set


Sat, 02 Jan 2016 20:24:07 GMT - Pavel Alexeev: component changed; cc set


Sun, 03 Jan 2016 02:57:30 GMT - Antoine Martin: owner changed

Have you tried with keyboard sync enabled? Please try the latest release (0.16.0). How do you switch layouts on the client side? Does this trigger any messages? (does changing the switch key help?)


Mon, 04 Jan 2016 11:36:07 GMT - Pavel Alexeev:

Have you tried with keyboard sync enabled?

Sure. With same success. I add that switch for try by your wiki http://xpra.org/trac/wiki/Keyboard

Please try the latest release (0.16.0).

I even install 0.17 from your repos (before that was free from proprietary codecs Fedora version):

$ rpm -q xpra xpra-0.17.0-0.20151229r11523.fc23.x86_64

At least it works! But strange. Switching to us keyboard happened normally by pressing CapsLock?, but switching back require press it twice. Should I attach some logs?

How do you switch layouts on the client side?

On both sides CapsLock? switch used. It works as expected for example in ssh session.

Does this trigger any messages? (does changing the switch key help?)

Sorry, where I should look for them?

Switch key you mean in /etc/xpra/xorg.conf?


Mon, 04 Jan 2016 11:40:43 GMT - Antoine Martin:

Sorry, where I should look for them?


The server log or client output if you run from a terminal. And maybe just the log extract of when you hit capslock with -d keyboard.


Switch key you mean in /etc/xpra/xorg.conf?


I think you've answered this one already above: you are using capslock.

This may not ever work properly because we don't always get the key event.. If 0.16.x works for you, I don't think we will try to fix older versions.


Tue, 05 Jan 2016 19:37:46 GMT - Pavel Alexeev:

Sure it will be absolutely enough fresh version work properly.

On client log with -d keyboard: 1) Press q in us layout, then press CapsLock? and again q (which still q but should be й in ru)

2016-01-05 22:35:41,800 parse_key_event(<gtk.gdk.Event at 0x7f25044b06c0: GDK_KEY_PRESS keyval=Cyrillic_shorti>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': True, 'keyval': 1738, 'keycode': 24}>
2016-01-05 22:35:41,800 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': True, 'keyval': 1738, 'keycode': 24}>) wid=15
2016-01-05 22:35:41,800 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': True, 'keyval': 1738, 'keycode': 24}>)
2016-01-05 22:35:41,935 parse_key_event(<gtk.gdk.Event at 0x7f25044b0670: GDK_KEY_RELEASE keyval=Cyrillic_shorti>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': False, 'keyval': 1738, 'keycode': 24}>
2016-01-05 22:35:41,936 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': False, 'keyval': 1738, 'keycode': 24}>) wid=15
2016-01-05 22:35:41,936 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': False, 'keyval': 1738, 'keycode': 24}>)
2016-01-05 22:35:43,159 parse_key_event(<gtk.gdk.Event at 0x7f25044b06c0: GDK_KEY_PRESS keyval=ISO_Next_Group>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 66}>
2016-01-05 22:35:43,160 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 66}>) wid=15
2016-01-05 22:35:43,160 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 66}>)
2016-01-05 22:35:43,160 parse_key_event(<gtk.gdk.Event at 0x7f25044b06c0: GDK_KEY_RELEASE keyval=ISO_Next_Group>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>
2016-01-05 22:35:43,160 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>) wid=15
2016-01-05 22:35:43,161 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>)
2016-01-05 22:35:43,161 parse_key_event(<gtk.gdk.Event at 0x7f25044b06c0: GDK_KEY_PRESS keyval=ISO_Next_Group>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 66}>
2016-01-05 22:35:43,161 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 66}>) wid=15
2016-01-05 22:35:43,162 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 66}>)
2016-01-05 22:35:43,271 parse_key_event(<gtk.gdk.Event at 0x7f25044b0698: GDK_KEY_RELEASE keyval=ISO_Next_Group>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>
2016-01-05 22:35:43,271 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>) wid=15
2016-01-05 22:35:43,271 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>)
2016-01-05 22:35:43,271 parse_key_event(<gtk.gdk.Event at 0x7f25044b0698: GDK_KEY_RELEASE keyval=ISO_Next_Group>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>
2016-01-05 22:35:43,272 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>) wid=15
2016-01-05 22:35:43,272 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>)
2016-01-05 22:35:46,184 parse_key_event(<gtk.gdk.Event at 0x7f25044b0698: GDK_KEY_PRESS keyval=q>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': True, 'keyval': 113, 'keycode': 24}>
2016-01-05 22:35:46,184 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': True, 'keyval': 113, 'keycode': 24}>) wid=15
2016-01-05 22:35:46,184 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': True, 'keyval': 113, 'keycode': 24}>)
2016-01-05 22:35:46,295 parse_key_event(<gtk.gdk.Event at 0x7f25044b06c0: GDK_KEY_RELEASE keyval=q>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': False, 'keyval': 113, 'keycode': 24}>
2016-01-05 22:35:46,296 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': False, 'keyval': 113, 'keycode': 24}>) wid=15
2016-01-05 22:35:46,296 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': False, 'keyval': 113, 'keycode': 24}>)

2) Now again that sequence:

2016-01-05 22:36:27,352 parse_key_event(<gtk.gdk.Event at 0x7f25044b0698: GDK_KEY_PRESS keyval=q>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': True, 'keyval': 113, 'keycode': 24}>
2016-01-05 22:36:27,352 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': True, 'keyval': 113, 'keycode': 24}>) wid=15
2016-01-05 22:36:27,352 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': True, 'keyval': 113, 'keycode': 24}>)
2016-01-05 22:36:27,498 parse_key_event(<gtk.gdk.Event at 0x7f25044b0670: GDK_KEY_RELEASE keyval=q>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': False, 'keyval': 113, 'keycode': 24}>
2016-01-05 22:36:27,498 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': False, 'keyval': 113, 'keycode': 24}>) wid=15
2016-01-05 22:36:27,498 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': False, 'keyval': 113, 'keycode': 24}>)
2016-01-05 22:36:29,103 parse_key_event(<gtk.gdk.Event at 0x7f25044b06c0: GDK_KEY_PRESS keyval=ISO_Next_Group>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 66}>
2016-01-05 22:36:29,104 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 66}>) wid=15
2016-01-05 22:36:29,104 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 66}>)
2016-01-05 22:36:29,104 parse_key_event(<gtk.gdk.Event at 0x7f25044b06c0: GDK_KEY_RELEASE keyval=ISO_Next_Group>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>
2016-01-05 22:36:29,104 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>) wid=15
2016-01-05 22:36:29,105 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>)
2016-01-05 22:36:29,105 parse_key_event(<gtk.gdk.Event at 0x7f25044b06c0: GDK_KEY_PRESS keyval=ISO_Next_Group>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 66}>
2016-01-05 22:36:29,105 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 66}>) wid=15
2016-01-05 22:36:29,105 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 66}>)
2016-01-05 22:36:29,238 parse_key_event(<gtk.gdk.Event at 0x7f25044b06c0: GDK_KEY_RELEASE keyval=ISO_Next_Group>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>
2016-01-05 22:36:29,238 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>) wid=15
2016-01-05 22:36:29,239 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>)
2016-01-05 22:36:29,239 parse_key_event(<gtk.gdk.Event at 0x7f25044b06c0: GDK_KEY_RELEASE keyval=ISO_Next_Group>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>
2016-01-05 22:36:29,239 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>) wid=15
2016-01-05 22:36:29,239 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': False, 'keyval': 65032, 'keycode': 66}>)
2016-01-05 22:36:30,640 parse_key_event(<gtk.gdk.Event at 0x7f25044b0670: GDK_KEY_PRESS keyval=Cyrillic_shorti>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': True, 'keyval': 1738, 'keycode': 24}>
2016-01-05 22:36:30,640 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': True, 'keyval': 1738, 'keycode': 24}>) wid=15
2016-01-05 22:36:30,640 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': True, 'keyval': 1738, 'keycode': 24}>)
2016-01-05 22:36:30,743 parse_key_event(<gtk.gdk.Event at 0x7f25044b06c0: GDK_KEY_RELEASE keyval=Cyrillic_shorti>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': False, 'keyval': 1738, 'keycode': 24}>
2016-01-05 22:36:30,743 handle_key_action(ClientWindow(15), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': False, 'keyval': 1738, 'keycode': 24}>) wid=15
2016-01-05 22:36:30,743 send_key_action(15, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': False, 'keyval': 1738, 'keycode': 24}>)

And in this try I have "qй"!


Wed, 06 Jan 2016 02:23:42 GMT - Antoine Martin: status changed; resolution set

That's odd:

But since this more or less works, I'm closing this ticket as wontfix for now, maybe we can re-open it later if/when we move to a new toolkit.


Wed, 06 Jan 2016 11:06:47 GMT - Pavel Alexeev:

But that switch works on both sides! I always use CapsLock? switch on that and remote machine. And there no problem for any X applications GTK or QT.

Could you please say is it possible change layout switch key only for XPRA session? Do you have some WIKI for that?


Wed, 06 Jan 2016 15:32:57 GMT - Antoine Martin:

Could you please say is it possible change layout switch key only for XPRA session? Do you have some WIKI for that?


We mirror the same keyboard setup that the client has, so overriding the layout switch key is not currently possible, sorry. I guess it would be nice to be able to specify a different key. Feel free to create a new ticket for this. The main difficulty would be how and where to store this configuration information which would partially override the data we get from the client..


Tue, 12 Jan 2016 20:11:43 GMT - Pavel Alexeev: status changed; resolution deleted

Ok, for the experiment I configure in KDE Ctrl + Shift as second keyboard layout switch. But it fully ignored for gedit run from remote server. As previous log for "q, <Ctrl + Shift>, q" from client:

2016-01-12 23:09:17,445 parse_key_event(<gtk.gdk.Event at 0x7fade809f990: GDK_KEY_RELEASE keyval=Control_L>, False)=<GTKKeyEvent object, contents: {'modifiers': ['control'], 'group': 0, 'string': '', 'keyname': 'Control_L', 'pressed': False, 'keyval': 65507, 'keycode': 37}>
2016-01-12 23:09:17,445 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': ['control'], 'group': 0, 'string': '', 'keyname': 'Control_L', 'pressed': False, 'keyval': 65507, 'keycode': 37}>) wid=1
2016-01-12 23:09:17,445 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': ['control'], 'group': 0, 'string': '', 'keyname': 'Control_L', 'pressed': False, 'keyval': 65507, 'keycode': 37}>)
2016-01-12 23:09:17,493 parse_key_event(<gtk.gdk.Event at 0x7fade809f878: GDK_KEY_RELEASE keyval=grave>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '`', 'keyname': 'grave', 'pressed': False, 'keyval': 96, 'keycode': 49}>
2016-01-12 23:09:17,493 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '`', 'keyname': 'grave', 'pressed': False, 'keyval': 96, 'keycode': 49}>) wid=1
2016-01-12 23:09:17,493 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '`', 'keyname': 'grave', 'pressed': False, 'keyval': 96, 'keycode': 49}>)
2016-01-12 23:09:19,789 parse_key_event(<gtk.gdk.Event at 0x7fade809f990: GDK_KEY_PRESS keyval=q>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': True, 'keyval': 113, 'keycode': 24}>
2016-01-12 23:09:19,789 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': True, 'keyval': 113, 'keycode': 24}>) wid=1
2016-01-12 23:09:19,789 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': True, 'keyval': 113, 'keycode': 24}>)
2016-01-12 23:09:19,869 parse_key_event(<gtk.gdk.Event at 0x7fade809f990: GDK_KEY_RELEASE keyval=q>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': False, 'keyval': 113, 'keycode': 24}>
2016-01-12 23:09:19,869 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': False, 'keyval': 113, 'keycode': 24}>) wid=1
2016-01-12 23:09:19,869 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': 'q', 'keyname': 'q', 'pressed': False, 'keyval': 113, 'keycode': 24}>)
2016-01-12 23:09:20,469 parse_key_event(<gtk.gdk.Event at 0x7fade809f990: GDK_KEY_PRESS keyval=Control_L>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'Control_L', 'pressed': True, 'keyval': 65507, 'keycode': 37}>
2016-01-12 23:09:20,469 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'Control_L', 'pressed': True, 'keyval': 65507, 'keycode': 37}>) wid=1
2016-01-12 23:09:20,470 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 0, 'string': '', 'keyname': 'Control_L', 'pressed': True, 'keyval': 65507, 'keycode': 37}>)
2016-01-12 23:09:20,470 parse_key_event(<gtk.gdk.Event at 0x7fade809f990: GDK_KEY_RELEASE keyval=Control_L>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': False, 'keyval': 65507, 'keycode': 37}>
2016-01-12 23:09:20,470 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': False, 'keyval': 65507, 'keycode': 37}>) wid=1
2016-01-12 23:09:20,470 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': False, 'keyval': 65507, 'keycode': 37}>)
2016-01-12 23:09:20,470 parse_key_event(<gtk.gdk.Event at 0x7fade809f990: GDK_KEY_PRESS keyval=Control_L>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': True, 'keyval': 65507, 'keycode': 37}>
2016-01-12 23:09:20,471 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': True, 'keyval': 65507, 'keycode': 37}>) wid=1
2016-01-12 23:09:20,471 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': True, 'keyval': 65507, 'keycode': 37}>)
2016-01-12 23:09:20,471 parse_key_event(<gtk.gdk.Event at 0x7fade809f990: GDK_KEY_PRESS keyval=ISO_Next_Group>, True)=<GTKKeyEvent object, contents: {'modifiers': ['control'], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 50}>
2016-01-12 23:09:20,471 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': ['control'], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 50}>) wid=1
2016-01-12 23:09:20,471 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': ['control'], 'group': 1, 'string': '', 'keyname': 'ISO_Next_Group', 'pressed': True, 'keyval': 65032, 'keycode': 50}>)
2016-01-12 23:09:20,589 parse_key_event(<gtk.gdk.Event at 0x7fade809f990: GDK_KEY_RELEASE keyval=Control_L>, False)=<GTKKeyEvent object, contents: {'modifiers': ['control'], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': False, 'keyval': 65507, 'keycode': 37}>
2016-01-12 23:09:20,590 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': ['control'], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': False, 'keyval': 65507, 'keycode': 37}>) wid=1
2016-01-12 23:09:20,590 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': ['control'], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': False, 'keyval': 65507, 'keycode': 37}>)
2016-01-12 23:09:20,590 parse_key_event(<gtk.gdk.Event at 0x7fade809f990: GDK_KEY_RELEASE keyval=Shift_L>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Shift_L', 'pressed': False, 'keyval': 65505, 'keycode': 50}>
2016-01-12 23:09:20,590 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Shift_L', 'pressed': False, 'keyval': 65505, 'keycode': 50}>) wid=1
2016-01-12 23:09:20,590 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Shift_L', 'pressed': False, 'keyval': 65505, 'keycode': 50}>)
2016-01-12 23:09:21,053 parse_key_event(<gtk.gdk.Event at 0x7fade809f990: GDK_KEY_PRESS keyval=Cyrillic_shorti>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': True, 'keyval': 1738, 'keycode': 24}>
2016-01-12 23:09:21,053 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': True, 'keyval': 1738, 'keycode': 24}>) wid=1
2016-01-12 23:09:21,053 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': True, 'keyval': 1738, 'keycode': 24}>)
2016-01-12 23:09:21,125 parse_key_event(<gtk.gdk.Event at 0x7fade809f990: GDK_KEY_RELEASE keyval=Cyrillic_shorti>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': False, 'keyval': 1738, 'keycode': 24}>
2016-01-12 23:09:21,125 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': False, 'keyval': 1738, 'keycode': 24}>) wid=1
2016-01-12 23:09:21,125 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '\xd0\xb9', 'keyname': 'Cyrillic_shorti', 'pressed': False, 'keyval': 1738, 'keycode': 24}>)
2016-01-12 23:09:21,984 parse_key_event(<gtk.gdk.Event at 0x7fade809f878: GDK_KEY_PRESS keyval=Control_L>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': True, 'keyval': 65507, 'keycode': 37}>
2016-01-12 23:09:21,985 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': True, 'keyval': 65507, 'keycode': 37}>) wid=1
2016-01-12 23:09:21,985 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': True, 'keyval': 65507, 'keycode': 37}>)
2016-01-12 23:09:21,985 parse_key_event(<gtk.gdk.Event at 0x7fade809f878: GDK_KEY_RELEASE keyval=Control_L>, False)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': False, 'keyval': 65507, 'keycode': 37}>
2016-01-12 23:09:21,985 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': False, 'keyval': 65507, 'keycode': 37}>) wid=1
2016-01-12 23:09:21,985 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': False, 'keyval': 65507, 'keycode': 37}>)
2016-01-12 23:09:21,985 parse_key_event(<gtk.gdk.Event at 0x7fade809f878: GDK_KEY_PRESS keyval=Control_L>, True)=<GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': True, 'keyval': 65507, 'keycode': 37}>
2016-01-12 23:09:21,985 handle_key_action(ClientWindow(1), <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': True, 'keyval': 65507, 'keycode': 37}>) wid=1
2016-01-12 23:09:21,985 send_key_action(1, <GTKKeyEvent object, contents: {'modifiers': [], 'group': 1, 'string': '', 'keyname': 'Control_L', 'pressed': True, 'keyval': 65507, 'keycode': 37}>)

Mon, 26 Dec 2016 09:51:08 GMT - Antoine Martin:

Please see #1380, maybe that will work for you?


Fri, 14 Jul 2017 16:02:02 GMT - Antoine Martin: status changed; resolution set

As per comment:10, please try #1380. Feel free to re-open if the problem is still present.


Sat, 23 Jan 2021 05:14:07 GMT - migration script:

this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/1070