Help with Ubuntu Studio System Installer

Hi Desktop Team!

Despite the updates to mesa, ubuntustudio-system-installer is still suffering from a dark window (as opposed to a light window due to theming). I filed a tracking bug to hopefully get to the bottom of it.

Ubuntu Studio might be more difficult since it’s a KDE Plasma Desktop as opposed to Edubuntu which isn’t far removed from Ubuntu Desktop at all (uses GNOME, Yaru, etc.). I’ll be filing a separate discussion on that.

Let me know what you need from me. The terminal output is in the bug, but here’s a screenshot if you need it:



After Seb figured out the original bug was fixed in Mesa 23.3.3, we stopped investigating it. My best guess is that this series of changes was the problem, and the solution. Because the other changes in Mesa 23.3.[123] are platform-specific and when debugging the original bug it did seem to be to do with not finding a compatible GLX fbconfig. Maybe we have toolkits trying to use the now deleted GLX_OML_swap_method?


So, the biggest problem was a change in snapcraft and the workaround for now is to build using snapcraft 7.x/stable. It’s not ideal, but it works for now.

The big problem I’m getting now is this as it’s unable to do any sort of geolocation and erroring-out after selecting “Erase disk and install” when clicking on “Install”:

flutter: ERROR ubuntustudio-system-installer: Unhandled exception
        StateError: Bad state: GetIt: Object/factory with type GeoService is not registered inside GetIt. 
(Did you accidentally do GetIt sl=GetIt.instance(); instead of GetIt sl=GetIt.instance;
Did you forget to register it?)
#1 (package:riverpod/src/framework/container.dart:241:0)
#2 (package:flutter_riverpod/src/consumer.dart:623:0)
#3      TimezonePage.load (package:ubuntu_provision/src/timezone/timezone_page.dart:18:0)
#4<anonymous closure> (package:ubuntu_bootstrap/installer/installer_wizard.dart:130:0)
#5      _WizardBuilderState.initState.<anonymous closure>.<anonymous closure> (package:ubuntu_wizard/src/wizard_builder.dart:45:0)
#6      WizardController._loadRoute (package:wizard_router/src/controller.dart:25:0)
#7 (package:wizard_router/src/controller.dart:94:0)
#8<anonymous closure>.<anonymous closure> (package:ubuntu_wizard/src/wizard_button.dart:105:0)
#9      throwIfNot (package:get_it/get_it_impl.dart:12:0)
#10     _GetItImplementation._findFactoryByNameAndType (package:get_it/get_it_impl.dart:397:0)
#11     _GetItImplementation.get (package:get_it/get_it_impl.dart:425:0)
#12 (package:get_it/get_it_impl.dart:465:0)
#13     getService (package:ubuntu_service/src/ubuntu_service.dart:9:0)
#14     timezoneModelProvider.<anonymous closure> (package:ubuntu_provision/src/timezone/timezone_model.dart:13:0)
#15     ChangeNotifierProvider._create (package:flutter_riverpod/src/change_notifier_provider/base.dart:113:0)
#16     ChangeNotifierProviderElement.create.<anonymous closure> (package:flutter_riverpod/src/change_notifier_provider/base.dart:196:0)
#17     Result.guard (package:riverpod/src/result.dart:21:0)
#18     ChangeNotifierProviderElement.create (package:flutter_riverpod/src/change_notifier_provider/base.dart:196:0)
#19 (package:riverpod/src/framework/container.dart:241:0)
#20 (package:flutter_riverpod/src/consumer.dart:623:0)
#21     TimezonePage.load (package:ubuntu_provision/src/timezone/timezone_page.dart:18:0)
#22<anonymous closure> (package:ubuntu_bootstrap/installer/installer_wizard.dart:130:0)
#23     _WizardBuilderState.initState.<anonymous closure>.<anonymous closure> (package:ubuntu_wizard/src/wizard_builder.dart:45:0)
#24     WizardController._loadRoute (package:wizard_router/src/controller.dart:25:0)

flutter: DEBUG subiquity_client: POST http://localhost/meta/mark_configured?endpoint_names=%5B%22network%22%5D
flutter: DEBUG subiquity_client: ==> markConfigured([network]) null
flutter: DEBUG subiquity_client: POST http://localhost/meta/confirm?tty=%22%2Fdev%2Ftty1%22
flutter: INFO subiquity_status: WAITING => ApplicationStatus(state: ApplicationState.NEEDS_CONFIRMATION, confirmingTty: , error: null, cloudInitOk: true, interactive: true, echoSyslogId: subiquity_echo.3036, logSyslogId: subiquity_log.3036, eventSyslogId: subiquity_event.3036)
flutter: DEBUG subiquity_client: ==> confirm(/dev/tty1) null
flutter: INFO subiquity_status: NEEDS_CONFIRMATION => ApplicationStatus(state: ApplicationState.RUNNING, confirmingTty: /dev/tty1, error: null, cloudInitOk: true, interactive: true, echoSyslogId: subiquity_echo.3036, logSyslogId: subiquity_log.3036, eventSyslogId: subiquity_event.3036)

This might be the installer looking for the geolocation API from GNOME Shell and being unable to find it, but I’m not 100% sure.


New tracking bug for the above and bump for this thread

Great news! We now have a working Ubuntu Studio System Installer!

This was a bit trickier than the implementations used by edubuntu-desktop-installer as you can imagine as for the initial screen (Try or Install) I had to make a totally new implementation for the KDE Plasma desktop, but the concept was the same.

However, since Plasma is easily themed, all I had to do was, similar to how Ubuntu and Edubuntu use a gsettings-override to make a theme especially for the live environment, dpkg-divert a settings file so that the new theme was the default theme for the live session, and make sure the theme had a blank panel with the system tray and a clock. Also, the systemd service that launches ubuntustudio-system-installer needed to be able to remove the .desktop file on $HOME/Desktop and put it back if it was closed, so that was easily done. The result is what you see below:

The next screen, though, has the same problem as what I posted about before with the Ubuntu logo being unable to be overridden. Apparently this was an oversight (?) in ubuntu-desktop-provision that should be corrected on the next release, I hope.

Despite that, clicking “Try Ubuntu Studio” results in the return of the icon to the desktop and the panel being changed to the default Ubuntu Studio panel like what you see below. This is accomplished with the command line lookandfeeltool --resetLayout -a org.ubuntustudio-dark.desktop which turned out to be really handy for this purpose.

As you can see from the images below, I’m not quite finished with the Flutter layout for the slideshow yet, but at least we’re off to a good start. Getting over the hurdles of functionality was huge, but now it’s nice that we have a functioning installer.