Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Xpra attach crashes gnome-shell on Xwayland/gdm3 #3630

Closed
ibuclaw opened this issue Sep 29, 2022 · 19 comments
Closed

Xpra attach crashes gnome-shell on Xwayland/gdm3 #3630

ibuclaw opened this issue Sep 29, 2022 · 19 comments
Labels
bug Something isn't working client linux

Comments

@ibuclaw
Copy link

ibuclaw commented Sep 29, 2022

Describe the bug
Over time during a mid-running desktop session (i.e: a week, including suspend/resume), after a few dozen xpra attach/disconnects, the start-up time for xpra attach starts to become sluggish, and can freeze the entire display manager for 60+ seconds before the remote window shows - unstucking the gnome-shell session. (Under "normal" operation, the entire display manager freezes for 1-3 seconds, which may itself be a bug, as Xpra must be doing something very wrong if any sort of freezing occurs at all just to load the initial window)

At some point though, the gnome-shell session never recovers, with Xpra - and all other running X applications - frozen.

From journald

ubuntu-appindicators@ubuntu.com[13197]: unable to update icon for Xpra
gnome-shell[13197]: Attempting to call back into JSAPI during the sweeping phase of GC. This is most likely caused by not destroying a Clutter actor or Gtk+ widget with ::destroy signals connected, but can also be caused by using the destroy(), dispose(), or remove() vfuncs. Because it would crash the application, it has been blocked and the JS callback not invoked.
gnome-shell[13197]: == Stack trace for context 0x55e424bd64b0 ==
gnome-shell[13197]: #0   7ffd79e83290 b   /usr/share/gnome-shell/extensions/ubuntu-appindicators@ubuntu.com/dbusMenu.js:683 (1e76480ab470 @ 282)
gnome-shell[13197]: #1   7ffd79e83380 b   /usr/share/gnome-shell/extensions/ubuntu-appindicators@ubuntu.com/dbusMenu.js:587 (1e76480ab150 @ 391)
gnome-shell[13197]: #2   7ffd79e833d0 I   self-hosted:1178 (23977bb0a10 @ 492)
gnome-shell[13197]: #3   7ffd79e834e0 b   resource:///org/gnome/gjs/modules/core/_signals.js:114 (23977bd3920 @ 433)
gnome-shell[13197]: #4   7ffd79e835c0 b   /usr/share/gnome-shell/extensions/ubuntu-appindicators@ubuntu.com/dbusMenu.js:125 (1e76480a7330 @ 68)
gnome-shell[13197]: #5   7ffd79e836c0 I   /usr/share/gnome-shell/extensions/ubuntu-appindicators@ubuntu.com/dbusMenu.js:355 (1e76480a7a60 @ 549)
gnome-shell[13197]: #6   7ffd79e83780 b   /usr/share/gnome-shell/extensions/ubuntu-appindicators@ubuntu.com/dbusMenu.js:348 (1e76480a7b50 @ 15)
gnome-shell[13197]: #7   7ffd79e83890 b   self-hosted:202 (23977ba8380 @ 272)
gnome-shell[13197]: #8   7ffd79e83990 b   /usr/share/gnome-shell/extensions/ubuntu-appindicators@ubuntu.com/dbusMenu.js:348 (1e76480a7a60 @ 430)
gnome-shell[13197]: #9   55e444ab9678 i   /usr/share/gnome-shell/extensions/ubuntu-appindicators@ubuntu.com/dbusMenu.js:332 (1e76480a7a10 @ 408)
gnome-shell[13197]: #10   7ffd79e84540 I   self-hosted:1178 (23977bb0a10 @ 492)
gnome-shell[13197]: #11   55e444ab95c8 i   resource:///org/gnome/gjs/modules/core/overrides/Gio.js:115 (23977bcd330 @ 298)
...
gnome-shell[13197]: Attempting to call back into JSAPI during the sweeping phase of GC. This is most likely caused by not destroying a Clutter actor or Gtk+ widget with ::destroy signals connected, but can also be caused by using the destroy(), dispose(), or remove() vfuncs. Because it would crash the application, it has been blocked and the JS callback not invoked.
Sep 29 09:22:54 insertnamehere gnome-shell[13197]: The offending signal was destroy on Gjs_ui_popupMenu_PopupSubMenuMenuItem 0x55e447ad7960.
... repeated 170 times ...
gnome-shell[13197]: Attempting to run a JS callback during garbage collection. This is most likely caused by destroying a Clutter actor or GTK widget with ::destroy signal connected, or using the destroy(), dispose(), or remove() vfuncs. Because it would crash the application, it has been blocked.
gnome-shell[13197]: The offending callback was SourceFunc().
... repeated 149826 times ...
gnome-shell[13197]: == Stack trace for context 0x55e424bd64b0 ==
... repeated 337191 times ...

Plus some other variations of The offending signal was and The offending callback was message.

On the console side from the xpra invocation

2022-09-29 09:22:47,102 Xpra GTK3 Wayland client version 4.3.4-r0 64-bit
2022-09-29 09:22:47,235  running on Linux Ubuntu 22.04 jammy
2022-09-29 09:22:47,235  window manager is 'ubuntu:GNOME on wayland'
2022-09-29 09:22:47,667 GStreamer version 1.20.3 for Python 3.10.6 64-bit
2022-09-29 09:22:47,899 created unix domain socket '/run/user/1000/xpra/clients/insertnamehere-104400'
2022-09-29 09:22:48,250 keyboard bindings are not available
2022-09-29 09:22:48,250  expect keyboard mapping problems
2022-09-29 09:22:48,251  (incomplete wayland support)
2022-09-29 09:22:48,525 Connected (version 2.0, client OpenSSH_8.9p1)
2022-09-29 09:22:48,908 Authentication (publickey) successful!
2022-09-29 09:22:49,164  keyboard settings: layout=gb
2022-09-29 09:22:49,165  desktop size is 1920x1080:
2022-09-29 09:22:49,166   wayland-0 (340x190 mm - DPI: 143x144)
2022-09-29 09:22:49,166     BOE 0x0900
2022-09-29 09:22:49,455 enabled remote logging
2022-09-29 09:22:49,456 Xpra X11 seamless server version 4.3.4-r0 64-bit
2022-09-29 09:22:49,457  running on Linux Ubuntu 22.04 jammy
2022-09-29 09:22:49,466 Attached to xpra server at ssh://ibuclaw@172.3.4.5/100
2022-09-29 09:22:49,467  (press Control-C to detach)

2022-09-29 09:22:50,170 running, 1 window
2022-09-29 09:22:50,917 audio playback found 2 audio output devices:
2022-09-29 09:22:50,917 audio playback  * Family 17h (Models 10h-1fh) HD Audio Controller
2022-09-29 09:22:50,917 audio playback    alsa_output.pci-0000_04_00.6.analog-stereo
2022-09-29 09:22:50,917 audio playback  * Family 17h (Models 10h-1fh) HD Audio Controller
2022-09-29 09:22:50,917 audio playback    alsa_card.pci-0000_04_00.6
2022-09-29 09:22:50,917 audio playback  to select a specific one,
2022-09-29 09:22:50,917 audio playback  use the environment variable 'XPRA_PULSE_SINK_DEVICE_NAME'
2022-09-29 09:22:50,917 audio playback using default pulseaudio device
2022-09-29 09:22:51,501 audio playback using 'flac' audio codec

Where it promptly hangs - only killing gnome-shell, and restarting gdm3 can bring it back out of the sorry mess it's in.

To Reproduce
Steps to reproduce the behavior:

  1. xpra start :100 --start="flatpak run org.mozilla.firefox"
  2. xpra attach ssh://ibuclaw@172.3.4.5/100
  3. Disconnect from server
  4. Repeat steps 2 and 3 until Xwayland/GNOME freezes over.

System Information (please complete the following information):

  • Server OS: Ubuntu 22.04.1 LTS
  • Client OS: Ubuntu 22.04.1 LTS
  • Xpra Server Version xpra v4.3.4-r0
  • Xpra Client Version xpra v4.3.4-r0

Additional context
Attaching journald.log which captures moment from xpra invocation, to restarting gdm3.

@ibuclaw ibuclaw added the bug Something isn't working label Sep 29, 2022
@totaam
Copy link
Collaborator

totaam commented Sep 29, 2022

and can freeze the entire display manager for 60+ seconds before the remote window shows

That sounds like a bug in your window manager.
Client applications should not be able to interfere with window managers, or the kernel.
What you describe is a DoS condition, which is a security issue for your window manager.

/usr/share/gnome-shell/extensions/ubuntu-appindicators
(..)
Attempting to run a JS callback during garbage collection

Xpra does not use any JS code directly, or Clutter. This is the appindicator system tray replacement:
https://github.com/Xpra-org/xpra/blob/master/xpra/platform/xposix/appindicator_tray.py
Which you should be able to run from the command line as a test.
You can disable the feature in xpra using --no-tray --no-system-tray.

Where it promptly hangs - only killing gnome-shell, and restarting gdm3 can bring it back out of the sorry mess it's in.

One should never need to restart the window manager, the display manager even less.
So I am likely to close this ticket as invalid.

@ibuclaw
Copy link
Author

ibuclaw commented Sep 29, 2022

--no-tray

Starting xpra with this option, can confirm there's no freezing on the window manager.

That sounds like a bug in your window manager.

Or something is really wrong in the way xpra initializes itself, and perhaps there is a better way it can integrate with the tray that doesn't block other asynchronous tasks. When was the last time the Gdk code was updated? GTK3+ might have deprecated something, or there's a better way to interact with the tray.

