Xpra: Ticket #2580: Server -> Windows 10 Client Clipboard not working.

With xpra_cmd.exe am able to get bi-directional clipboard working with version 2.4.3-r21365. However, any version beyond this and I can only copy from windows client into the Ubuntu 18.04 server version 2.1.3-r17247, not to. I have tried every client release of v3.0.x, as well as v2.5.x.

Please see the below debug output of an attempted (failed) copy operation from server -> client while using 3.0.5-r24942 :

C:\xpra>.\Xpra_cmd.exe start ssh/testuser:haeWosee7ra7eiSh@192.168.11.1:30000 --start-child="palemoon" --clipboard=yes --clipboard-direction=both --opengl=no -d clipboard
2020-02-06 13:06:08,897 Xpra GTK3 client version 3.0.5-r24942 64-bit
2020-02-06 13:06:08,912  running on Microsoft Windows 10
2020-02-06 13:06:08,975 Warning: failed to import opencv:
2020-02-06 13:06:08,975  No module named 'cv2'
2020-02-06 13:06:08,975  webcam forwarding is disabled
2020-02-06 13:06:09,740 GStreamer version 1.16.2 for Python 3.8.0 64-bit
2020-02-06 13:06:10,022 Connected (version 2.0, client OpenSSH_7.6p1)
2020-02-06 13:06:10,100 SSH password authentication failed:
2020-02-06 13:06:10,100  Bad authentication type; allowed types: ['publickey', 'password']
2020-02-06 13:06:10,115 Authentication (password) successful!
2020-02-06 13:06:10,475 make_clipboardmenuitem()
Traceback (most recent call last):
  File "E:\Xpra\tags\v3.0.x\src/xpra/client/mixins/tray.py", line 49, in setup_xpra_tray
  File "E:\Xpra\tags\v3.0.x\src/xpra/client/mixins/tray.py", line 111, in create_xpra_tray
  File "E:\Xpra\tags\v3.0.x\src/xpra/client/mixins/tray.py", line 138, in get_tray_title
