Xpra: Ticket #441: 0.10.5 can't connect to 0.10.4

After upgrading client from 0.10.4 to 0.10.5 I can't attach to session still running in 0.10.4 -- xpra appears to establish connection but then immediately crash:

2013-10-15 00:29:37,065 Attached to ssh:######:11 (press Control-C to detach)
2013-10-15 00:29:37,722 error in write format loop
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/xpra/net/protocol.py", line 270, in _write_format_thread_loop
    self._add_packet_to_queue(*self._get_packet_cb())
  File "/usr/lib/python2.7/dist-packages/xpra/net/protocol.py", line 280, in _add_packet_to_queue
    chunks, proto_flags = self.encode(packet)
  File "/usr/lib/python2.7/dist-packages/xpra/net/protocol.py", line 413, in encode
    main_packet, proto_version = self._encoder(packet)
  File "/usr/lib/python2.7/dist-packages/xpra/net/protocol.py", line 364, in rencode
    return  rencode_dumps(data), Protocol.FLAGS_RENCODE
  File "rencode.pyx", line 324, in xpra.net.rencode._rencode.dumps (xpra/net/rencode/rencode.c:4023)
  File "rencode.pyx", line 304, in xpra.net.rencode._rencode.encode (xpra/net/rencode/rencode.c:3832)
  File "rencode.pyx", line 244, in xpra.net.rencode._rencode.encode_list (xpra/net/rencode/rencode.c:2851)
  File "rencode.pyx", line 307, in xpra.net.rencode._rencode.encode (xpra/net/rencode/rencode.c:3857)
  File "rencode.pyx", line 256, in xpra.net.rencode._rencode.encode_dict (xpra/net/rencode/rencode.c:3126)
  File "rencode.pyx", line 310, in xpra.net.rencode._rencode.encode (xpra/net/rencode/rencode.c:3883)
Exception: type <class 'xpra.client.gtk2.client.gtk.gdk.ScreenX11'> not handled
2013-10-15 00:29:37,734 TrayBacking does not have any pixels / format!
2013-10-15 00:29:37,735 TrayBacking does not have any pixels / format!
2013-10-15 00:29:37,735 TrayBacking does not have any pixels / format!
2013-10-15 00:29:37,735 TrayBacking does not have any pixels / format!
2013-10-15 00:29:37,735 TrayBacking does not have any pixels / format!
2013-10-15 00:29:37,739 connection lost: error in network packet write/format: type <class 'xpra.client.gtk2.client.gtk.gdk.ScreenX11'> not handled
2013-10-15 00:29:37,740 connection closed after 37 packets received (0.5M bytes) and 37 packets sent (29K bytes)
2013-10-15 00:29:37,742 Connection lost

I use RAW encoding by default. Everything works when I downgrade client back to 0.10.4.



Mon, 14 Oct 2013 14:18:23 GMT - Antoine Martin: owner, priority, status, component changed; milestone set

Note: this is the packet encoding, not picture encoding. It may work if you force it to use the old (slower) bencoder instead:

XPRA_USE_BENCODER=1 xpra attach ..

That's an odd bug caused by r4445: we previously dropped invalid data rather than "rencode"ing it causing all sorts of intractable problems, this changeset makes it error out. Erroring out is the right thing to do as the previous behaviour (not returning any value) causes very hard to debug issues: I spent about half a day figuring out that the resulting stream may or may not decode as a valid "rencode"d stream, and it may or may not have all the items we put in it originally... hell!

Which means that we now have to figure out why invalid data ends up in the encoding stream... The fact that we see:

Attached to ...

Means that it has completed the handshake, so the server has sent the hello back. The item in it we do not expect is a ScreenX11, so I suspect that it has something to do with the screen_size_changed callback. Not sure why it would fire right after you connect though...

Can please you post the debug messages that happen just before the error? (whilst I hunt for the real bug) As for r4493, we will log the packet type before trying to encode it, which will make future debugging easier.


Mon, 14 Oct 2013 14:39:54 GMT - Antoine Martin:

To make it stand out, I've used (no need for -d all):

--- src/xpra/client/gtk2/client.py	(revision 4494)
+++ src/xpra/client/gtk2/client.py	(working copy)
@@ -286,7 +286,7 @@
                         work_x, work_y, work_width, work_height)
             screen_sizes.append(item)
             i += 1