@ibuclaw
Copy link
Author

ibuclaw commented Sep 29, 2022

Given the information you've given, running with --debug tray,system-tray

ibuclaw@insertnamehere:~ $ xpra attach ssh://ibuclaw@172.3.4.5/100 --debug tray,system-tray
2022-09-29 12:41:14,444 debug enabled for xpra.platform.xposix.gui / ('posix', 'tray')
2022-09-29 12:41:14,501 debug enabled for xpra.client.mixins.window_manager / ('client', 'tray')
2022-09-29 12:41:14,507 debug enabled for xpra.client.mixins.tray / ('tray',)
2022-09-29 12:41:14,580 Xpra GTK3 Wayland client version 4.3.4-r0 64-bit
2022-09-29 12:41:14,719  running on Linux Ubuntu 22.04 jammy
2022-09-29 12:41:14,719  window manager is 'ubuntu:GNOME on wayland'
2022-09-29 12:41:14,723 window icon overlay: /usr/share/xpra/icons/xpra.png
2022-09-29 12:41:14,733 overlay_image=<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=48x48 at 0x7FA59289A6E0>
2022-09-29 12:41:15,103 GStreamer version 1.20.3 for Python 3.10.6 64-bit
2022-09-29 12:41:15,244 created unix domain socket '/run/user/1000/xpra/clients/insertnamehere-220741'
2022-09-29 12:41:15,313 make_tray_menu_helper() tray menu helper classes: (None, <class 'xpra.client.gtk3.tray_menu.GTK3TrayMenu'>)
2022-09-29 12:41:15,505 keyboard bindings are not available
2022-09-29 12:41:15,506  expect keyboard mapping problems
2022-09-29 12:41:15,506  (incomplete wayland support)
2022-09-29 12:41:15,514 setup_xpra_tray()
2022-09-29 12:41:15,620 get_tray_title()='Xpra' (items=('Xpra',))
2022-09-29 12:41:15,621 debug enabled for xpra.client.tray_base / ('tray',)
2022-09-29 12:41:15,621 debug enabled for xpra.platform.xposix.appindicator_tray / ('tray', 'posix')
2022-09-29 12:41:15,623 get_native_tray_classes()=[<class 'xpra.platform.xposix.appindicator_tray.AppindicatorTray'>] (USE_NATIVE_TRAY=True)
2022-09-29 12:41:15,623 tray GUESS_GEOMETRY=False
2022-09-29 12:41:15,624 make_tray(0, <Gtk.Menu object at 0x7fa585a13380 (GtkMenu at 0x559c9081e2b0)>, 'Xpra', 'xpra', <function TrayClient.create_xpra_tray.<locals>.xpra_tray_geometry at 0x7fa5859ed990>, <function TrayClient.create_xpra_tray.<locals>.xpra_tray_click at 0x7fa5932aa050>, <function TrayClient.create_xpra_tray.<locals>.xpra_tray_mouseover at 0x7fa5859ed870>, <function TrayClient.create_xpra_tray.<locals>.xpra_tray_exit at 0x7fa5859ed900>) tray classes=[<class 'xpra.platform.xposix.appindicator_tray.AppindicatorTray'>, <class 'xpra.client.gtk_base.statusicon_tray.GTKStatusIconTray'>]
2022-09-29 12:41:15,626 set_icon_from_file(/usr/share/xpra/icons/xpra.png) tray_widget=<AppIndicator3.Indicator object at 0x7fa585a68280 (AppIndicator at 0x559c8fec9270)>
2022-09-29 12:41:15,626 do_set_icon_from_file(/usr/share/xpra/icons/xpra.png) setting icon theme path=/usr/share/xpra/icons
2022-09-29 12:41:15,626 do_set_icon_from_file(/usr/share/xpra/icons/xpra.png) setting icon=xpra
2022-09-29 12:41:15,698 setup_xpra_tray(xpra)=Tray(0:Xpra) (<class 'xpra.platform.xposix.appindicator_tray.AppindicatorTray'>)

Freeze happens here, then after a few seconds.

2022-09-29 12:41:15,765 Connected (version 2.0, client OpenSSH_8.9p1)
2022-09-29 12:41:16,073 Authentication (publickey) successful!
2022-09-29 12:41:16,318  keyboard settings: layout=gb
2022-09-29 12:41:16,319  desktop size is 1920x1080:
2022-09-29 12:41:16,320   wayland-0 (340x190 mm - DPI: 143x144)
2022-09-29 12:41:16,320     BOE 0x0900
2022-09-29 12:41:16,527 enabled remote logging
2022-09-29 12:41:16,527 Xpra X11 seamless server version 4.3.4-r0 64-bit
2022-09-29 12:41:16,527  running on Linux Ubuntu 22.04 jammy
2022-09-29 12:41:16,531 Attached to xpra server at ssh://ibuclaw@172.3.4.5/100
2022-09-29 12:41:16,531  (press Control-C to detach)

2022-09-29 12:41:16,535 get_tray_title()='flatpak\n172.3.4.5:22' (items=('flatpak', '172.3.4.5:22'))
2022-09-29 12:41:16,549 get_tray_title()='flatpak\n172.3.4.5:22' (items=('flatpak', '172.3.4.5:22'))
2022-09-29 12:41:16,700 set_icon(None) using filename=/usr/share/xpra/icons/xpra.png
2022-09-29 12:41:16,700 set_icon_from_file(/usr/share/xpra/icons/xpra.png) tray_widget=<AppIndicator3.Indicator object at 0x7fa585a68280 (AppIndicator at 0x559c8fec9270)>
2022-09-29 12:41:16,700 do_set_icon_from_file(/usr/share/xpra/icons/xpra.png) setting icon theme path=/usr/share/xpra/icons
2022-09-29 12:41:16,700 do_set_icon_from_file(/usr/share/xpra/icons/xpra.png) setting icon=xpra
2022-09-29 12:41:17,039 running, 1 window
2022-09-29 12:41:17,044 set_tray_icon() DYNAMIC_TRAY_ICON=False, tray=Tray(0:Xpra)
2022-09-29 12:41:21,526 Warning: the audio playback process has failed to start
2022-09-29 12:41:23,029 Warning: the flac sound sink has stopped

Noting that the timestamps suggest that xpra itself has not stopped continuing its progress, except for the last two lines where it gave up trying to set-up audio (not used on my end, so ignored).

@ibuclaw
Copy link
Author

ibuclaw commented Sep 29, 2022

Also noting that rather that using GTK3's libappindicator, ubuntu "helpfully" provide their own fork, which is installed and used instead of the default appindicator library.

@ibuclaw
Copy link
Author

ibuclaw commented Sep 29, 2022

Xpra does not use any JS code directly, or Clutter. This is the appindicator system tray replacement: https://github.com/Xpra-org/xpra/blob/master/xpra/platform/xposix/appindicator_tray.py Which you should be able to run from the command line as a test. You can disable the feature in xpra using --no-tray --no-system-tray.

I'm not seeing any problems running appindicator_tray.py directly.

@totaam
Copy link
Collaborator

totaam commented Sep 29, 2022

That sounds like a bug in your window manager.

Or something is really wrong in the way xpra initializes itself

Even if that were the case, no window manager should ever hang by using one of its public APIs. That's a DoS and they need to fix it.

and perhaps there is a better way it can integrate with the tray that doesn't block other asynchronous tasks

That's the point. This API should not block as it must be used from the UI thread.

When was the last time the Gdk code was updated? GTK3+ might have deprecated something, or there's a better way to interact with the tray.

They've deprecated and changed lots of things, multiple times, often without valid replacements.
Unfortunately, system-trays just don't work very well on almost all Linux desktop environments, you can find dozens of tickets here on the subject.
appindicator at least sort of works, most of the time, though gnome-shell extensions are usually required to make it actually usable / visible anywhere. (that's the Javascript glue in your warning messages).

The freeze happens near:

2022-09-29 12:41:15,765 Connected (version 2.0, client OpenSSH_8.9p1)

Other things worth trying to narrow things down:

  • do you get an ssh password or key passphrase prompt around that time?
  • does the problem still occur with tcp or ssl connections instead of ssh?
  • if not, is pinentry installed? And if it is, try --env=XPRA_SSH_PINENTRY=0 ..
  • try --ssh=ssh -d ssh
  • try --delay-tray=yes
  • try --env=XPRA_TRAY_DELAY=5000

BTW, the issue description says on Xwayland/gdm3 - what does this mean?
Is this a wayland session? If so, then Xwayland is not used by xpra. As per your log:

Xpra GTK3 Wayland client version ...

@ibuclaw
Copy link
Author

ibuclaw commented Sep 30, 2022

Other things worth trying to narrow things down:

* try `--env=XPRA_TRAY_DELAY=5000`

Of everything here, nothing makes a difference in behaviour. I did set --env=XPRA_TRAY_DELAY=60000, which resulted in a brief freeze 1 minute after Xpra started up.

As it seems that nothing else is happening at the same time, I guess I could try to localize what part of the appindicator code is disabled, see if it comes down to just one API call. Time willing of course. :-)

BTW, the issue description says on Xwayland/gdm3 - what does this mean? Is this a wayland session? If so, then Xwayland is not used by xpra. As per your log:

Xpra GTK3 Wayland client version ...

It's probably been about a decade since I read up anything about display servers, so I don't know whether Xorg vs. Xwayland is still a thing to be mindful of.

@ibuclaw
Copy link
Author

ibuclaw commented Sep 30, 2022

