Page MenuHomePhabricator

Cannot run an Elementary-based app from an AppImage
Open, Incoming QueuePublic

Description

Hi, I'm trying with my eovim project to build an AppImage with every build. Of course, eovim relies entirely on EFL for its GUI.

My goal with AppImage is to release pre-compiled binaries ready to be run without requiring a build environment. After laborious work, I've managed via a GitHub Action to generate AppImages.
However, they fail to run as Elementary (ecore_evas, I guess) fails to create the window:

$ env EINA_LOG_LEVEL=4 ./Eovim-nightly-x86_64.AppImage
[snip]
DBG<85797>:eo ../src/lib/eo/eo.c:1721 efl_class_new() Finished building class 'Efl.Ui.Win_Inlined'
DBG<85797>:eina_module ../src/lib/eina/eina_module.c:284 eina_module_new() m=0x559d5cb14640, file=/tmp/.mount_Eovim-DjdYeL/usr/lib/x86_64-linux-gnu/ecore_evas/engines/x/v-1.23/module.so
DBG<85797>:eina_module ../src/lib/eina/eina_module.c:312 eina_module_load() m=0x559d5cb14640, handle=(nil), file=/tmp/.mount_Eovim-DjdYeL/usr/lib/x86_64-linux-gnu/ecore_evas/engines/x/v-1.23/module.so, refs=0
DBG<85797>:eina_module ../src/lib/eina/eina_module.c:346 eina_module_load() successfully loaded /tmp/.mount_Eovim-DjdYeL/usr/lib/x86_64-linux-gnu/ecore_evas/engines/x/v-1.23/module.so
DBG<85797>:eina_module ../src/lib/eina/eina_module.c:350 eina_module_load() ref 1
ERR<85797>:ecore_evas ../src/lib/elementary/efl_ui_win.c:5523 _elm_win_finalize_internal() Cannot create window.
ERR<85797>:eo ../src/lib/eo/eo.c:1008 _efl_add_internal_end() Object of class 'Efl.Ui.Win_Legacy' - Not all of the object constructors have been executed.
DBG<85797>:eo ../src/lib/eo/eo_base_class.c:2235 _efl_object_destructor() 0x400000006782 - Efl.Ui.Win_Legacy.
ERR<85797>:evas_main ../src/lib/evas/canvas/evas_object_smart.c:738 _efl_canvas_group_efl_object_destructor() efl_canvas_group_del() was not called on this object: 0x400000006782 (Efl.Ui.Win_Legacy)
DBG<85797>:eo ../src/lib/eo/eo.c:1961 efl_unref() obj_id is NULL. Possibly unintended access?
DBG<85797>:eo ../src/lib/eo/eo_base_class.c:2235 _efl_object_destructor() 0x400000006b83 - Efl.Ui.Focus.Parent_Provider_Standard.
ERR<85797>:ecore_evas ../src/lib/elementary/efl_ui_win.c:6148 elm_win_autodel_set() No widget data for object (nil) ((null))
[snip]

I'm using EFL 1.23.3 (as packaged by Ubuntu) to build the AppImage... this is because I found easier to build AppImage from the Ubuntu APT repositories.
When building locally (without AppImage) with EFL 1.23.3, Eovim works fine (as expected) on my laptop.

I tried to investigate with gdb, but I find it quite difficult, because I'm forced to go through the APT repository, and I failed to make gdb use the debug symbols. Here is what I found, based on exported symbols and disas:

  1. ecore_evas_software_x11_new_internal() is called
  2. rmethod = evas_render_method_lookup("software_x11"); is called
  3. In evas_render_method_lookup(), em = evas_module_find_type(EVAS_MODULE_TYPE_ENGINE, name); returns NULL
  4. this causes evas_render_method_lookup() to return RENDER_METHOD_INVALID
  5. ecore_evas_software_x11_new_internal() subsequently returns NULL
  6. Elementary says it failed to create the window...

I'm kinda blocked here because I haven't yet managed to use debug symbols to inspect what evas_module_find_type() is doing.

If you are interested in reproducing the problem, an AppImage is available here: https://github.com/jeanguyomarch/eovim/actions/runs/182989969. You need to:

  • download the Artifact named Eovim-Snapshot
  • unzip it
  • chmod u+x Eovim-nightly-x86_64.AppImage
  • and run Eovim-nightly-x86_64.AppImage