-        log("get_screen_sizes()=%s", screen_sizes)
+        log.info("get_screen_sizes()=%s", screen_sizes)
         return screen_sizes

And this is what I see on my system:

get_screen_sizes()=[(':0.0', 2560, 1600, 339, 212, [('DFP2', 0, 0, 2560, 1600, 646, 406)], 0, 0, 2560, 1575)]

Nothing unusual here... And I really don't see where we could be sending the

gtk.gdk.ScreenX11

Even more weird is the namespace it is showing for it:

xpra.client.gtk2.client.gtk.gdk.ScreenX11

What is that about!?


Tue, 15 Oct 2013 02:58:25 GMT - onlyjob:

XPRA_USE_BENCODER=1 had no effect; here is a tail of client's (0.10.5) log taken with "-d all" on unsuccessful attach:

2013-10-15 13:51:08,391 Got configure event: <gtk.gdk.Event at 0x39be6e8: GDK_CONFIGURE x=20, y=175, width=1272, height=941>
2013-10-15 13:51:08,392 xget_u32_property(<gtk.gdk.Window object at 0x3a90d20 (GdkWindow at 0x3d11120)>, _NET_WM_DESKTOP)=0
2013-10-15 13:51:08,392 do_get_workspace() found value=0 from <gtk.gdk.Window object at 0x3a90d20 (GdkWindow at 0x3d11120)> / _NET_WM_DESKTOP
2013-10-15 13:51:08,393 configure-window for wid=9111 with client props={'screen': 0, 'workspace': 0, 'maximized': False}
2013-10-15 13:51:08,393 add_packet_to_queue(configure-window ...)
2013-10-15 13:51:08,502 GTKStatusIconTray.get_geometry() <gtk.StatusIcon object at 0x3a889b0 (GtkStatusIcon at 0x3afb1c0)>.get_geometry()=(<gtk.gdk.ScreenX11 object at 0x3a90d20 (GdkScreenX11 at 0x22db0f0)>, gtk.gdk.Rectangle(0, 0, 200, 200), <enum GTK_ORIENTATION_HORIZONTAL of type GtkOrientation>)
2013-10-15 13:51:08,504 error in write format loop
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/xpra/net/protocol.py", line 270, in _write_format_thread_loop
    self._add_packet_to_queue(*self._get_packet_cb())
  File "/usr/lib/python2.7/dist-packages/xpra/net/protocol.py", line 280, in _add_packet_to_queue
    chunks, proto_flags = self.encode(packet)
  File "/usr/lib/python2.7/dist-packages/xpra/net/protocol.py", line 413, in encode
    main_packet, proto_version = self._encoder(packet)
  File "/usr/lib/python2.7/dist-packages/xpra/net/protocol.py", line 364, in rencode
    return  rencode_dumps(data), Protocol.FLAGS_RENCODE
  File "rencode.pyx", line 324, in xpra.net.rencode._rencode.dumps (xpra/net/rencode/rencode.c:4023)
  File "rencode.pyx", line 304, in xpra.net.rencode._rencode.encode (xpra/net/rencode/rencode.c:3832)
  File "rencode.pyx", line 244, in xpra.net.rencode._rencode.encode_list (xpra/net/rencode/rencode.c:2851)
  File "rencode.pyx", line 307, in xpra.net.rencode._rencode.encode (xpra/net/rencode/rencode.c:3857)
  File "rencode.pyx", line 256, in xpra.net.rencode._rencode.encode_dict (xpra/net/rencode/rencode.c:3126)
  File "rencode.pyx", line 310, in xpra.net.rencode._rencode.encode (xpra/net/rencode/rencode.c:3883)