BTW, the issue description says on Xwayland/gdm3 - what does this mean? Is this a wayland session? If so, then Xwayland is not used by xpra. As per your log:

Xpra GTK3 Wayland client version ...

It's probably been about a decade since I read up anything about display servers, so I don't know whether Xorg vs. Xwayland is still a thing to be mindful of.

Incidentally, I do have Xorg alongside Wayland still, switched over to Xorg and there's not even a stutter when running xpra attach. So this is specific to running the client on top of Wayland.

@totaam
Copy link
Collaborator

totaam commented Sep 30, 2022

@ibuclaw Does it hang "less" if you run with --start-new-commands=no ?

@ibuclaw
Copy link
Author

ibuclaw commented Sep 30, 2022

@ibuclaw Does it hang "less" if you run with --start-new-commands=no ?

Yes, still getting a hang.

So I've had a little time to prod around gtk_tray_menu_base.py, and it looks like there is a clear correlation between the number of items appened to the menu, and how sluggish the start-up seems to be.

These submenu.append calls are the two biggest offenders.

--- a/xpra/client/gtk_base/gtk_tray_menu_base.py
+++ b/xpra/client/gtk_base/gtk_tray_menu_base.py
@@ -1163,8 +1163,10 @@ class GTKTrayMenuBase(MenuHelper):
                     variant_submenu = Gtk.Menu()
                     variant.set_submenu(variant_submenu)
                     self.layout_submenu.append(variant)
+                    log("%s - Default" % layout)
                     variant_submenu.append(kbitem("%s - Default" % layout, layout, None))
                     for v in variants:
+                        log("%s - %s" % (layout, v))
                         variant_submenu.append(kbitem("%s - %s" % (layout, v), layout, v))
                 else:
                     #no variants:
