Xpra: Ticket #1824: --key-shortcut not working when using start with attach=yes

When running the command xpra start-desktop --daemon=no --attach=yes --start-child=i3 --key-shortcut='#+G':toggle_keyboard_grab :42, a window with a desktop appears but the shortcurt Meta-Shift-G does not work as expected (it does nothing).

When running start and attach separately (xpra start-desktop --daemon=no --attach=no --start-child=i3 :42 and xpra attach --key-shortcut='#+G':toggle_keyboard_grab :42) everything works as expected.

The following snippet from --debug=keyboard suggests that the parameter lists gets corrupted somewhere (notice the long single string 'Control+Menu:toggle_keyboard_grab, [...], #+G:toggle_keyboard_grab'). So far I've checked that the commandline gets parsed correctly by optparse (resulting in a list with one element per shortcut). However when the options reach parse_shortcuts, they are broken. As this happens in a different process with --attach=yes, I think there might be a problem with passing the arguments between processes, but I didn't dig deeper.

2018-04-29 17:21:01,694 parse_shortcuts(['Control+Menu:toggle_keyboard_grab', 'Shift+Menu:toggle_pointer_grab', 'Shift+F11:toggle_fullscreen', '#+F1:show_menu', '#+F2:show_start_new_command', '#+F3:show_bug_report', '#+F4:quit', '#+F5:increase_quality', '#+F6:decrease_quality', '#+F7:increase_speed', '#+F8:decrease_speed', '#+F10:magic_key', '#+F11:show_session_info', '#+F12:toggle_debug', '#+plus:scaleup', '#+minus:scaledown', '#+underscore:scaledown', '#+KP_Add:scaleup', '#+KP_Subtract:scaledown', '#+KP_Multiply:scalereset', '#+bar:scalereset', '#+question:scalingoff', 'Control+Menu:toggle_keyboard_grab, Shift+Menu:toggle_pointer_grab, Shift+F11:toggle_fullscreen, #+F1:show_menu, #+F2:show_start_new_command, #+F3:show_bug_report, #+F4:quit, #+F5:increase_quality, #+F6:decrease_quality, #+F7:increase_speed, #+F8:decrease_speed, #+F10:magic_key, #+F11:show_session_info, #+F12:toggle_debug, #+plus:scaleup, #+minus:scaledown, #+underscore:scaledown, #+KP_Add:scaleup, #+KP_Subtract:scaledown, #+KP_Multiply:scalereset, #+bar:scalereset, #+question:scalingoff, #+G:toggle_keyboard_grab'])
2018-04-29 17:21:01,694 parse_shortcuts: modifier names={'control': 'control', 'hyper': 'mod4', 'ctrl': 'control', 'shift': 'shift', 'mode_switch': 'mod5', 'altgr': 'mod5', 'meta': 'mod1', 'alt': 'mod1', 'super': 'mod3'}
2018-04-29 17:21:01,695 shortcut modifiers=['meta', 'shift']
2018-04-29 17:21:01,695 action(Control+Menu:toggle_keyboard_grab)=toggle_keyboard_grab()
2018-04-29 17:21:01,695 shortcut(Control+Menu:toggle_keyboard_grab)=['control'], toggle_keyboard_grab, ()
2018-04-29 17:21:01,695 action(Shift+Menu:toggle_pointer_grab)=toggle_pointer_grab()
2018-04-29 17:21:01,695 shortcut(Shift+Menu:toggle_pointer_grab)=['shift'], toggle_pointer_grab, ()
2018-04-29 17:21:01,695 action(Shift+F11:toggle_fullscreen)=toggle_fullscreen()
2018-04-29 17:21:01,695 shortcut(Shift+F11:toggle_fullscreen)=['shift'], toggle_fullscreen, ()
2018-04-29 17:21:01,695 action(#+F1:show_menu)=show_menu()
2018-04-29 17:21:01,695 shortcut(#+F1:show_menu)=['mod1', 'shift'], show_menu, ()
2018-04-29 17:21:01,695 action(#+F2:show_start_new_command)=show_start_new_command()
2018-04-29 17:21:01,695 shortcut(#+F2:show_start_new_command)=['mod1', 'shift'], show_start_new_command, ()
2018-04-29 17:21:01,695 action(#+F3:show_bug_report)=show_bug_report()
2018-04-29 17:21:01,696 shortcut(#+F3:show_bug_report)=['mod1', 'shift'], show_bug_report, ()
2018-04-29 17:21:01,696 action(#+F4:quit)=quit()
2018-04-29 17:21:01,696 shortcut(#+F4:quit)=['mod1', 'shift'], quit, ()
2018-04-29 17:21:01,696 action(#+F5:increase_quality)=increase_quality()
2018-04-29 17:21:01,696 shortcut(#+F5:increase_quality)=['mod1', 'shift'], increase_quality, ()
2018-04-29 17:21:01,696 action(#+F6:decrease_quality)=decrease_quality()
2018-04-29 17:21:01,696 shortcut(#+F6:decrease_quality)=['mod1', 'shift'], decrease_quality, ()
2018-04-29 17:21:01,696 action(#+F7:increase_speed)=increase_speed()
2018-04-29 17:21:01,696 shortcut(#+F7:increase_speed)=['mod1', 'shift'], increase_speed, ()
2018-04-29 17:21:01,696 action(#+F8:decrease_speed)=decrease_speed()
2018-04-29 17:21:01,696 shortcut(#+F8:decrease_speed)=['mod1', 'shift'], decrease_speed, ()
2018-04-29 17:21:01,696 action(#+F10:magic_key)=magic_key()
2018-04-29 17:21:01,696 shortcut(#+F10:magic_key)=['mod1', 'shift'], magic_key, ()
2018-04-29 17:21:01,696 action(#+F11:show_session_info)=show_session_info()
2018-04-29 17:21:01,696 shortcut(#+F11:show_session_info)=['mod1', 'shift'], show_session_info, ()
2018-04-29 17:21:01,696 action(#+F12:toggle_debug)=toggle_debug()
2018-04-29 17:21:01,697 shortcut(#+F12:toggle_debug)=['mod1', 'shift'], toggle_debug, ()
2018-04-29 17:21:01,697 action(#+plus:scaleup)=scaleup()
2018-04-29 17:21:01,697 shortcut(#+plus:scaleup)=['mod1', 'shift'], scaleup, ()
2018-04-29 17:21:01,697 action(#+minus:scaledown)=scaledown()
2018-04-29 17:21:01,697 shortcut(#+minus:scaledown)=['mod1', 'shift'], scaledown, ()
2018-04-29 17:21:01,697 action(#+underscore:scaledown)=scaledown()
2018-04-29 17:21:01,697 shortcut(#+underscore:scaledown)=['mod1', 'shift'], scaledown, ()
2018-04-29 17:21:01,697 action(#+KP_Add:scaleup)=scaleup()
2018-04-29 17:21:01,697 shortcut(#+KP_Add:scaleup)=['mod1', 'shift'], scaleup, ()
2018-04-29 17:21:01,697 action(#+KP_Subtract:scaledown)=scaledown()
2018-04-29 17:21:01,697 shortcut(#+KP_Subtract:scaledown)=['mod1', 'shift'], scaledown, ()
2018-04-29 17:21:01,697 action(#+KP_Multiply:scalereset)=scalereset()
2018-04-29 17:21:01,697 shortcut(#+KP_Multiply:scalereset)=['mod1', 'shift'], scalereset, ()
2018-04-29 17:21:01,697 action(#+bar:scalereset)=scalereset()
2018-04-29 17:21:01,697 shortcut(#+bar:scalereset)=['mod1', 'shift'], scalereset, ()
2018-04-29 17:21:01,697 action(#+question:scalingoff)=scalingoff()
2018-04-29 17:21:01,697 shortcut(#+question:scalingoff)=['mod1', 'shift'], scalingoff, ()
2018-04-29 17:21:01,698 action(Control+Menu:toggle_keyboard_grab, Shift+Menu:toggle_pointer_grab, Shift+F11:toggle_fullscreen, #+F1:show_menu, #+F2:show_start_new_command, #+F3:show_bug_report, #+F4:quit, #+F5:increase_quality, #+F6:decrease_quality, #+F7:increase_speed, #+F8:decrease_speed, #+F10:magic_key, #+F11:show_session_info, #+F12:toggle_debug, #+plus:scaleup, #+minus:scaledown, #+underscore:scaledown, #+KP_Add:scaleup, #+KP_Subtract:scaledown, #+KP_Multiply:scalereset, #+bar:scalereset, #+question:scalingoff, #+G:toggle_keyboard_grab)=toggle_keyboard_grab, Shift+Menu:toggle_pointer_grab, Shift+F11:toggle_fullscreen, #+F1:show_menu, #+F2:show_start_new_command, #+F3:show_bug_report, #+F4:quit, #+F5:increase_quality, #+F6:decrease_quality, #+F7:increase_speed, #+F8:decrease_speed, #+F10:magic_key, #+F11:show_session_info, #+F12:toggle_debug, #+plus:scaleup, #+minus:scaledown, #+underscore:scaledown, #+KP_Add:scaleup, #+KP_Subtract:scaledown, #+KP_Multiply:scalereset, #+bar:scalereset, #+question:scalingoff, #+G:toggle_keyboard_grab()
2018-04-29 17:21:01,698 shortcut(Control+Menu:toggle_keyboard_grab, Shift+Menu:toggle_pointer_grab, Shift+F11:toggle_fullscreen, #+F1:show_menu, #+F2:show_start_new_command, #+F3:show_bug_report, #+F4:quit, #+F5:increase_quality, #+F6:decrease_quality, #+F7:increase_speed, #+F8:decrease_speed, #+F10:magic_key, #+F11:show_session_info, #+F12:toggle_debug, #+plus:scaleup, #+minus:scaledown, #+underscore:scaledown, #+KP_Add:scaleup, #+KP_Subtract:scaledown, #+KP_Multiply:scalereset, #+bar:scalereset, #+question:scalingoff, #+G:toggle_keyboard_grab)=['control'], toggle_keyboard_grab, Shift+Menu:toggle_pointer_grab, Shift+F11:toggle_fullscreen, #+F1:show_menu, #+F2:show_start_new_command, #+F3:show_bug_report, #+F4:quit, #+F5:increase_quality, #+F6:decrease_quality, #+F7:increase_speed, #+F8:decrease_speed, #+F10:magic_key, #+F11:show_session_info, #+F12:toggle_debug, #+plus:scaleup, #+minus:scaledown, #+underscore:scaledown, #+KP_Add:scaleup, #+KP_Subtract:scaledown, #+KP_Multiply:scalereset, #+bar:scalereset, #+question:scalingoff, #+G:toggle_keyboard_grab, ()
2018-04-29 17:21:01,698 parse_shortcuts(['Control+Menu:toggle_keyboard_grab', 'Shift+Menu:toggle_pointer_grab', 'Shift+F11:toggle_fullscreen', '#+F1:show_menu', '#+F2:show_start_new_command', '#+F3:show_bug_report', '#+F4:quit', '#+F5:increase_quality', '#+F6:decrease_quality', '#+F7:increase_speed', '#+F8:decrease_speed', '#+F10:magic_key', '#+F11:show_session_info', '#+F12:toggle_debug', '#+plus:scaleup', '#+minus:scaledown', '#+underscore:scaledown', '#+KP_Add:scaleup', '#+KP_Subtract:scaledown', '#+KP_Multiply:scalereset', '#+bar:scalereset', '#+question:scalingoff', 'Control+Menu:toggle_keyboard_grab, Shift+Menu:toggle_pointer_grab, Shift+F11:toggle_fullscreen, #+F1:show_menu, #+F2:show_start_new_command, #+F3:show_bug_report, #+F4:quit, #+F5:increase_quality, #+F6:decrease_quality, #+F7:increase_speed, #+F8:decrease_speed, #+F10:magic_key, #+F11:show_session_info, #+F12:toggle_debug, #+plus:scaleup, #+minus:scaledown, #+underscore:scaledown, #+KP_Add:scaleup, #+KP_Subtract:scaledown, #+KP_Multiply:scalereset, #+bar:scalereset, #+question:scalingoff, #+G:toggle_keyboard_grab'])={'F1': [(['mod1', 'shift'], 'show_menu', ())], 'F2': [(['mod1', 'shift'], 'show_start_new_command', ())], 'F3': [(['mod1', 'shift'], 'show_bug_report', ())], 'F4': [(['mod1', 'shift'], 'quit', ())], 'F5': [(['mod1', 'shift'], 'increase_quality', ())], 'F6': [(['mod1', 'shift'], 'decrease_quality', ())], 'F7': [(['mod1', 'shift'], 'increase_speed', ())], 'F8': [(['mod1', 'shift'], 'decrease_speed', ())], 'Menu': [(['control'], 'toggle_keyboard_grab', ()), (['shift'], 'toggle_pointer_grab', ()), (['control'], 'toggle_keyboard_grab, Shift+Menu:toggle_pointer_grab, Shift+F11:toggle_fullscreen, #+F1:show_menu, #+F2:show_start_new_command, #+F3:show_bug_report, #+F4:quit, #+F5:increase_quality, #+F6:decrease_quality, #+F7:increase_speed, #+F8:decrease_speed, #+F10:magic_key, #+F11:show_session_info, #+F12:toggle_debug, #+plus:scaleup, #+minus:scaledown, #+underscore:scaledown, #+KP_Add:scaleup, #+KP_Subtract:scaledown, #+KP_Multiply:scalereset, #+bar:scalereset, #+question:scalingoff, #+G:toggle_keyboard_grab', ())], 'KP_Subtract': [(['mod1', 'shift'], 'scaledown', ())], 'question': [(['mod1', 'shift'], 'scalingoff', ())], 'KP_Add': [(['mod1', 'shift'], 'scaleup', ())], 'plus': [(['mod1', 'shift'], 'scaleup', ())], 'underscore': [(['mod1', 'shift'], 'scaledown', ())], 'F12': [(['mod1', 'shift'], 'toggle_debug', ())], 'bar': [(['mod1', 'shift'], 'scalereset', ())], 'F10': [(['mod1', 'shift'], 'magic_key', ())], 'F11': [(['shift'], 'toggle_fullscreen', ()), (['mod1', 'shift'], 'show_session_info', ())], 'minus': [(['mod1', 'shift'], 'scaledown', ())], 'KP_Multiply': [(['mod1', 'shift'], 'scalereset', ())]}

Tested with Xpra 2.2.6 on Arch Linux.



Sun, 29 Apr 2018 18:14:23 GMT - Antoine Martin: status changed; milestone set


Mon, 30 Apr 2018 15:40:01 GMT - Antoine Martin: owner, status, summary changed

For more information on the keyboard shortcut and shortcut-modifiers feature, see #1657.

This bug is fixed by r19132.

Note: as per the man page (now updated in r19133) and the xpra -h output, if any keyboard shortcuts are specified on the command line using --key-shortcut=STRING, these will now replace the default list of shortcuts. (we were previously appending to that list, which was causing the problems)

@julian: please close if this works for you.


Fri, 01 Jun 2018 11:47:19 GMT - Antoine Martin: status changed; resolution set


Sat, 23 Jan 2021 05:34:45 GMT - migration script:

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