TypeError: sequence item 0: expected str instance, tuple found
2020-02-06 13:06:23,662  keyboard settings: layout=us
2020-02-06 13:06:23,662  desktop size is 1739x978 with 1 screen:
2020-02-06 13:06:23,678   Default (460x258 mm - DPI: 96x96) workarea: 1739x939
2020-02-06 13:06:23,678     DISPLAY1 (346x194 mm - DPI: 127x128)
2020-02-06 13:06:24,803 DISCARD_TARGETS=re.compile('^NeXT'), re.compile('^com\\.apple\\.'), re.compile('^CorePasteboardFlavorType'), re.compile('^dyn\\.')
2020-02-06 13:06:24,803 DISCARD_EXTRA_TARGETS=re.compile('^SAVE_TARGETS$'), re.compile('^COMPOUND_TEXT'), re.compile('GTK_TEXT_BUFFER_CONTENTS'), re.compile('^text/plain;charset=utf-8')
2020-02-06 13:06:24,819 server clipboard: supported=True, direction=both, supports enable selection=True
2020-02-06 13:06:24,819 client clipboard: supported=True, direction=both
2020-02-06 13:06:24,819 parse_clipboard_caps() clipboard enabled=True
2020-02-06 13:06:24,819 server clipboard does not include contents slice fix
2020-02-06 13:06:24,819 enabled remote logging
2020-02-06 13:06:24,819 Xpra X11 server version 2.1.3-r17247 64-bit
2020-02-06 13:06:24,819  running on Linux Ubuntu 18.04 bionic
2020-02-06 13:06:24,834 process_ui_capabilities() clipboard_enabled=True
2020-02-06 13:06:24,834 get_clipboard_helper_classes() unfiltered list=[None, 'xpra.platform.win32.clipboard.Win32Clipboard']
2020-02-06 13:06:24,850 get_clipboard_helper_classes() options=[None, 'xpra.platform.win32.clipboard.Win32Clipboard']
2020-02-06 13:06:24,850 get_clipboard_helper_classes()=[<class 'xpra.platform.win32.clipboard.Win32Clipboard'>]
2020-02-06 13:06:24,850 make_clipboard_helper() options=[<class 'xpra.platform.win32.clipboard.Win32Clipboard'>]
2020-02-06 13:06:24,975 setup_clipboard_helper(<class 'xpra.platform.win32.clipboard.Win32Clipboard'>)
2020-02-06 13:06:24,990 setup_clipboard_helper() kwargs={'clipboards.local': ['CLIPBOARD'], 'clipboards.remote': ['CLIPBOARD', 'PRIMARY', 'SECONDARY'], 'can-send': True, 'can-receive': True, 'remote-loop-uuids': {}, 'clipboard.local': 'CLIPBOARD', 'clipboard.remote': 'CLIPBOARD'}
2020-02-06 13:06:24,990 Win32Clipboard.init_window() creating clipboard window class and instance
2020-02-06 13:06:24,990 RegisterClassExA(XpraWin32Clipboard)=0xc1b2
2020-02-06 13:06:24,990 clipboard window=10355556
2020-02-06 13:06:24,990 ClipboardProtocolHelperCore.init_proxies : {'CLIPBOARD': Win32ClipboardProxy}
2020-02-06 13:06:25,006 verify_remote_loop_uuids({})
2020-02-06 13:06:25,006 clipboard helper=ClipboardProtocolHelperCore
2020-02-06 13:06:25,006 send_clipboard_selections(['CLIPBOARD', 'PRIMARY', 'SECONDARY']) server_clipboard_enable_selections=True
2020-02-06 13:06:25,006 _send_clipboard_token_handler(Win32ClipboardProxy, '()')
2020-02-06 13:06:25,006 clipboard_send: clipboard-token
2020-02-06 13:06:25,022 clipboard_toggled(gtk3.client,) clipboard_enabled=True, server_clipboard=True
2020-02-06 13:06:25,022 send_clipboard_selections(['CLIPBOARD', 'PRIMARY', 'SECONDARY']) server_clipboard_enable_selections=True
2020-02-06 13:06:25,022 _send_clipboard_token_handler(Win32ClipboardProxy, '()')
2020-02-06 13:06:25,037 clipboard_send: clipboard-token
2020-02-06 13:06:25,194 set_clipboard_menu(()) helper=ClipboardProtocolHelperCore, server=True, client=True
2020-02-06 13:06:25,194 make_translatedclipboard_optionsmenuitem()
2020-02-06 13:06:36,469 process_clipboard_packet: clipboard-token, helper=ClipboardProtocolHelperCore
2020-02-06 13:06:36,469 process clipboard token selection=CLIPBOARD, local clipboard name=CLIPBOARD, proxy=Win32ClipboardProxy
2020-02-06 13:06:36,469 got token, selection=CLIPBOARD, targets=None, target data=None, claim=True, can-receive=True
2020-02-06 13:06:36,485 _filter_targets(())=()
2020-02-06 13:06:36,485 send_clipboard_request_handler(Win32ClipboardProxy, 'CLIPBOARD', 'TARGETS')
2020-02-06 13:06:36,485 send_clipboard_request id=0
2020-02-06 13:06:36,485 clipboard_progress(1, None)
2020-02-06 13:06:36,485 clipboard_send: clipboard-request
2020-02-06 13:06:36,516 process_clipboard_packet: clipboard-contents, helper=ClipboardProtocolHelperCore
2020-02-06 13:06:36,516 process clipboard contents, selection=CLIPBOARD, type=ATOM, format=32
2020-02-06 13:06:36,516 _filter_targets((b'TIMESTAMP', b'TARGETS', b'MULTIPLE', b'UTF8_STRING', b'TEXT', b'STRING'))=('TIMESTAMP', 'TARGETS', 'MULTIPLE', 'UTF8_STRING', 'TEXT', 'STRING')
2020-02-06 13:06:36,532 clipboard wire -> raw: ('ATOM', 32, 'atoms', '"(b\'TIMESTAMP\', b\'TARGETS\', b\'MULTIPLE\', b\'UTF8_STRING\', b\'TEXT\', b\'STRING\')"') -> "('TIMESTAMP', 'TARGETS', 'MULTIPLE', 'UTF8_STRING', 'TEXT', 'STRING')"
2020-02-06 13:06:36,532 clipboard_progress(0, None)
2020-02-06 13:06:36,532 clipboard got contents(0, 'ATOM', 32, '"(\'TIMESTAMP\', \'TARGETS\', \'MULTIPLE\', \'UTF8_STRING\', \'TEXT\', \'STRING\')"'): proxy=Win32ClipboardProxy for selection=CLIPBOARD
2020-02-06 13:06:36,579 _filter_targets(('TIMESTAMP', 'TARGETS', 'MULTIPLE', 'UTF8_STRING', 'TEXT', 'STRING'))=('TIMESTAMP', 'TARGETS', 'MULTIPLE', 'UTF8_STRING', 'TEXT', 'STRING')
2020-02-06 13:06:36,594 got_contents: tell OS we have TIMESTAMP, TARGETS, MULTIPLE, UTF8_STRING, TEXT, STRING