Dump generated from above patch
2022-09-30 22:28:37,904 make_layoutsmenuitem() layout=gb, layouts=('gb',), variant=, variants=('',)
2022-09-30 22:28:37,906 ara - Default
2022-09-30 22:28:37,906 ara - azerty
2022-09-30 22:28:37,906 ara - azerty_digits
2022-09-30 22:28:37,906 ara - digits
2022-09-30 22:28:37,907 ara - qwerty
2022-09-30 22:28:37,907 ara - qwerty_digits
2022-09-30 22:28:37,907 ara - buckwalter
2022-09-30 22:28:37,907 latam - Default
2022-09-30 22:28:37,907 latam - nodeadkeys
2022-09-30 22:28:37,908 latam - deadtilde
2022-09-30 22:28:37,908 latam - sundeadkeys
2022-09-30 22:28:37,908 am - Default
2022-09-30 22:28:37,908 am - phonetic
2022-09-30 22:28:37,908 am - phonetic-alt
2022-09-30 22:28:37,908 am - eastern
2022-09-30 22:28:37,909 am - western
2022-09-30 22:28:37,909 am - eastern-alt
2022-09-30 22:28:37,909 at - Default
2022-09-30 22:28:37,909 at - nodeadkeys
2022-09-30 22:28:37,909 at - sundeadkeys
2022-09-30 22:28:37,909 at - mac
2022-09-30 22:28:37,910 ara - Default
2022-09-30 22:28:37,910 ara - azerty
2022-09-30 22:28:37,910 ara - azerty_digits
2022-09-30 22:28:37,911 ara - digits
2022-09-30 22:28:37,911 ara - qwerty
2022-09-30 22:28:37,911 ara - qwerty_digits
2022-09-30 22:28:37,911 ara - buckwalter
2022-09-30 22:28:37,911 by - Default
2022-09-30 22:28:37,912 by - legacy
2022-09-30 22:28:37,912 by - latin
2022-09-30 22:28:37,912 nl - Default
2022-09-30 22:28:37,912 nl - sundeadkeys
2022-09-30 22:28:37,913 nl - mac
2022-09-30 22:28:37,913 nl - std
2022-09-30 22:28:37,913 be - Default
2022-09-30 22:28:37,913 be - oss
2022-09-30 22:28:37,914 be - oss_latin9
2022-09-30 22:28:37,914 be - oss_sundeadkeys
2022-09-30 22:28:37,914 be - iso-alternate
2022-09-30 22:28:37,914 be - nodeadkeys
2022-09-30 22:28:37,914 be - sundeadkeys
2022-09-30 22:28:37,915 be - wang
2022-09-30 22:28:37,915 latam - Default
2022-09-30 22:28:37,915 latam - nodeadkeys
2022-09-30 22:28:37,915 latam - deadtilde
2022-09-30 22:28:37,915 latam - sundeadkeys
2022-09-30 22:28:37,916 br - Default
2022-09-30 22:28:37,916 br - nodeadkeys
2022-09-30 22:28:37,916 br - dvorak
2022-09-30 22:28:37,916 br - nativo
2022-09-30 22:28:37,916 br - nativo-us
2022-09-30 22:28:37,916 br - nativo-epo
2022-09-30 22:28:37,917 in - Default
2022-09-30 22:28:37,917 in - mal
2022-09-30 22:28:37,917 in - mal_lalitha
2022-09-30 22:28:37,917 in - mal_enhanced
2022-09-30 22:28:37,918 bg - Default
2022-09-30 22:28:37,918 bg - phonetic
2022-09-30 22:28:37,918 bg - bas_phonetic
2022-09-30 22:28:37,919 ca - Default
2022-09-30 22:28:37,919 ca - fr-dvorak
2022-09-30 22:28:37,919 ca - fr-legacy
2022-09-30 22:28:37,919 ca - multix
2022-09-30 22:28:37,919 ca - multi
2022-09-30 22:28:37,920 ca - multi-2gr
2022-09-30 22:28:37,920 ca - ike
2022-09-30 22:28:37,920 latam - Default
2022-09-30 22:28:37,920 latam - nodeadkeys
2022-09-30 22:28:37,921 latam - deadtilde
2022-09-30 22:28:37,921 latam - sundeadkeys
2022-09-30 22:28:37,921 latam - Default
2022-09-30 22:28:37,921 latam - nodeadkeys
2022-09-30 22:28:37,922 latam - deadtilde
2022-09-30 22:28:37,922 latam - sundeadkeys
2022-09-30 22:28:37,922 latam - Default
2022-09-30 22:28:37,922 latam - nodeadkeys
2022-09-30 22:28:37,922 latam - deadtilde
2022-09-30 22:28:37,923 latam - sundeadkeys
2022-09-30 22:28:37,923 hr - Default
2022-09-30 22:28:37,923 hr - alternatequotes
2022-09-30 22:28:37,923 hr - unicode
2022-09-30 22:28:37,924 hr - unicodeus
2022-09-30 22:28:37,924 hr - us
2022-09-30 22:28:37,924 cz - Default
2022-09-30 22:28:37,924 cz - bksl
2022-09-30 22:28:37,924 cz - qwerty
2022-09-30 22:28:37,924 cz - qwerty_bksl
2022-09-30 22:28:37,924 cz - ucw
2022-09-30 22:28:37,925 cz - dvorak-ucw
2022-09-30 22:28:37,925 dk - Default
2022-09-30 22:28:37,925 dk - nodeadkeys
2022-09-30 22:28:37,925 dk - mac
2022-09-30 22:28:37,925 dk - mac_nodeadkeys
2022-09-30 22:28:37,926 dk - dvorak
2022-09-30 22:28:37,926 latam - Default
2022-09-30 22:28:37,926 latam - nodeadkeys
2022-09-30 22:28:37,926 latam - deadtilde
2022-09-30 22:28:37,927 latam - sundeadkeys
2022-09-30 22:28:37,927 latam - Default
2022-09-30 22:28:37,927 latam - nodeadkeys
2022-09-30 22:28:37,927 latam - deadtilde
2022-09-30 22:28:37,927 latam - sundeadkeys
2022-09-30 22:28:37,928 ara - Default
2022-09-30 22:28:37,928 ara - azerty
2022-09-30 22:28:37,928 ara - azerty_digits
2022-09-30 22:28:37,928 ara - digits
2022-09-30 22:28:37,928 ara - qwerty
2022-09-30 22:28:37,928 ara - qwerty_digits
2022-09-30 22:28:37,929 ara - buckwalter
2022-09-30 22:28:37,929 latam - Default
2022-09-30 22:28:37,929 latam - nodeadkeys
2022-09-30 22:28:37,929 latam - deadtilde
2022-09-30 22:28:37,930 latam - sundeadkeys
2022-09-30 22:28:37,930 ee - Default
2022-09-30 22:28:37,930 ee - nodeadkeys
2022-09-30 22:28:37,930 ee - dvorak
2022-09-30 22:28:37,930 ee - us
2022-09-30 22:28:37,931 fi - Default
2022-09-30 22:28:37,931 fi - classic
2022-09-30 22:28:37,932 fi - nodeadkeys
2022-09-30 22:28:37,932 fi - smi
2022-09-30 22:28:37,932 fi - mac
2022-09-30 22:28:37,932 se - Default
2022-09-30 22:28:37,933 se - nodeadkeys
2022-09-30 22:28:37,933 se - dvorak
2022-09-30 22:28:37,933 se - rus
2022-09-30 22:28:37,933 se - rus_nodeadkeys
2022-09-30 22:28:37,933 se - smi
2022-09-30 22:28:37,933 se - mac
2022-09-30 22:28:37,934 se - svdvorak
2022-09-30 22:28:37,934 se - swl
2022-09-30 22:28:37,934 fr - Default
2022-09-30 22:28:37,934 fr - nodeadkeys
2022-09-30 22:28:37,935 fr - sundeadkeys
2022-09-30 22:28:37,935 fr - oss
2022-09-30 22:28:37,935 fr - oss_latin9
2022-09-30 22:28:37,935 fr - oss_nodeadkeys
2022-09-30 22:28:37,935 fr - oss_sundeadkeys
2022-09-30 22:28:37,936 fr - latin9
2022-09-30 22:28:37,936 fr - latin9_nodeadkeys
2022-09-30 22:28:37,936 fr - latin9_sundeadkeys
2022-09-30 22:28:37,936 fr - bepo
2022-09-30 22:28:37,936 fr - bepo_latin9
2022-09-30 22:28:37,936 fr - dvorak
2022-09-30 22:28:37,936 fr - mac
2022-09-30 22:28:37,937 fr - bre
2022-09-30 22:28:37,937 fr - oci
2022-09-30 22:28:37,937 fr - geo
2022-09-30 22:28:37,937 ge - Default
2022-09-30 22:28:37,937 ge - ergonomic
2022-09-30 22:28:37,937 ge - mess
2022-09-30 22:28:37,937 ge - ru
2022-09-30 22:28:37,938 ge - os
2022-09-30 22:28:37,938 de - Default
2022-09-30 22:28:37,938 de - nodeadkeys
2022-09-30 22:28:37,938 de - sundeadkeys
2022-09-30 22:28:37,938 de - mac
2022-09-30 22:28:37,939 gr - Default
2022-09-30 22:28:37,939 gr - simple
2022-09-30 22:28:37,939 gr - extended
2022-09-30 22:28:37,939 gr - nodeadkeys
2022-09-30 22:28:37,940 gr - polytonic
2022-09-30 22:28:37,940 latam - Default
2022-09-30 22:28:37,940 latam - nodeadkeys
2022-09-30 22:28:37,940 latam - deadtilde
2022-09-30 22:28:37,940 latam - sundeadkeys
2022-09-30 22:28:37,941 latam - Default
2022-09-30 22:28:37,941 latam - nodeadkeys
2022-09-30 22:28:37,941 latam - deadtilde
2022-09-30 22:28:37,941 latam - sundeadkeys
2022-09-30 22:28:37,942 hu - Default
2022-09-30 22:28:37,942 hu - standard
2022-09-30 22:28:37,942 hu - nodeadkeys
2022-09-30 22:28:37,942 hu - qwerty
2022-09-30 22:28:37,943 hu - 101_qwertz_comma_dead
2022-09-30 22:28:37,943 hu - 101_qwertz_comma_nodead
2022-09-30 22:28:37,943 hu - 101_qwertz_dot_dead
2022-09-30 22:28:37,943 hu - 101_qwertz_dot_nodead
2022-09-30 22:28:37,943 hu - 101_qwerty_comma_dead
2022-09-30 22:28:37,943 hu - 101_qwerty_comma_nodead
2022-09-30 22:28:37,944 hu - 101_qwerty_dot_dead
2022-09-30 22:28:37,944 hu - 101_qwerty_dot_nodead
2022-09-30 22:28:37,944 hu - 102_qwertz_comma_dead
2022-09-30 22:28:37,944 hu - 102_qwertz_comma_nodead
2022-09-30 22:28:37,944 hu - 102_qwertz_dot_dead
2022-09-30 22:28:37,944 hu - 102_qwertz_dot_nodead
2022-09-30 22:28:37,945 hu - 102_qwerty_comma_dead
2022-09-30 22:28:37,945 hu - 102_qwerty_comma_nodead
2022-09-30 22:28:37,945 hu - 102_qwerty_dot_dead
2022-09-30 22:28:37,945 hu - 102_qwerty_dot_nodead
2022-09-30 22:28:37,946 is - Default
2022-09-30 22:28:37,946 is - sundeadkeys
2022-09-30 22:28:37,946 is - nodeadkeys
2022-09-30 22:28:37,947 is - mac
2022-09-30 22:28:37,947 is - dvorak
2022-09-30 22:28:37,947 in - Default
2022-09-30 22:28:37,947 in - guru
2022-09-30 22:28:37,947 in - jhelum
2022-09-30 22:28:37,948 in - Default
2022-09-30 22:28:37,948 in - bolnagri
2022-09-30 22:28:37,948 in - hin-wx
2022-09-30 22:28:37,949 in - Default
2022-09-30 22:28:37,949 in - tam_unicode
2022-09-30 22:28:37,949 in - tam_keyboard_with_numerals
2022-09-30 22:28:37,950 in - tam_TAB
2022-09-30 22:28:37,950 in - tam_TSCII
2022-09-30 22:28:37,950 in - tam
2022-09-30 22:28:37,951 iq - Default
2022-09-30 22:28:37,951 iq - ku
2022-09-30 22:28:37,951 iq - ku_f
2022-09-30 22:28:37,951 iq - ku_alt
2022-09-30 22:28:37,951 iq - ku_ara
2022-09-30 22:28:37,952 il - Default
2022-09-30 22:28:37,952 il - lyx
2022-09-30 22:28:37,952 il - phonetic
2022-09-30 22:28:37,952 il - biblical
2022-09-30 22:28:37,952 it - Default
2022-09-30 22:28:37,952 it - nodeadkeys
2022-09-30 22:28:37,953 it - mac
2022-09-30 22:28:37,953 it - us
2022-09-30 22:28:37,953 it - geo
2022-09-30 22:28:37,953 jp - Default
2022-09-30 22:28:37,953 jp - kana
2022-09-30 22:28:37,953 jp - kana86
2022-09-30 22:28:37,954 jp - OADG109A
2022-09-30 22:28:37,954 jp - mac
2022-09-30 22:28:37,954 ara - Default
2022-09-30 22:28:37,954 ara - azerty
2022-09-30 22:28:37,954 ara - azerty_digits
2022-09-30 22:28:37,954 ara - digits
2022-09-30 22:28:37,954 ara - qwerty
2022-09-30 22:28:37,954 ara - qwerty_digits
2022-09-30 22:28:37,955 ara - buckwalter
2022-09-30 22:28:37,955 kz - Default
2022-09-30 22:28:37,955 kz - ruskaz
2022-09-30 22:28:37,955 kz - kazrus
2022-09-30 22:28:37,956 ara - Default
2022-09-30 22:28:37,956 ara - azerty
2022-09-30 22:28:37,956 ara - azerty_digits
2022-09-30 22:28:37,956 ara - digits
2022-09-30 22:28:37,956 ara - qwerty
2022-09-30 22:28:37,956 ara - qwerty_digits
2022-09-30 22:28:37,956 ara - buckwalter
2022-09-30 22:28:37,957 latam - Default
2022-09-30 22:28:37,957 latam - nodeadkeys
2022-09-30 22:28:37,957 latam - deadtilde
2022-09-30 22:28:37,957 latam - sundeadkeys
2022-09-30 22:28:37,958 lv - Default
2022-09-30 22:28:37,958 lv - apostrophe
2022-09-30 22:28:37,958 lv - tilde
2022-09-30 22:28:37,958 lv - fkey
2022-09-30 22:28:37,958 lv - modern
2022-09-30 22:28:37,958 lv - ergonomic
2022-09-30 22:28:37,958 lv - adapted
2022-09-30 22:28:37,959 ara - Default
2022-09-30 22:28:37,959 ara - azerty
2022-09-30 22:28:37,959 ara - azerty_digits
2022-09-30 22:28:37,959 ara - digits
2022-09-30 22:28:37,959 ara - qwerty
2022-09-30 22:28:37,959 ara - qwerty_digits
2022-09-30 22:28:37,959 ara - buckwalter
2022-09-30 22:28:37,960 ara - Default
2022-09-30 22:28:37,960 ara - azerty
2022-09-30 22:28:37,960 ara - azerty_digits
2022-09-30 22:28:37,960 ara - digits
2022-09-30 22:28:37,960 ara - qwerty
2022-09-30 22:28:37,960 ara - qwerty_digits
2022-09-30 22:28:37,961 ara - buckwalter
2022-09-30 22:28:37,961 lt - Default
2022-09-30 22:28:37,961 lt - std
2022-09-30 22:28:37,961 lt - us
2022-09-30 22:28:37,961 lt - ibm
2022-09-30 22:28:37,962 lt - lekp
2022-09-30 22:28:37,962 lt - lekpa
2022-09-30 22:28:37,962 fr - Default
2022-09-30 22:28:37,962 fr - nodeadkeys
2022-09-30 22:28:37,962 fr - sundeadkeys
2022-09-30 22:28:37,963 fr - oss
2022-09-30 22:28:37,963 fr - oss_latin9
2022-09-30 22:28:37,963 fr - oss_nodeadkeys
2022-09-30 22:28:37,963 fr - oss_sundeadkeys
2022-09-30 22:28:37,963 fr - latin9
2022-09-30 22:28:37,963 fr - latin9_nodeadkeys
2022-09-30 22:28:37,963 fr - latin9_sundeadkeys
2022-09-30 22:28:37,964 fr - bepo
2022-09-30 22:28:37,964 fr - bepo_latin9
2022-09-30 22:28:37,964 fr - dvorak
2022-09-30 22:28:37,964 fr - mac
2022-09-30 22:28:37,964 fr - bre
2022-09-30 22:28:37,964 fr - oci
2022-09-30 22:28:37,964 fr - geo
2022-09-30 22:28:37,965 in - Default
2022-09-30 22:28:37,965 in - mal
2022-09-30 22:28:37,965 in - mal_lalitha
2022-09-30 22:28:37,965 in - mal_enhanced
2022-09-30 22:28:37,966 es - Default
2022-09-30 22:28:37,966 es - nodeadkeys
2022-09-30 22:28:37,966 es - deadtilde
2022-09-30 22:28:37,966 es - sundeadkeys
2022-09-30 22:28:37,966 es - dvorak
2022-09-30 22:28:37,966 es - est
2022-09-30 22:28:37,966 es - cat
2022-09-30 22:28:37,966 es - mac
2022-09-30 22:28:37,967 fr - Default
2022-09-30 22:28:37,967 fr - nodeadkeys
2022-09-30 22:28:37,967 fr - sundeadkeys
2022-09-30 22:28:37,967 fr - oss
2022-09-30 22:28:37,967 fr - oss_latin9
2022-09-30 22:28:37,967 fr - oss_nodeadkeys
2022-09-30 22:28:37,967 fr - oss_sundeadkeys
2022-09-30 22:28:37,967 fr - latin9
2022-09-30 22:28:37,967 fr - latin9_nodeadkeys
2022-09-30 22:28:37,967 fr - latin9_sundeadkeys
2022-09-30 22:28:37,967 fr - bepo
2022-09-30 22:28:37,967 fr - bepo_latin9
2022-09-30 22:28:37,967 fr - dvorak
2022-09-30 22:28:37,967 fr - mac
2022-09-30 22:28:37,967 fr - bre
2022-09-30 22:28:37,967 fr - oci
2022-09-30 22:28:37,968 fr - geo
2022-09-30 22:28:37,968 ara - Default
2022-09-30 22:28:37,968 ara - azerty
2022-09-30 22:28:37,968 ara - azerty_digits
2022-09-30 22:28:37,968 ara - digits
2022-09-30 22:28:37,968 ara - qwerty
2022-09-30 22:28:37,968 ara - qwerty_digits
2022-09-30 22:28:37,968 ara - buckwalter
2022-09-30 22:28:37,968 nl - Default
2022-09-30 22:28:37,968 nl - sundeadkeys
2022-09-30 22:28:37,968 nl - mac
2022-09-30 22:28:37,968 nl - std
2022-09-30 22:28:37,969 latam - Default
2022-09-30 22:28:37,969 latam - nodeadkeys
2022-09-30 22:28:37,969 latam - deadtilde
2022-09-30 22:28:37,969 latam - sundeadkeys
2022-09-30 22:28:37,969 fr - Default
2022-09-30 22:28:37,969 fr - nodeadkeys
2022-09-30 22:28:37,969 fr - sundeadkeys
2022-09-30 22:28:37,969 fr - oss
2022-09-30 22:28:37,969 fr - oss_latin9
2022-09-30 22:28:37,969 fr - oss_nodeadkeys
2022-09-30 22:28:37,969 fr - oss_sundeadkeys
2022-09-30 22:28:37,969 fr - latin9
2022-09-30 22:28:37,969 fr - latin9_nodeadkeys
2022-09-30 22:28:37,969 fr - latin9_sundeadkeys
2022-09-30 22:28:37,969 fr - bepo
2022-09-30 22:28:37,970 fr - bepo_latin9
2022-09-30 22:28:37,970 fr - dvorak
2022-09-30 22:28:37,970 fr - mac
2022-09-30 22:28:37,970 fr - bre
2022-09-30 22:28:37,970 fr - oci
2022-09-30 22:28:37,970 fr - geo
2022-09-30 22:28:37,970 no - Default
2022-09-30 22:28:37,970 no - nodeadkeys
2022-09-30 22:28:37,970 no - dvorak
2022-09-30 22:28:37,970 no - smi
2022-09-30 22:28:37,970 no - smi_nodeadkeys
2022-09-30 22:28:37,970 no - mac
2022-09-30 22:28:37,970 no - mac_nodeadkeys
2022-09-30 22:28:37,970 no - Default
2022-09-30 22:28:37,970 no - nodeadkeys
2022-09-30 22:28:37,971 no - dvorak
2022-09-30 22:28:37,971 no - smi
2022-09-30 22:28:37,971 no - smi_nodeadkeys
2022-09-30 22:28:37,971 no - mac
2022-09-30 22:28:37,971 no - mac_nodeadkeys
2022-09-30 22:28:37,971 ara - Default
2022-09-30 22:28:37,971 ara - azerty
2022-09-30 22:28:37,971 ara - azerty_digits
2022-09-30 22:28:37,971 ara - digits
2022-09-30 22:28:37,971 ara - qwerty
2022-09-30 22:28:37,971 ara - qwerty_digits
2022-09-30 22:28:37,971 ara - buckwalter
2022-09-30 22:28:37,971 pk - Default
2022-09-30 22:28:37,971 pk - urd-crulp
2022-09-30 22:28:37,972 pk - urd-nla
2022-09-30 22:28:37,972 pk - ara
2022-09-30 22:28:37,972 pk - snd
2022-09-30 22:28:37,972 latam - Default
2022-09-30 22:28:37,972 latam - nodeadkeys
2022-09-30 22:28:37,972 latam - deadtilde
2022-09-30 22:28:37,972 latam - sundeadkeys
2022-09-30 22:28:37,972 latam - Default
2022-09-30 22:28:37,972 latam - nodeadkeys
2022-09-30 22:28:37,972 latam - deadtilde
2022-09-30 22:28:37,972 latam - sundeadkeys
2022-09-30 22:28:37,972 latam - Default
2022-09-30 22:28:37,972 latam - nodeadkeys
2022-09-30 22:28:37,973 latam - deadtilde
2022-09-30 22:28:37,973 latam - sundeadkeys
2022-09-30 22:28:37,973 pl - Default
2022-09-30 22:28:37,973 pl - qwertz
2022-09-30 22:28:37,973 pl - dvorak
2022-09-30 22:28:37,973 pl - dvorak_quotes
2022-09-30 22:28:37,973 pl - dvorak_altquotes
2022-09-30 22:28:37,973 pl - csb
2022-09-30 22:28:37,973 pl - ru_phonetic_dvorak
2022-09-30 22:28:37,973 pl - dvp
2022-09-30 22:28:37,973 pt - Default
2022-09-30 22:28:37,973 pt - nodeadkeys
2022-09-30 22:28:37,973 pt - sundeadkeys
2022-09-30 22:28:37,973 pt - mac
2022-09-30 22:28:37,974 pt - mac_nodeadkeys
2022-09-30 22:28:37,974 pt - mac_sundeadkeys
2022-09-30 22:28:37,974 pt - nativo
2022-09-30 22:28:37,974 pt - nativo-us
2022-09-30 22:28:37,974 pt - nativo-epo
2022-09-30 22:28:37,974 cn - Default
2022-09-30 22:28:37,974 cn - tib
2022-09-30 22:28:37,974 cn - tib_asciinum
2022-09-30 22:28:37,974 cn - uig
2022-09-30 22:28:37,974 latam - Default
2022-09-30 22:28:37,974 latam - nodeadkeys
2022-09-30 22:28:37,974 latam - deadtilde
2022-09-30 22:28:37,974 latam - sundeadkeys
2022-09-30 22:28:37,975 ara - Default
2022-09-30 22:28:37,975 ara - azerty
2022-09-30 22:28:37,975 ara - azerty_digits
2022-09-30 22:28:37,975 ara - digits
2022-09-30 22:28:37,975 ara - qwerty
2022-09-30 22:28:37,975 ara - qwerty_digits
2022-09-30 22:28:37,975 ara - buckwalter
2022-09-30 22:28:37,976 ro - Default
2022-09-30 22:28:37,976 ro - cedilla
2022-09-30 22:28:37,976 ro - std
2022-09-30 22:28:37,976 ro - std_cedilla
2022-09-30 22:28:37,976 ro - winkeys
2022-09-30 22:28:37,976 ru - Default
2022-09-30 22:28:37,976 ru - phonetic
2022-09-30 22:28:37,976 ru - phonetic_winkeys
2022-09-30 22:28:37,976 ru - typewriter
2022-09-30 22:28:37,976 ru - legacy
2022-09-30 22:28:37,976 ru - typewriter-legacy
2022-09-30 22:28:37,976 ru - tt
2022-09-30 22:28:37,976 ru - os_legacy
2022-09-30 22:28:37,976 ru - os_winkeys
2022-09-30 22:28:37,977 ru - cv
2022-09-30 22:28:37,977 ru - cv_latin
2022-09-30 22:28:37,977 ru - udm
2022-09-30 22:28:37,977 ru - kom
2022-09-30 22:28:37,977 ru - sah
2022-09-30 22:28:37,977 ru - xal
2022-09-30 22:28:37,977 ru - dos
2022-09-30 22:28:37,977 ru - srp
2022-09-30 22:28:37,977 ru - bak
2022-09-30 22:28:37,977 ru - chm
2022-09-30 22:28:37,977  - Default
2022-09-30 22:28:37,977  - yz
2022-09-30 22:28:37,977  - latin
2022-09-30 22:28:37,977  - latinunicode
2022-09-30 22:28:37,977  - latinyz
2022-09-30 22:28:37,978  - latinunicodeyz
2022-09-30 22:28:37,978  - alternatequotes
2022-09-30 22:28:37,978  - latinalternatequotes
2022-09-30 22:28:37,978  - rue
2022-09-30 22:28:37,978 rs - Default
2022-09-30 22:28:37,978 rs - yz
2022-09-30 22:28:37,978 rs - latin
2022-09-30 22:28:37,978 rs - latinunicode
2022-09-30 22:28:37,978 rs - latinyz
2022-09-30 22:28:37,978 rs - latinunicodeyz
2022-09-30 22:28:37,978 rs - alternatequotes
2022-09-30 22:28:37,978 rs - latinalternatequotes
2022-09-30 22:28:37,978 rs - rue
2022-09-30 22:28:37,979 sk - Default
2022-09-30 22:28:37,979 sk - bksl
2022-09-30 22:28:37,979 sk - qwerty
2022-09-30 22:28:37,979 sk - qwerty_bksl
2022-09-30 22:28:37,979 si - Default
2022-09-30 22:28:37,979 si - alternatequotes
2022-09-30 22:28:37,979 si - us
2022-09-30 22:28:37,979 es - Default
2022-09-30 22:28:37,979 es - nodeadkeys
2022-09-30 22:28:37,979 es - deadtilde
2022-09-30 22:28:37,979 es - sundeadkeys
2022-09-30 22:28:37,979 es - dvorak
2022-09-30 22:28:37,979 es - est
2022-09-30 22:28:37,980 es - cat
2022-09-30 22:28:37,980 es - mac
2022-09-30 22:28:37,980 es - Default
2022-09-30 22:28:37,980 es - nodeadkeys
2022-09-30 22:28:37,980 es - deadtilde
2022-09-30 22:28:37,980 es - sundeadkeys
2022-09-30 22:28:37,980 es - dvorak
2022-09-30 22:28:37,980 es - est
2022-09-30 22:28:37,980 es - cat
2022-09-30 22:28:37,980 es - mac
2022-09-30 22:28:37,981 se - Default
2022-09-30 22:28:37,981 se - nodeadkeys
2022-09-30 22:28:37,981 se - dvorak
2022-09-30 22:28:37,981 se - rus
2022-09-30 22:28:37,981 se - rus_nodeadkeys
2022-09-30 22:28:37,981 se - smi
2022-09-30 22:28:37,981 se - mac
2022-09-30 22:28:37,981 se - svdvorak
2022-09-30 22:28:37,981 se - swl
2022-09-30 22:28:37,981 ch - Default
2022-09-30 22:28:37,981 ch - fr
2022-09-30 22:28:37,981 ch - fr_nodeadkeys
2022-09-30 22:28:37,982 ch - fr_sundeadkeys
2022-09-30 22:28:37,982 ch - fr_mac
2022-09-30 22:28:37,982 de - Default
2022-09-30 22:28:37,982 de - deadacute
2022-09-30 22:28:37,982 de - deadgraveacute
2022-09-30 22:28:37,982 de - nodeadkeys
2022-09-30 22:28:37,982 de - ro
2022-09-30 22:28:37,982 de - ro_nodeadkeys
2022-09-30 22:28:37,982 de - dvorak
2022-09-30 22:28:37,982 de - sundeadkeys
2022-09-30 22:28:37,982 de - neo
2022-09-30 22:28:37,982 de - mac
2022-09-30 22:28:37,982 de - mac_nodeadkeys
2022-09-30 22:28:37,983 de - dsb
2022-09-30 22:28:37,983 de - dsb_qwertz
2022-09-30 22:28:37,983 de - qwerty
2022-09-30 22:28:37,983 de - ru
2022-09-30 22:28:37,983 it - Default
2022-09-30 22:28:37,983 it - nodeadkeys
2022-09-30 22:28:37,983 it - mac
2022-09-30 22:28:37,983 it - us
2022-09-30 22:28:37,983 it - geo
2022-09-30 22:28:37,983 sy - Default
2022-09-30 22:28:37,983 sy - syc
2022-09-30 22:28:37,983 sy - syc_phonetic
2022-09-30 22:28:37,984 sy - Default
2022-09-30 22:28:37,984 sy - syc
2022-09-30 22:28:37,984 sy - syc_phonetic
2022-09-30 22:28:37,984 sy - ku
2022-09-30 22:28:37,984 sy - ku_f
2022-09-30 22:28:37,984 sy - ku_alt
2022-09-30 22:28:37,984 tw - Default
2022-09-30 22:28:37,984 tw - indigenous
2022-09-30 22:28:37,984 tw - saisiyat
2022-09-30 22:28:37,985 th - Default
2022-09-30 22:28:37,985 th - tis
2022-09-30 22:28:37,985 th - pat
2022-09-30 22:28:37,985 ara - Default
2022-09-30 22:28:37,985 ara - azerty
2022-09-30 22:28:37,985 ara - azerty_digits
2022-09-30 22:28:37,985 ara - digits
2022-09-30 22:28:37,985 ara - qwerty
2022-09-30 22:28:37,985 ara - qwerty_digits
2022-09-30 22:28:37,985 ara - buckwalter
2022-09-30 22:28:37,985 tr - Default
2022-09-30 22:28:37,985 tr - f
2022-09-30 22:28:37,985 tr - alt
2022-09-30 22:28:37,986 tr - sundeadkeys
2022-09-30 22:28:37,986 tr - ku
2022-09-30 22:28:37,986 tr - ku_f
2022-09-30 22:28:37,986 tr - ku_alt
2022-09-30 22:28:37,986 tr - intl
2022-09-30 22:28:37,986 tr - crh
2022-09-30 22:28:37,986 tr - crh_f
2022-09-30 22:28:37,986 tr - crh_alt
2022-09-30 22:28:37,986 ara - Default
2022-09-30 22:28:37,986 ara - azerty
2022-09-30 22:28:37,986 ara - azerty_digits
2022-09-30 22:28:37,986 ara - digits
2022-09-30 22:28:37,986 ara - qwerty
2022-09-30 22:28:37,986 ara - qwerty_digits
2022-09-30 22:28:37,986 ara - buckwalter
2022-09-30 22:28:37,987 gb - Default
2022-09-30 22:28:37,987 gb - extd
2022-09-30 22:28:37,987 gb - intl
2022-09-30 22:28:37,987 gb - dvorak
2022-09-30 22:28:37,987 gb - dvorakukp
2022-09-30 22:28:37,987 gb - mac
2022-09-30 22:28:37,987 gb - mac_intl
2022-09-30 22:28:37,987 gb - colemak
2022-09-30 22:28:37,987 ua - Default
2022-09-30 22:28:37,987 ua - phonetic
2022-09-30 22:28:37,987 ua - typewriter
2022-09-30 22:28:37,987 ua - winkeys
2022-09-30 22:28:37,987 ua - legacy
2022-09-30 22:28:37,987 ua - rstu
2022-09-30 22:28:37,987 ua - rstu_ru
2022-09-30 22:28:37,988 ua - homophonic
2022-09-30 22:28:37,988 latam - Default
2022-09-30 22:28:37,988 latam - nodeadkeys
2022-09-30 22:28:37,988 latam - deadtilde
2022-09-30 22:28:37,988 latam - sundeadkeys
2022-09-30 22:28:38,000 latam - Default
2022-09-30 22:28:38,001 latam - nodeadkeys
2022-09-30 22:28:38,001 latam - deadtilde
2022-09-30 22:28:38,001 latam - sundeadkeys
2022-09-30 22:28:38,001 ara - Default
2022-09-30 22:28:38,001 ara - azerty
2022-09-30 22:28:38,001 ara - azerty_digits
2022-09-30 22:28:38,001 ara - digits
2022-09-30 22:28:38,001 ara - qwerty
2022-09-30 22:28:38,001 ara - qwerty_digits
2022-09-30 22:28:38,001 ara - buckwalter
2022-09-30 22:28:40,448 set_layout_enabled(()) full_layout_list=True
2022-09-30 22:28:40,448 set_layout_enabled(()) layout=gb, query-struct={'layout': 'gb'}