Exception: type <class 'xpra.client.gtk2.client.gtk.gdk.ScreenX11'> not handled
2013-10-15 13:51:08,506 GTKStatusIconTray.get_geometry() <gtk.StatusIcon object at 0x3a8b4b0 (GtkStatusIcon at 0x3abf740)>.get_geometry()=(<gtk.gdk.ScreenX11 object at 0x3a90d20 (GdkScreenX11 at 0x22db0f0)>, gtk.gdk.Rectangle(0, 0, 200, 200), <enum GTK_ORIENTATION_HORIZONTAL of type GtkOrientation>)
2013-10-15 13:51:08,526 GTKStatusIconTray.get_geometry() <gtk.StatusIcon object at 0x3a8bfa0 (GtkStatusIcon at 0x3abf8a0)>.get_geometry()=(<gtk.gdk.ScreenX11 object at 0x3a90d20 (GdkScreenX11 at 0x22db0f0)>, gtk.gdk.Rectangle(0, 0, 200, 200), <enum GTK_ORIENTATION_HORIZONTAL of type GtkOrientation>)
2013-10-15 13:51:08,528 GTKStatusIconTray.get_geometry() <gtk.StatusIcon object at 0x3a90320 (GtkStatusIcon at 0x3abfae0)>.get_geometry()=(<gtk.gdk.ScreenX11 object at 0x3a90d20 (GdkScreenX11 at 0x22db0f0)>, gtk.gdk.Rectangle(0, 0, 200, 200), <enum GTK_ORIENTATION_HORIZONTAL of type GtkOrientation>)
2013-10-15 13:51:08,529 ClientTray(13).after_draw_update_tray(True)
2013-10-15 13:51:08,529 TrayBacking does not have any pixels / format!
2013-10-15 13:51:08,530 will call connection lost: error in network packet write/format: type <class 'xpra.client.gtk2.client.gtk.gdk.ScreenX11'> not handled
2013-10-15 13:51:08,530 ClientTray(3522).after_draw_update_tray(True)
2013-10-15 13:51:08,536 TrayBacking does not have any pixels / format!
2013-10-15 13:51:08,537 ClientTray(8434).after_draw_update_tray(True)
2013-10-15 13:51:08,537 TrayBacking does not have any pixels / format!
2013-10-15 13:51:08,537 ClientTray(9082).after_draw_update_tray(True)
2013-10-15 13:51:08,537 TrayBacking does not have any pixels / format!
2013-10-15 13:51:08,537 _focus_change(('initial',)) wid=11, has-toplevel-focus=False, _been_mapped=True
2013-10-15 13:51:08,537 update_focus(11, False) _focused=9111
2013-10-15 13:51:08,537 send_focus(11)
2013-10-15 13:51:08,538 send_focus(0)
2013-10-15 13:51:08,540 _process_window_resized resizing window <ClientWindow object at 0x3a88730 (xpra+client+gtk2+client_window+ClientWindow at 0x3ad0290)> (id=11) to (1585, 1109)
2013-10-15 13:51:08,541 _focus_change(('initial',)) wid=1113, has-toplevel-focus=False, _been_mapped=True
2013-10-15 13:51:08,541 update_focus(1113, False) _focused=None
2013-10-15 13:51:08,550 send_focus(1113)
2013-10-15 13:51:08,563 send_focus(0)
2013-10-15 13:51:08,591 _process_window_resized resizing window <ClientWindow object at 0x3a8b0f0 (xpra+client+gtk2+client_window+ClientWindow at 0x3ad04b0)> (id=1113) to (1280, 737)
2013-10-15 13:51:08,592 setting new cursor: left_ptr=<enum GDK_LEFT_PTR of type GdkCursorType>
2013-10-15 13:51:08,618 _focus_change(('initial',)) wid=3832, has-toplevel-focus=False, _been_mapped=True
2013-10-15 13:51:08,619 update_focus(3832, False) _focused=None
2013-10-15 13:51:08,619 send_focus(3832)
2013-10-15 13:51:08,635 send_focus(0)
2013-10-15 13:51:08,654 _focus_change(('initial',)) wid=7469, has-toplevel-focus=False, _been_mapped=True
2013-10-15 13:51:08,654 update_focus(7469, False) _focused=None
2013-10-15 13:51:08,655 send_focus(7469)
2013-10-15 13:51:08,657 send_focus(0)
2013-10-15 13:51:08,658 _process_window_resized resizing window <ClientWindow object at 0x3a8b7d0 (xpra+client+gtk2+client_window+ClientWindow at 0x3ad05c0)> (id=3832) to (1343, 945)
2013-10-15 13:51:08,658 _focus_change(('initial',)) wid=9111, has-toplevel-focus=True, _been_mapped=True
2013-10-15 13:51:08,659 update_focus(9111, True) _focused=None
2013-10-15 13:51:08,659 send_focus(9111)
2013-10-15 13:51:08,663 tray_resized((<gtk.StatusIcon object at 0x3a889b0 (GtkStatusIcon at 0x3afb1c0)>, 48))
2013-10-15 13:51:08,664 GTKStatusIconTray.get_geometry() <gtk.StatusIcon object at 0x3a889b0 (GtkStatusIcon at 0x3afb1c0)>.get_geometry()=(<gtk.gdk.ScreenX11 object at 0x3a90d20 (GdkScreenX11 at 0x22db0f0)>, gtk.gdk.Rectangle(0, 0, 48, 48), <enum GTK_ORIENTATION_HORIZONTAL of type GtkOrientation>)
2013-10-15 13:51:08,665 tray_resized((<gtk.StatusIcon object at 0x3a8b4b0 (GtkStatusIcon at 0x3abf740)>, 48))
2013-10-15 13:51:08,666 GTKStatusIconTray.get_geometry() <gtk.StatusIcon object at 0x3a8b4b0 (GtkStatusIcon at 0x3abf740)>.get_geometry()=(<gtk.gdk.ScreenX11 object at 0x3a90d20 (GdkScreenX11 at 0x22db0f0)>, gtk.gdk.Rectangle(0, 0, 48, 48), <enum GTK_ORIENTATION_HORIZONTAL of type GtkOrientation>)
2013-10-15 13:51:08,675 tray_resized((<gtk.StatusIcon object at 0x3a8bfa0 (GtkStatusIcon at 0x3abf8a0)>, 48))
2013-10-15 13:51:08,677 GTKStatusIconTray.get_geometry() <gtk.StatusIcon object at 0x3a8bfa0 (GtkStatusIcon at 0x3abf8a0)>.get_geometry()=(<gtk.gdk.ScreenX11 object at 0x3a90d20 (GdkScreenX11 at 0x22db0f0)>, gtk.gdk.Rectangle(0, 0, 48, 48), <enum GTK_ORIENTATION_HORIZONTAL of type GtkOrientation>)
2013-10-15 13:51:08,705 tray_resized((<gtk.StatusIcon object at 0x3a90320 (GtkStatusIcon at 0x3abfae0)>, 48))
2013-10-15 13:51:08,707 GTKStatusIconTray.get_geometry() <gtk.StatusIcon object at 0x3a90320 (GtkStatusIcon at 0x3abfae0)>.get_geometry()=(<gtk.gdk.ScreenX11 object at 0x3a90d20 (GdkScreenX11 at 0x22db0f0)>, gtk.gdk.Rectangle(0, 0, 48, 48), <enum GTK_ORIENTATION_HORIZONTAL of type GtkOrientation>)
2013-10-15 13:51:08,734 _process_window_resized resizing window <ClientWindow object at 0x3a8bbe0 (xpra+client+gtk2+client_window+ClientWindow at 0x3ad06d0)> (id=7469) to (1317, 954)
2013-10-15 13:51:08,735 _process_window_resized resizing window <ClientWindow object at 0x3a90640 (xpra+client+gtk2+client_window+ClientWindow at 0x3ad07e0)> (id=9111) to (1272, 941)
2013-10-15 13:51:08,735 connection lost: error in network packet write/format: type <class 'xpra.client.gtk2.client.gtk.gdk.ScreenX11'> not handled
2013-10-15 13:51:08,735 connection closed after 44 packets received (1.2M bytes) and 37 packets sent (29K bytes)
2013-10-15 13:51:08,735 read thread: empty marker, exiting
2013-10-15 13:51:08,736 write thread: empty marker, exiting
2013-10-15 13:51:08,741 io_thread_loop(write, <bound method Protocol._write of <xpra.net.protocol.Protocol object at 0x2485790>>) loop ended, closed=True
2013-10-15 13:51:08,792 setting new cursor: left_ptr=<enum GDK_LEFT_PTR of type GdkCursorType>
2013-10-15 13:51:08,793 io_thread_loop(read, <bound method Protocol._read of <xpra.net.protocol.Protocol object at 0x2485790>>) loop ended, closed=True
2013-10-15 13:51:08,841 Connection lost
2013-10-15 13:51:08,841 GTKXpraClient.quit(1) current exit_code=None
2013-10-15 13:51:08,841 UIXpraClient.cleanup()
2013-10-15 13:51:08,842 XpraClientBase.cleanup() protocol=Protocol(None)
2013-10-15 13:51:08,842 UIXpraClient.cleanup() calling <class 'xpra.client.gtk_base.gtk_keyboard_helper.GTKKeyboardHelper'>.cleanup() : <bound method GTKKeyboardHelper.cleanup of <xpra.client.gtk_base.gtk_keyboard_helper.GTKKeyboardHelper object at 0x37d5990>>
2013-10-15 13:51:08,843 UIXpraClient.cleanup() calling <class 'xpra.clipboard.gdk_clipboard.GDKClipboardProtocolHelper'>.cleanup() : <bound method GDKClipboardProtocolHelper.cleanup of <xpra.clipboard.gdk_clipboard.GDKClipboardProtocolHelper object at 0x3a76790>>
2013-10-15 13:51:08,843 UIXpraClient.cleanup() calling <class 'xpra.client.gtk_base.statusicon_tray.GTKStatusIconTray'>.cleanup() : <bound method GTKStatusIconTray.cleanup of <xpra.client.gtk_base.statusicon_tray.GTKStatusIconTray object at 0x3992150>>
2013-10-15 13:51:08,844 UIXpraClient.cleanup() calling <class 'xpra.client.notifications.dbus_notifier.DBUS_Notifier'>.cleanup() : <bound method DBUS_Notifier.cleanup of <xpra.client.notifications.dbus_notifier.DBUS_Notifier object at 0x39c0110>>
2013-10-15 13:51:08,848 UIXpraClient.cleanup() calling <class 'xpra.client.gtk2.tray_menu.GTK2TrayMenu'>.cleanup() : <bound method GTK2TrayMenu.cleanup of <xpra.client.gtk2.tray_menu.GTK2TrayMenu object at 0x37e5e50>>
2013-10-15 13:51:08,848 cleanup() session_info=None
2013-10-15 13:51:08,949 XpraClient.clean_mmap() mmap_filename=None
2013-10-15 13:51:08,949 destroy_window(3522, ClientTray(3522))
2013-10-15 13:51:08,950 destroy_window(6, <ClientWindow object at 0x3a88140 (xpra+client+gtk2+client_window+ClientWindow at 0x3ad0180)>)
2013-10-15 13:51:08,950 PixmapBacking(None).close() video_decoder=None
2013-10-15 13:51:08,950 _unfocus() wid=6
2013-10-15 13:51:08,950 destroy_window(11, <ClientWindow object at 0x3a88730 (xpra+client+gtk2+client_window+ClientWindow at 0x3ad0290)>)
2013-10-15 13:51:08,951 PixmapBacking(None).close() video_decoder=None
2013-10-15 13:51:08,951 _unfocus() wid=11
2013-10-15 13:51:08,951 destroy_window(940, <ClientWindow object at 0x3a88d20 (xpra+client+gtk2+client_window+ClientWindow at 0x3ad03a0)>)
2013-10-15 13:51:08,951 PixmapBacking(None).close() video_decoder=None
2013-10-15 13:51:08,951 _unfocus() wid=940
2013-10-15 13:51:08,951 destroy_window(13, ClientTray(13))
2013-10-15 13:51:08,952 destroy_window(7469, <ClientWindow object at 0x3a8bbe0 (xpra+client+gtk2+client_window+ClientWindow at 0x3ad06d0)>)
2013-10-15 13:51:08,952 PixmapBacking(None).close() video_decoder=None
2013-10-15 13:51:08,952 _unfocus() wid=7469
2013-10-15 13:51:08,953 destroy_window(8434, ClientTray(8434))
2013-10-15 13:51:08,953 destroy_window(9111, <ClientWindow object at 0x3a90640 (xpra+client+gtk2+client_window+ClientWindow at 0x3ad07e0)>)
2013-10-15 13:51:08,955 PixmapBacking(None).close() video_decoder=None
2013-10-15 13:51:08,955 _unfocus() wid=9111
2013-10-15 13:51:08,955 update_focus(9111, False) _focused=9111
2013-10-15 13:51:08,956 send_focus(0)
2013-10-15 13:51:08,959 destroy_window(3832, <ClientWindow object at 0x3a8b7d0 (xpra+client+gtk2+client_window+ClientWindow at 0x3ad05c0)>)
2013-10-15 13:51:08,959 PixmapBacking(None).close() video_decoder=None
2013-10-15 13:51:08,959 _unfocus() wid=3832
2013-10-15 13:51:08,960 destroy_window(1113, <ClientWindow object at 0x3a8b0f0 (xpra+client+gtk2+client_window+ClientWindow at 0x3ad04b0)>)
2013-10-15 13:51:08,960 PixmapBacking(None).close() video_decoder=None
2013-10-15 13:51:08,960 _unfocus() wid=1113
2013-10-15 13:51:08,960 destroy_window(9082, ClientTray(9082))
2013-10-15 13:51:08,961 UIXpraClient.cleanup() done
2013-10-15 13:51:08,961 GTKXpraClient.quit(1) main loop at level 1, calling gtk quit via timeout
2013-10-15 13:51:09,463 GTKXpraClient.run_main_loop() main loop ended, returning exit_code=1
2013-10-15 13:51:09,463 UIXpraClient.cleanup()
2013-10-15 13:51:09,463 XpraClientBase.cleanup() protocol=None
2013-10-15 13:51:09,463 UIXpraClient.cleanup() calling <class 'xpra.client.gtk_base.gtk_keyboard_helper.GTKKeyboardHelper'>.cleanup() : <bound method GTKKeyboardHelper.cleanup of <xpra.client.gtk_base.gtk_keyboard_helper.GTKKeyboardHelper object at 0x37d5990>>
2013-10-15 13:51:09,463 UIXpraClient.cleanup() calling <class 'xpra.clipboard.gdk_clipboard.GDKClipboardProtocolHelper'>.cleanup() : <bound method GDKClipboardProtocolHelper.cleanup of <xpra.clipboard.gdk_clipboard.GDKClipboardProtocolHelper object at 0x3a76790>>
2013-10-15 13:51:09,463 UIXpraClient.cleanup() calling <class 'xpra.client.gtk_base.statusicon_tray.GTKStatusIconTray'>.cleanup() : <bound method GTKStatusIconTray.cleanup of <xpra.client.gtk_base.statusicon_tray.GTKStatusIconTray object at 0x3992150>>
2013-10-15 13:51:09,464 UIXpraClient.cleanup() calling <class 'xpra.client.notifications.dbus_notifier.DBUS_Notifier'>.cleanup() : <bound method DBUS_Notifier.cleanup of <xpra.client.notifications.dbus_notifier.DBUS_Notifier object at 0x39c0110>>
2013-10-15 13:51:09,464 UIXpraClient.cleanup() calling <class 'xpra.client.gtk2.tray_menu.GTK2TrayMenu'>.cleanup() : <bound method GTK2TrayMenu.cleanup of <xpra.client.gtk2.tray_menu.GTK2TrayMenu object at 0x37e5e50>>
2013-10-15 13:51:09,464 cleanup() session_info=None
2013-10-15 13:51:09,564 XpraClient.clean_mmap() mmap_filename=None
2013-10-15 13:51:09,564 UIXpraClient.cleanup() done