And here is the output from a successful copy operation using v2.4.3-r21365 :

C:\xpra.orig>.\Xpra_cmd.exe start ssh/testuser:haeWosee7ra7eiSh@192.168.11.1:30000 --start-child="palemoon" --clipboard=yes --clipboard-direction=both --opengl=no -d clipboard
2020-02-06 13:13:21,368 Xpra gtk2 client version 2.4.3-r21365 64-bit
2020-02-06 13:13:21,384  running on Microsoft Windows 10
2020-02-06 13:13:21,431 Warning: failed to import opencv:
2020-02-06 13:13:21,446  No module named cv2
2020-02-06 13:13:21,462  webcam forwarding is disabled
2020-02-06 13:13:22,009 GStreamer version 1.14.4 for Python 2.7.15 64-bit
2020-02-06 13:13:22,165 make_clipboardmenuitem()
2020-02-06 13:13:36,900  keyboard settings: layout=us
2020-02-06 13:13:36,900  desktop size is 1739x978 with 1 screen:
2020-02-06 13:13:36,900   Default (460x258 mm - DPI: 96x96) workarea: 1739x939
2020-02-06 13:13:36,915     DISPLAY1 (346x194 mm - DPI: 127x128)
2020-02-06 13:13:37,337 DISCARD_TARGETS=^SAVE_TARGETS$, ^COMPOUND_TEXT, ^NeXT, ^com\.apple\., ^CorePasteboardFlavorType, ^dyn\.
2020-02-06 13:13:37,337 server clipboard: supported=True, direction=both, supports enable selection=True
2020-02-06 13:13:37,337 client clipboard: supported=True, direction=both
2020-02-06 13:13:37,353 parse_clipboard_caps() clipboard enabled=True
2020-02-06 13:13:37,353 enabled remote logging
2020-02-06 13:13:37,353 Xpra X11 server version 2.1.3-r17247 64-bit
2020-02-06 13:13:37,353  running on Linux Ubuntu 18.04 bionic
2020-02-06 13:13:37,368 process_ui_capabilities() clipboard_enabled=True
2020-02-06 13:13:37,368 get_clipboard_helper_classes() unfiltered list=['xpra.clipboard.translated_clipboard.TranslatedClipboardProtocolHelper', 'xpra.clipboard.gdk_clipboard.GDKClipboardProtocolHelper', 'xpra.clipboard.clipboard_base.DefaultClipboardProtocolHelper', 'xpra.clipboard.translated_clipboard.TranslatedClipboardProtocolHelper']
2020-02-06 13:13:37,368 get_clipboard_helper_classes() options=['xpra.clipboard.translated_clipboard.TranslatedClipboardProtocolHelper', 'xpra.clipboard.gdk_clipboard.GDKClipboardProtocolHelper', 'xpra.clipboard.clipboard_base.DefaultClipboardProtocolHelper', 'xpra.clipboard.translated_clipboard.TranslatedClipboardProtocolHelper']
2020-02-06 13:13:37,384 get_clipboard_helper_classes()=[<class 'xpra.clipboard.translated_clipboard.TranslatedClipboardProtocolHelper'>, <class 'xpra.clipboard.gdk_clipboard.GDKClipboardProtocolHelper'>, <class 'xpra.clipboard.clipboard_base.DefaultClipboardProtocolHelper'>, <class 'xpra.clipboard.translated_clipboard.TranslatedClipboardProtocolHelper'>]
2020-02-06 13:13:37,384 make_clipboard_helper() options=[<class 'xpra.clipboard.translated_clipboard.TranslatedClipboardProtocolHelper'>, <class 'xpra.clipboard.gdk_clipboard.GDKClipboardProtocolHelper'>, <class 'xpra.clipboard.clipboard_base.DefaultClipboardProtocolHelper'>, <class 'xpra.clipboard.translated_clipboard.TranslatedClipboardProtocolHelper'>]
2020-02-06 13:13:37,400 setup_clipboard_helper(<class 'xpra.clipboard.translated_clipboard.TranslatedClipboardProtocolHelper'>)
2020-02-06 13:13:37,447 setup_clipboard_helper() kwargs={'clipboard.remote': 'CLIPBOARD', 'can-send': True, 'clipboard.local': 'CLIPBOARD', 'clipboards.remote': ['CLIPBOARD', 'PRIMARY', 'SECONDARY'], 'remote-loop-uuids': {}, 'clipboards.local': ['CLIPBOARD'], 'can-receive': True}
2020-02-06 13:13:37,447 TranslatedClipboardProtocolHelper local=CLIPBOARD, remote=CLIPBOARD
2020-02-06 13:13:37,447 TranslatedClipboardProtocolHelper.init_proxies : {'CLIPBOARD': ClipboardProxy(CLIPBOARD)}
2020-02-06 13:13:37,447 verify_remote_loop_uuids({})
2020-02-06 13:13:37,447 clipboard helper=TranslatedClipboardProtocolHelper
2020-02-06 13:13:37,462 send_clipboard_selections(['CLIPBOARD']) server_clipboard_enable_selections=True
2020-02-06 13:13:37,462 send clipboard token: CLIPBOARD
2020-02-06 13:13:37,462 local_to_remote(CLIPBOARD) local_clipboard=CLIPBOARD, remote_clipboard=CLIPBOARD
2020-02-06 13:13:37,462 set_clipboard_menu(()) helper=TranslatedClipboardProtocolHelper, server=True, client=True
2020-02-06 13:13:37,462 make_translatedclipboard_optionsmenuitem()
2020-02-06 13:13:37,478 clipboard: CLIPBOARD owner_changed, enabled=True, can-send=True, can-receive=True, have_token=False, greedy_client=False, block_owner_change=False
2020-02-06 13:14:06,400 process_clipboard_packet: clipboard-token, helper=TranslatedClipboardProtocolHelper
2020-02-06 13:14:06,415 process clipboard handler(clipboard-token)=<bound method TranslatedClipboardProtocolHelper._process_clipboard_token of TranslatedClipboardProtocolHelper>
2020-02-06 13:14:06,415 remote_to_local(CLIPBOARD) local_clipboard=CLIPBOARD, remote_clipboard=CLIPBOARD
2020-02-06 13:14:06,415 process clipboard token selection=CLIPBOARD, local clipboard name=CLIPBOARD, proxy=ClipboardProxy(CLIPBOARD)
2020-02-06 13:14:06,415 got token, selection=CLIPBOARD, targets=None, target data=None, claim=True, can-receive=True
2020-02-06 13:14:06,415 claim() selection=CLIPBOARD, enabled=True
2020-02-06 13:14:06,431 clipboard: CLIPBOARD owner_changed, enabled=True, can-send=True, can-receive=True, have_token=True, greedy_client=False, block_owner_change=True
2020-02-06 13:14:06,447 do_selection_request_event(<gtk.gdk.Event at 0000000004e62c38: GDK_SELECTION_REQUEST selection=CLIPBOARD, target=UTF8_STRING, property=GDK_SELECTION>)
2020-02-06 13:14:06,447 target for CLIPBOARD: 'UTF8_STRING'
2020-02-06 13:14:06,447 do_selection_request_event(<gtk.gdk.Event at 0000000004e62c38: GDK_SELECTION_REQUEST selection=CLIPBOARD, target=UTF8_STRING, property=GDK_SELECTION>) target=UTF8_STRING, selection=CLIPBOARD
2020-02-06 13:14:06,462 do_selection_get(<GtkSelectionData at 0x61db70>, 0, 0) selection=CLIPBOARD
2020-02-06 13:14:06,462 get clipboard from remote handler id=0
2020-02-06 13:14:06,462 clipboard_progress(1, None)
2020-02-06 13:14:06,462 clipboard_notify(1)
2020-02-06 13:14:06,478 local_to_remote(CLIPBOARD) local_clipboard=CLIPBOARD, remote_clipboard=CLIPBOARD
2020-02-06 13:14:06,478 remove_block: CLIPBOARD
2020-02-06 13:14:06,556 process_clipboard_packet: clipboard-contents, helper=TranslatedClipboardProtocolHelper
2020-02-06 13:14:06,556 process clipboard handler(clipboard-contents)=<bound method TranslatedClipboardProtocolHelper._process_clipboard_contents of TranslatedClipboardProtocolHelper>
2020-02-06 13:14:06,556 process clipboard contents, selection=CLIPBOARD, type=UTF8_STRING, format=8
2020-02-06 13:14:06,556 wire selection to raw, encoding=bytes, type=UTF8_STRING, format=8, len(data)=26
2020-02-06 13:14:06,572 clipboard wire -> raw: ('UTF8_STRING', 8, 'bytes', 'https://forum.palemoon.org') -> 'https://forum.palemoon.org'
2020-02-06 13:14:06,572 got clipboard contents for id=0 len=26, loop=NestedMainLoop(0x4ef0190) (type=UTF8_STRING, format=8)
2020-02-06 13:14:06,572 get clipboard from remote result(0)={'data': 'https://forum.palemoon.org', 'type': 'UTF8_STRING', 'format': 8}
2020-02-06 13:14:06,572 clipboard_progress(0, None)
2020-02-06 13:14:06,572 clipboard_notify(0)
2020-02-06 13:14:06,572 do_selection_get(<GtkSelectionData at 0x61db70>,0,0) calling selection_data.set(UTF8_STRING, 8, <type 'str'>:26)
2020-02-06 13:14:06,572 clipboard: CLIPBOARD owner_changed, enabled=True, can-send=True, can-receive=True, have_token=True, greedy_client=False, block_owner_change=True
2020-02-06 13:14:06,572 remove_block: CLIPBOARD


Fri, 07 Feb 2020 02:12:11 GMT - Antoine Martin: owner changed

Xpra X11 server version 2.1.3-r17247 64-bit

Please try with a supported version. (see also wiki/Packaging/DistributionPackages)


Fri, 07 Feb 2020 15:54:31 GMT - jdrummond:

Thanks for your help. Changing server version to match client version (3.0.5) fixed the problem.


Fri, 07 Feb 2020 15:54:39 GMT - jdrummond: status changed; resolution set


Sat, 23 Jan 2021 05:55:09 GMT - migration script:

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