@ibuclaw
Copy link
Author

ibuclaw commented Sep 30, 2022

Patch to skip generating menu items helps. Seems fine, as they will just be hidden anyway.

--- a/xpra/client/gtk_base/gtk_tray_menu_base.py
+++ b/xpra/client/gtk_base/gtk_tray_menu_base.py
@@ -1124,6 +1124,7 @@ class GTKTrayMenuBase(MenuHelper):
         log("make_layoutsmenuitem() layout=%s, layouts=%s, variant=%s, variants=%s",
             layout, layouts, variant, variants)
         full_layout_list = False
+        kh = self.client.keyboard_helper
         if len(layouts)>1:
             log("keyboard layouts: %s", ",".join(bytestostr(x) for x in layouts))
             #log after removing dupes:
@@ -1147,7 +1148,7 @@ class GTKTrayMenuBase(MenuHelper):
             self.layout_submenu.append(default)
             for v in variants:
                 self.layout_submenu.append(kbitem("%s - %s" % (layout, v), layout, v))
-        else:
+        elif not (kh.layout or kh.query_struct):
             full_layout_list = True
             from xpra.keyboard.layouts import X11_LAYOUTS
             #show all options to choose from:
@@ -1169,7 +1170,6 @@ class GTKTrayMenuBase(MenuHelper):
                 else:
                     #no variants:
                     self.layout_submenu.append(kbitem(name, layout, None))
