[PATCH wayland] RFC: Require WAYLAND_DISPLAY to be set instead of using wayland-0 as the default

Ray Strode halfline at gmail.com
Fri Aug 14 08:22:55 PDT 2015


Hi,

> thanks, and sorry I didn't see your reply before I pushed. :-D
So this commit totally broke gtk+.

Thread 1 (Thread 0x7f3813651980 (LWP 537)):
#0  g_logv (log_domain=0x7f38128b01ce "Gdk",
log_level=G_LOG_LEVEL_ERROR, format=<optimized out>, args=<optimized
out>)
    at ../../glib/gmessages.c:1078
#1  0x00007f380edd30cd in wl_log (fmt=fmt at entry=0x7f380edd31b8 "error:
WAYLAND_DISPLAY not set in the environment.\n")
    at ../src/wayland-util.c:385
#2  0x00007f380edd0115 in connect_to_socket (name=0x0) at
../src/wayland-client.c:768
#3  wl_display_connect (name=name at entry=0x0) at ../src/wayland-client.c:899
#4  0x00007f38128a5f7e in _gdk_wayland_display_open (display_name=0x0)
at ../../../gdk/wayland/gdkdisplay-wayland.c:443
#5  0x00007f381285b357 in gdk_display_manager_open_display
(manager=<optimized out>, name=0x0)
    at ../../gdk/gdkdisplaymanager.c:463
#6  0x00007f3812d24c10 in gtk_init_check (argc=<optimized out>,
argv=<optimized out>) at ../../gtk/gtkmain.c:1011
#7  0x00007f3812d24c49 in gtk_init (argc=<optimized out>,
argv=<optimized out>) at ../../gtk/gtkmain.c:1068
#8  0x0000000000400e11 in main (argc=0, argv=0x0) at
../../tools/gnome-session-check-accelerated.c:121

gtk+ treats wl_log messages as fatal errors. See this commit from krh:

https://git.gnome.org/browse/gtk+/commit/?id=4252ac6d6ce2a02efa0991fc0723f9522aff7a0f

Gtk+ also uses its wayland backend by default, so after this change,
it now dies instead of falings back to the x11 backend on non-wayland sessions.

I've filed https://bugzilla.gnome.org/show_bug.cgi?id=753635 to change
gtk+'s default
behavior to treat wayland errors as debug messages now.

Still, I think this change is wrong headed.  We've been trying to
cleave ourselves from environment variables for years in the default
case.  Having to set this seems like a step backward.
This means having to jump through additional hoops when using systemd
--user sessions, it means
having to jump through an additional hoop when running a program from
a VT, and it means having
to jump through an additional hoop when ssh'ing in to debug something.

if a user runs a program it should show up on the default display in a
clean environment.  save the environment variables for fringe cases
like nested compositors.

The problem purportedly getting fixed gives this as a rationale:

> Now suppose you launch Weston while running the Gnome session. Suddenly, all of the Gtk+ apps
> launched from Gnome will show up inside Weston instead. That's unexpected. There's also no good
> way to prevent that from happening (other than perhaps setting WAYLAND_DISPLAY to an invalid value > when launching an app).
It's wrong to say there's no good way to prevent programs from
launching on weston.  This corner case, can be covered by setting the
GDK_BACKEND environment variable.  edge cases should use environment
variables not the default case.

Furthermore, the commit says it's trying to fix a scenario where the
user is logged into X, but the commit actually breaks X logins
(because of the above log handler issue)!  That means it wasn't
tested.

I don't think the commit is good idea at all, can we revert it ?

XDG_RUNTIME_DIR is supposed to free us from other environment variables.

--Ray


More information about the wayland-devel mailing list