GTK programs hang on startup when xdg-desktop-prortal cannot be started
When starting GTK programs, nothings appears to happen for 30 seconds (I believe this is the standard libdbus timeout). Then the application start as normally. GDB shows the following backtrace:
#0 0x00007ffff657f2af in poll () at /usr/lib/libc.so.6
#1 0x00007ffff775c976 in g_main_context_poll (priority=<optimized out>, n_fds=1, fds=0x555555c50790, timeout=<optimized out>, context=0x555555c64c10) at ../glib/glib/gmain.c:4516
#2 g_main_context_iterate.constprop.0 (context=0x555555c64c10, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4206
#3 0x00007ffff77056a3 in g_main_loop_run (loop=0x555555c507b0) at ../glib/glib/gmain.c:4411
#4 0x00007ffff7594486 in initable_init (initable=0x555555c4fae0, cancellable=0x0, error=0x7fffffffdcf0) at ../glib/gio/gdbusproxy.c:1918
#5 0x00007ffff74f6ca1 in g_initable_new_valist (object_type=0x555555be2a00 [None], first_property_name=<optimized out>, var_args=var_args@entry=0x7fffffffdb40, cancellable=0x0, error=0x7fffffffdcf0)
at ../glib/gio/ginitable.c:248
#6 0x00007ffff74f6d5e in g_initable_new (object_type=<optimized out>, cancellable=<optimized out>, error=<optimized out>, first_property_name=<optimized out>) at ../glib/gio/ginitable.c:162
#7 0x00007ffff759468c in g_dbus_proxy_new_sync
(connection=0x555555bd4100, flags=flags@entry=G_DBUS_PROXY_FLAGS_NONE, info=info@entry=0x0, name=name@entry=0x7ffff7c77f80 "org.freedesktop.portal.Desktop", object_path=object_path@entry=0x7ffff7c77f60 "/org/freedesktop/portal/desktop", interface_name=interface_name@entry=0x7ffff7cce218 "org.freedesktop.portal.Inhibit", cancellable=0x0, error=0x7fffffffdcf0) at ../glib/gio/gdbusproxy.c:2108
#8 0x00007ffff7b4867f in gtk_application_get_proxy_if_service_present
(connection=<optimized out>, flags=flags@entry=G_DBUS_PROXY_FLAGS_NONE, bus_name=bus_name@entry=0x7ffff7c77f80 "org.freedesktop.portal.Desktop", object_path=object_path@entry=0x7ffff7c77f60 "/org/freedesktop/portal/desktop", interface=interface@entry=0x7ffff7cce218 "org.freedesktop.portal.Inhibit", error=error@entry=0x7fffffffdcf0) at ../gtk/gtk/gtkapplication-dbus.c:136
#9 0x00007ffff7b50d0f in gtk_application_impl_dbus_startup (impl=0x555555bf39a0, register_session=0) at ../gtk/gtk/gtkapplication-dbus.c:501
#10 0x00007ffff78a43cd in gtk_application_impl_startup (register_session=<optimized out>, impl=<optimized out>) at ../gtk/gtk/gtkapplicationimpl.c:69
#11 gtk_application_startup (g_application=0x555555bd40e0) at ../gtk/gtk/gtkapplication.c:266
#12 0x00007ffff76836b6 in _g_closure_invoke_va (param_types=0x0, n_params=0, args=0x7fffffffdfd0, instance=0x555555bd40e0, return_value=<optimized out>, closure=<optimized out>) at ../glib/gobject/gclosure.c:893
#13 g_signal_emit_valist (instance=0x555555bd40e0, signal_id=6, detail=<optimized out>, var_args=var_args@entry=0x7fffffffdfd0) at ../glib/gobject/gsignal.c:3406
#14 0x00007ffff7683824 in g_signal_emit (instance=instance@entry=0x555555bd40e0, signal_id=<optimized out>, detail=detail@entry=0) at ../glib/gobject/gsignal.c:3553
#15 0x00007ffff7556706 in g_application_register (application=application@entry=0x555555bd40e0, cancellable=cancellable@entry=0x0, error=error@entry=0x7fffffffe140) at ../glib/gio/gapplication.c:2209
#16 0x00007ffff7557110 in g_application_real_local_command_line (application=0x555555bd40e0, arguments=0x7fffffffe198, exit_status=0x7fffffffe194) at ../glib/gio/gapplication.c:1111
#17 0x00007ffff755747a in g_application_run (application=application@entry=0x555555bd40e0, argc=-7788, argc@entry=1, argv=argv@entry=0x7fffffffe358) at ../glib/gio/gapplication.c:2538
#18 0x000055555558221e in main (argc=1, argv=0x7fffffffe358) at ../gtk/demos/gtk-demo/main.c:1114
The following error message appears in the journal:
Apr 09 14:23:54 desk systemd[1000]: Starting Portal service...
Apr 09 14:23:54 desk dbus-daemon[1113]: [session uid=1000 pid=1113] Activating via systemd: service name='org.freedesktop.impl.portal.desktop.gnome' unit='xdg-desktop-portal-gnome.service' requested by ':1.248' (>
Apr 09 14:23:54 desk systemd[1000]: Starting Portal service (GNOME implementation)...
Apr 09 14:23:54 desk xdg-desktop-por[23483]: cannot open display:
Apr 09 14:23:54 desk systemd[1000]: xdg-desktop-portal-gnome.service: Main process exited, code=exited, status=1/FAILURE
Apr 09 14:23:54 desk systemd[1000]: xdg-desktop-portal-gnome.service: Failed with result 'exit-code'.
Apr 09 14:23:54 desk systemd[1000]: Failed to start Portal service (GNOME implementation).
In this case the problem is that the systemd environment is not properly configured. The wayland socket was not imported into the systemd environment.
Notwithstanding the above, GTK applications should not rely on synchronous dbus activations. And they certainly should not hang for 30 seconds only to start afterwards. Otherwise the user might try to start the application multiple times with no apparent effect only for multiple instances of the same application to pop into existence 30 seconds later.
GTK version: 4.6.2