-        kh = self.client.keyboard_helper
         def set_layout_enabled(*args):
             log(f"set_layout_enabled({args}) full_layout_list={full_layout_list}")
             log(f"set_layout_enabled({args}) layout={kh.layout}, query-struct={kh.query_struct}")

The fastest of course is just to remove everything. :-)

@ibuclaw
Copy link
Author

ibuclaw commented Sep 30, 2022

So the thing to do now would be to attach and disconnect repeatedly, to see if gnome-shell still locks up on xpra attach. The current assumption now is that a huge (> 700 menu items) GTK tray, plus some other external event (GC?) causes the entire gnome WM to freeze indefinitely.

@totaam
Copy link
Collaborator

totaam commented Oct 1, 2022

Yes, still getting a hang.

But less than before, right?
The large start menu takes up a lot of menu entries.

These submenu.append calls are the two biggest offenders.

These should be almost free, they are on X11.
Looking at your layout list, this should probably a nested menu instead.
ie: ara : ["Default", "azerty", "azerty_digits", "digits", "qwerty", "qwerty_digits", "buckwalter"]

The fastest of course is just to remove everything.

Haha, yes. Turn off the computer and the bugs are all gone too.

@ibuclaw
Copy link
Author

ibuclaw commented Oct 1, 2022

Yes, still getting a hang.