Please advise if you have any patch worth trying and I will test. Thanks.


Tue, 15 Oct 2013 03:15:09 GMT - onlyjob:

attaching succeeded with --no-system-tray argument...


Tue, 15 Oct 2013 03:16:14 GMT - Antoine Martin:

Got it (same time as comment:4):

GTKStatusIconTray.get_geometry() <gtk.StatusIcon object at 0x3a889b0 (GtkStatusIcon at 0x3afb1c0)>.get_geometry()=\
    (<gtk.gdk.ScreenX11 object at 0x3a90d20 (GdkScreenX11 at 0x22db0f0)>,
     gtk.gdk.Rectangle(0, 0, 200, 200),
     <enum GTK_ORIENTATION_HORIZONTAL of type GtkOrientation>)

You have a tray icon (something I did not think of testing..). Somehow we end up using the raw status icon geometry structure, rather than the "rectangle" containing the dimensions.

Thing is, I have no idea how that's possible. Yet.


Tue, 15 Oct 2013 03:22:55 GMT - Antoine Martin:

Doh:

screen = self.tray_widget.get_screen()
if screen>=0:
    client_properties["screen"] = screen

screen is a python object, and somehow evaluates to >=0... so we put this value in the dictionary.

This is fixed for trunk in r4497. I will backport to 0.10.x and also replace the exception with a big fat warning instead so that if there are any other mistakes like this one, they won't cause disconnections. But trunk will keep the exception because we really need to find those rather than hoping the packets make sense.


Tue, 15 Oct 2013 03:35:53 GMT - Antoine Martin: status changed; resolution set

Applied to 0.10.x in r4498, 0.10.6 tagged with it in r4501


Wed, 16 Oct 2013 05:17:51 GMT - Antoine Martin:

Since there was some confusion between packet encoding and picture encoding, I've added a wiki page to try to clarify things: wiki/PacketEncoding


Sat, 23 Jan 2021 04:55:36 GMT - migration script:

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