Crash with additional GPU-less KMS display device
Using Ubuntu 19.04 on Thinkpad X230, mutter 3.32.0 + patches as packaged in Ubuntu, DisplayLink 5.1.26 drivers.
Booting and logging in with just the internal GPU works fine. As soon as a DisplayLink dock is connected, gnome-shell crashes.
This message appears in the log:
gnome-shell[2727]: Failed to create backend: Failed to initialize renderer: EGL is not initialized, or could not be initialized, for the specified EGL display connection., EGLDevice currently only works with single GPU systems
gnome-session-binary[2719]: Unrecoverable failure in required component org.gnome.Shell.desktop
gnome-session-binary[2719]: WARNING: App 'org.gnome.Shell.desktop' exited with code 1
Stack trace:
Stack trace of thread 1604:
#0 0x00007f66018dafb7 __GI_raise (libc.so.6)
#1 0x00005598907e001b dump_gjs_stack_on_signal_handler (gnome-shell)
#2 0x00007f66018db040 __restore_rt (libc.so.6)
#3 0x00007f6601b835a1 meta_renderer_native_supports_mirroring (libmutter-4.so.0)
#4 0x00007f6601b7cf8f meta_monitor_manager_kms_get_capabilities (libmutter-4.so.0)
#5 0x00007f6601ae521c meta_monitor_manager_get_capabilities (libmutter-4.so.0)
#6 0x00007f6601b7da7b handle_hotplug_event (libmutter-4.so.0)
#7 0x00007f6600c4e81e ffi_call_unix64 (libffi.so.6)
#8 0x00007f6600c4e1ef ffi_call (libffi.so.6)
#9 0x00007f6602729672 g_cclosure_marshal_generic (libgobject-2.0.so.0)
#10 0x00007f6602728e7d g_closure_invoke (libgobject-2.0.so.0)
#11 0x00007f660273c535 n/a (libgobject-2.0.so.0)
#12 0x00007f660274546e g_signal_emit_valist (libgobject-2.0.so.0)
#13 0x00007f6602745b2f g_signal_emit (libgobject-2.0.so.0)
#14 0x00007f65fea35ac4 n/a (libgudev-1.0.so.0)
#15 0x00007f6602642958 g_main_context_dispatch (libglib-2.0.so.0)
#16 0x00007f6602642d48 n/a (libglib-2.0.so.0)
#17 0x00007f6602643042 g_main_loop_run (libglib-2.0.so.0)
#18 0x00007f6601b1a2fc meta_run (libmutter-4.so.0)
#19 0x00005598907df847 main (gnome-shell)
#20 0x00007f66018bdb6b __libc_start_main (libc.so.6)
#21 0x00005598907df99a _start (gnome-shell)
In meta_renderer_native_supports_mirroring
, gdb points to
renderer_gpu_data = meta_renderer_native_get_gpu_data (renderer_native,
gpu_kms);
switch (renderer_gpu_data->mode)
where renderer_gpu_data
is NULL.
The expected outcome is that the DisplayLink device will either fail EGL init (as it did here) or succeed EGL init with llvmpipe, and then libmutter continues using that display device through the read-pixels fallback path with dumb buffers instead of EGL.
Edited by Pekka Paalanen