But less than before, right? The large start menu takes up a lot of menu entries.s

Not really, I can't see anything that would suggest it bloats the tray.

These submenu.append calls are the two biggest offenders.

These should be almost free, they are on X11. Looking at your layout list, this should probably a nested menu instead. ie: ara : ["Default", "azerty", "azerty_digits", "digits", "qwerty", "qwerty_digits", "buckwalter"]

Right, the creation of the menu is free, but sending of this massive menu off to libappindicator causes it to freeze. This line right here is where we pass the point of no return. https://github.com/Xpra-org/xpra/blob/master/xpra/platform/xposix/appindicator_tray.py#L58-L59

Modifying appindicator_tray.py in the following way, it is possible to reproduce this outside of running xpra itself.

--- a/xpra/platform/xposix/appindicator_tray.py
+++ b/xpra/platform/xposix/appindicator_tray.py
@@ -156,8 +156,8 @@ def main(): # pragma: no cover
         sub = Gtk.MenuItem(label="Sub Menu Item 1")
         subsubmenu = Gtk.Menu()
         sub.set_submenu(subsubmenu)
-        subsubmenu.append(Gtk.MenuItem(label="Sub Sub Menu Item 1"))
-        subsubmenu.append(Gtk.MenuItem(label="Sub Sub Menu Item 2"))
+        for n in range(1, 1000):
+            subsubmenu.append(Gtk.MenuItem(label="Sub Sub Menu Item "+str(n)))
         submenu.append(sub)
         sub = Gtk.MenuItem(label="Sub Menu Item 2")
         submenu.append(sub)
This is a dump of the full menu (somewhat prettified).
Xpra
Information/
  About Xpra
  Session Info
  Check for updates
  Bug Report
  Documentation
  HTML5 client
Features/
  Sharing
  Lock
  Read-only
  Bell
  Notifications
  Cursors
  Modal Windows
Keyboard/
  State Synchronization
  Intercept Shortcuts
  View Shortcuts
  Layout/
    Albania - Albanian
    Algeria - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    Argentina - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Armenia - Armenian/
      am - Default
      am - phonetic
      am - phonetic-alt
      am - eastern
      am - western
      am - eastern-alt
    Australia - English
    Austria - German/
      at - Default
      at - nodeadkeys
      at - sundeadkeys
      at - mac
    Azerbaijan (Cyrillic) - Azeri
    Azerbaijan (Latin) - Azeri
    Bahrain - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    Belarus - Belarusian/
      by - Default
      by - legacy
      by - latin
    Belgium - Dutch/
      nl - Default
      nl - sundeadkeys
      nl - mac
      nl - std
    Belize - English
    Benelux - French/
      be - Default
      be - oss
      be - oss_latin9
      be - oss_sundeadkeys
      be - iso-alternate
      be - nodeadkeys
      be - sundeadkeys
      be - wang
    Bolivia - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Brazil - Portuguese/
      br - Default
      br - nodeadkeys
      br - dvorak
      br - nativo
      br - nativo-us
      br - nativo-epo
    Brunei Darussalam - Malay/
      in - Default
      in - mal
      in - mal_lalitha
      in - mal_enhanced
    Bulgaria - Bulgarian/
      bg - Default
      bg - phonetic
      bg - bas_phonetic
    Canada - English
    Canada - French/
      ca - Default
      ca - fr-dvorak
      ca - fr-legacy
      ca - multix
      ca - multi
      ca - multi-2gr
      ca - ike
    Caribbean - English
    Chile - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Colombia - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Costa Rica - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Croatia - Croatian/
      hr - Default
      hr - alternatequotes
      hr - unicode
      hr - unicodeus
      hr - us
    Czech - Czech/
      cz - Default
      cz - bksl
      cz - qwerty
      cz - qwerty_bksl
      cz - ucw
      cz - dvorak-ucw
    Denmark - Danish/
      dk - Default
      dk - nodeadkeys
      dk - mac
      dk - mac_nodeadkeys
      dk - dvorak
    Dominican Republic - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Ecuador - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Egypt - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    El Salvador - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Estonia - Estonian/
      ee - Default
      ee - nodeadkeys
      ee - dvorak
      ee - us
    F.Y.R.O. Macedonia - F.Y.R.O. Macedonia
    Faroe Islands - Faroese
    Finland - Finnish/
      fi - Default
      fi - classic
      fi - nodeadkeys
      fi - smi
      fi - mac
    Finland - Swedish/
      se - Default
      se - nodeadkeys
      se - dvorak
      se - rus
      se - rus_nodeadkeys
      se - smi
      se - mac
      se - svdvorak
      se - swl
    France - French/
      fr - Default
      fr - nodeadkeys
      fr - sundeadkeys
      fr - oss
      fr - oss_latin9
      fr - oss_nodeadkeys
      fr - oss_sundeadkeys
      fr - latin9
      fr - latin9_nodeadkeys
      fr - latin9_sundeadkeys
      fr - bepo
      fr - bepo_latin9
      fr - dvorak
      fr - mac
      fr - bre
      fr - oci
      fr - geo
    Georgia - Georgian/
      ge - Default
      ge - ergonomic
      ge - mess
      ge - ru
      ge - os
    Germany - German/
      de - Default
      de - nodeadkeys
      de - sundeadkeys
      de - mac
    Greece - Greek/
      gr - Default
      gr - simple
      gr - extended
      gr - nodeadkeys
      gr - polytonic
    Guatemala - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Honduras - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Hong Kong SAR - Chinese
    Hong Kong SAR - English
    Hungary - Hungarian/
      hu - Default
      hu - standard
      hu - nodeadkeys
      hu - qwerty
      hu - 101_qwertz_comma_dead
      hu - 101_qwertz_comma_nodead
      hu - 101_qwertz_dot_dead
      hu - 101_qwertz_dot_nodead
      hu - 101_qwerty_comma_dead
      hu - 101_qwerty_comma_nodead
      hu - 101_qwerty_dot_dead
      hu - 101_qwerty_dot_nodead
      hu - 102_qwertz_comma_dead
      hu - 102_qwertz_comma_nodead
      hu - 102_qwertz_dot_dead
      hu - 102_qwertz_dot_nodead
      hu - 102_qwerty_comma_dead
      hu - 102_qwerty_comma_nodead
      hu - 102_qwerty_dot_dead
      hu - 102_qwerty_dot_nodead
    Iceland - Icelandic/
      is - Default
      is - sundeadkeys
      is - nodeadkeys
      is - mac
      is - dvorak
    India (Gurmukhi script) - Punjabi/
      in - Default
      in - guru
      in - jhelum
    India (Kannada script) - Kannada
    India (Telugu script) - Telugu
    India - English
    India - Gujarati
    India - Hindi/
      in - Default
      in - bolnagri
      in - hin-wx
    India - Konkani
    India - Marathi
    India - Sanskrit
    India - Tamil/
      in - Default
      in - tam_unicode
      in - tam_keyboard_with_numerals
      in - tam_TAB
      in - tam_TSCII
      in - tam
    Indonesia (Bahasa) - Indonesian
    Indonesia - English
    Iran - Farsi
    Iraq - Arabic/
      iq - Default
      iq - ku
      iq - ku_f
      iq - ku_alt
      iq - ku_ara
    Ireland - English
    Israel - Hebrew/
      il - Default
      il - lyx
      il - phonetic
      il - biblical
    Italy - Italian/
      it - Default
      it - nodeadkeys
      it - mac
      it - us
      it - geo
    Jamaica - English
    Japan - Japanese/
      jp - Default
      jp - kana
      jp - kana86
      jp - OADG109A
      jp - mac
    Jordan - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    Kazakstan - Kazakh/
      kz - Default
      kz - ruskaz
      kz - kazrus
    Kenya - Swahili
    Korea - Korean
    Kuwait - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    Kyrgyzstan - Kyrgyz
    LatAm - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Latvia - Latvian/
      lv - Default
      lv - apostrophe
      lv - tilde
      lv - fkey
      lv - modern
      lv - ergonomic
      lv - adapted
    Lebanon - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    Libya - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    Liechtenstein - German
    Lithuania - Lithuanian/
      lt - Default
      lt - std
      lt - us
      lt - ibm
      lt - lekp
      lt - lekpa
    Luxembourg - French/
      fr - Default
      fr - nodeadkeys
      fr - sundeadkeys
      fr - oss
      fr - oss_latin9
      fr - oss_nodeadkeys
      fr - oss_sundeadkeys
      fr - latin9
      fr - latin9_nodeadkeys
      fr - latin9_sundeadkeys
      fr - bepo
      fr - bepo_latin9
      fr - dvorak
      fr - mac
      fr - bre
      fr - oci
      fr - geo
    Luxembourg - German
    Macao SAR - Chinese
    Malaysia - English
    Malaysia - Malay/
      in - Default
      in - mal
      in - mal_lalitha
      in - mal_enhanced
    Maldives - Divehi
    Mexico - Spanish/
      es - Default
      es - nodeadkeys
      es - deadtilde
      es - sundeadkeys
      es - dvorak
      es - est
      es - cat
      es - mac
    Monaco - French/
      fr - Default
      fr - nodeadkeys
      fr - sundeadkeys
      fr - oss
      fr - oss_latin9
      fr - oss_nodeadkeys
      fr - oss_sundeadkeys
      fr - latin9
      fr - latin9_nodeadkeys
      fr - latin9_sundeadkeys
      fr - bepo
      fr - bepo_latin9
      fr - dvorak
      fr - mac
      fr - bre
      fr - oci
      fr - geo
    Mongolia - Mongolian (Cyrillic)
    Morocco - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    Netherlands - Dutch/
      nl - Default
      nl - sundeadkeys
      nl - mac
      nl - std
    New Zealand - English
    Nicaragua - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    North Africa - French/
      fr - Default
      fr - nodeadkeys
      fr - sundeadkeys
      fr - oss
      fr - oss_latin9
      fr - oss_nodeadkeys
      fr - oss_sundeadkeys
      fr - latin9
      fr - latin9_nodeadkeys
      fr - latin9_sundeadkeys
      fr - bepo
      fr - bepo_latin9
      fr - dvorak
      fr - mac
      fr - bre
      fr - oci
      fr - geo
    Norway (Bokmål) - Norwegian/
      no - Default
      no - nodeadkeys
      no - dvorak
      no - smi
      no - smi_nodeadkeys
      no - mac
      no - mac_nodeadkeys
    Norway (Nynorsk) - Norwegian/
      no - Default
      no - nodeadkeys
      no - dvorak
      no - smi
      no - smi_nodeadkeys
      no - mac
      no - mac_nodeadkeys
    Oman - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    Pakistan - Urdu/
      pk - Default
      pk - urd-crulp
      pk - urd-nla
      pk - ara
      pk - snd
    Panama - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Paraguay - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Peru - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Philippines - English
    Poland - Polish/
      pl - Default
      pl - qwertz
      pl - dvorak
      pl - dvorak_quotes
      pl - dvorak_altquotes
      pl - csb
      pl - ru_phonetic_dvorak
      pl - dvp
    Portugal - Portuguese/
      pt - Default
      pt - nodeadkeys
      pt - sundeadkeys
      pt - mac
      pt - mac_nodeadkeys
      pt - mac_sundeadkeys
      pt - nativo
      pt - nativo-us
      pt - nativo-epo
    PRC - Chinese, Simplified/
      cn - Default
      cn - tib
      cn - tib_asciinum
      cn - uig
    Puerto Rico - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Qatar - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    Romania - Romanian/
      ro - Default
      ro - cedilla
      ro - std
      ro - std_cedilla
      ro - winkeys
    Russia - Russian/
      ru - Default
      ru - phonetic
      ru - phonetic_winkeys
      ru - typewriter
      ru - legacy
      ru - typewriter-legacy
      ru - tt
      ru - os_legacy
      ru - os_winkeys
      ru - cv
      ru - cv_latin
      ru - udm
      ru - kom
      ru - sah
      ru - xal
      ru - dos
      ru - srp
      ru - bak
      ru - chm
    Saudi Arabia - Arabic
    Serbia (Cyrillic) - Serbian/
       - Default
       - yz
       - latin
       - latinunicode
       - latinyz
       - latinunicodeyz
       - alternatequotes
       - latinalternatequotes
       - rue
    Serbia (Latin) - Serbian/
      rs - Default
      rs - yz
      rs - latin
      rs - latinunicode
      rs - latinyz
      rs - latinunicodeyz
      rs - alternatequotes
      rs - latinalternatequotes
      rs - rue
    Singapore - Chinese
    Singapore - English
    Slovakia - Slovakian/
      sk - Default
      sk - bksl
      sk - qwerty
      sk - qwerty_bksl
    Slovenia - Slovenian/
      si - Default
      si - alternatequotes
      si - us
    South Africa - Afrikaans
    South Africa - English
    Spain (International sort) - Spanish/
      es - Default
      es - nodeadkeys
      es - deadtilde
      es - sundeadkeys
      es - dvorak
      es - est
      es - cat
      es - mac
    Spain (Traditional sort) - Spanish/
      es - Default
      es - nodeadkeys
      es - deadtilde
      es - sundeadkeys
      es - dvorak
      es - est
      es - cat
      es - mac
    Spain - Basque
    Spain - Catalan
    Spain - Galician
    Sweden - Swedish/
      se - Default
      se - nodeadkeys
      se - dvorak
      se - rus
      se - rus_nodeadkeys
      se - smi
      se - mac
      se - svdvorak
      se - swl
    Switzerland - French/
      ch - Default
      ch - fr
      ch - fr_nodeadkeys
      ch - fr_sundeadkeys
      ch - fr_mac
    Switzerland - German/
      de - Default
      de - deadacute
      de - deadgraveacute
      de - nodeadkeys
      de - ro
      de - ro_nodeadkeys
      de - dvorak
      de - sundeadkeys
      de - neo
      de - mac
      de - mac_nodeadkeys
      de - dsb
      de - dsb_qwertz
      de - qwerty
      de - ru
    Switzerland - Italian/
      it - Default
      it - nodeadkeys
      it - mac
      it - us
      it - geo
    Syria - Arabic/
      sy - Default
      sy - syc
      sy - syc_phonetic
    Syria - Syriac/
      sy - Default
      sy - syc
      sy - syc_phonetic
      sy - ku
      sy - ku_f
      sy - ku_alt
    Taiwan - Chinese/
      tw - Default
      tw - indigenous
      tw - saisiyat
    Tatarstan - Tatar
    Thailand - Thai/
      th - Default
      th - tis
      th - pat
    Trinidad - English
    Tunisia - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    Turkey - Turkish/
      tr - Default
      tr - f
      tr - alt
      tr - sundeadkeys
      tr - ku
      tr - ku_f
      tr - ku_alt
      tr - intl
      tr - crh
      tr - crh_f
      tr - crh_alt
    U.A.E. - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    UK - English/
      gb - Default
      gb - extd
      gb - intl
      gb - dvorak
      gb - dvorakukp
      gb - mac
      gb - mac_intl
      gb - colemak
    Ukraine - Ukrainian/
      ua - Default
      ua - phonetic
      ua - typewriter
      ua - winkeys
      ua - legacy
      ua - rstu
      ua - rstu_ru
      ua - homophonic
    United States - English
    Uruguay - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Uzbekistan (Cyrillic) - Uzbek
    Uzbekistan (Latin) - Uzbek
    Venezuela - Spanish/
      latam - Default
      latam - nodeadkeys
      latam - deadtilde
      latam - sundeadkeys
    Viet Nam - Vietnamese
    Yemen - Arabic/
      ara - Default
      ara - azerty
      ara - azerty_digits
      ara - digits
      ara - qwerty
      ara - qwerty_digits
      ara - buckwalter
    Zimbabwe - English
Clipboard
Picture/
  Bandwidth Limit/
    None
  Encoding
  Scaling/
    25%
    50%
    67%
    None
    125%
    150%
    200%
    300%
    400%
    500%
  Quality
  Speed
Audio/
  Speaker
  Microphone
  Video Sync/
    Off
    
    -200
    -100
     -50
    Auto
     +50
     +100
     +200
Webcam
Monitors/
Windows/
  Raise Windows
  Hide Windows
  Minimize Windows
  Refresh
  Re-initialize
Server/
  Run Command
  Server Commands
  Transfers
  Upload File
  Download File
  Download Server Log
  Shutdown Session
Start
Disconnect
Close Menu

@ibuclaw
Copy link
Author

ibuclaw commented Oct 1, 2022

By the way, thanks a lot for the pointers. It's very much appreciated. :-)

totaam added a commit that referenced this issue Oct 1, 2022
totaam added a commit that referenced this issue Oct 1, 2022
and add an env toggle to skip it if we want to
@totaam
Copy link
Collaborator

totaam commented Oct 1, 2022

@ibuclaw is the latest change good enough to release 4.4?

Not really, I can't see anything that would suggest it bloats the tray.

The start menu is pretty big, it gets populated after the connection is established:

self.client.on_server_setting_changed("xdg-menu", on_xdg_menu_changed)

@ibuclaw
Copy link
Author

ibuclaw commented Oct 1, 2022

@ibuclaw is the latest change good enough to release 4.4?

Looks good, there's even some options to choose from now.
image

@totaam
Copy link
Collaborator

totaam commented Oct 1, 2022

Looks good, there's even some options to choose from now.

Yes, I couldn't resist adding this trivial change: 3f5ff9a

@totaam totaam closed this as completed Oct 1, 2022
@ibuclaw
Copy link
Author

ibuclaw commented Oct 1, 2022

The start menu is pretty big, it gets populated after the connection is established:

self.client.on_server_setting_changed("xdg-menu", on_xdg_menu_changed)

FAOD, I did a quick scan of this sub-menu, there are around ~70 start applications vs. ~700 keyboard layouts when I run xpra. That factor 10 difference makes the brief "freeze" seconds rather than maybe hundredths of milliseconds.

I'll keep an eye on this anyway, let my client session run for a week or so to see if over time things really begin to slow down.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working client linux
Projects
None yet
Development

No branches or pull requests

2 participants