Tag: Flatpak

  • Android Studio Flatpak light/dark theme automatic change bug fix

    It is nice to have the desktop automatically change its theme from light to dark at sunset. Most applications work by default without further action in Fedora Kinoite. However Android Studio despite supporting light & dark themes for ages did not offer the option to automatically change the theme in Linux until very recently.

    After enabling the “Sync with OS” setting unfortunately nothing happened. Not even a restart of the application changed the theme. Guess Linux is still Linux where everything needs a bit of dedication to properly work.

    So digging into the topic it is (what else!) a Flatpak permissions issue. The dbus communication is not going through between the system and the application. After enabling the permissions I managed to get Android Studio to read the current theme on launch. But this was just a dead end as the automatic switching was still not working, I had to restart Android Studio to pick the switched theme which was not great for the workflow.

    After some time scouting sources of both Android Studio (really IntelliJ IDEA by JetBrains) and the application’s Flathub repo, the culprit was found. Android Studio itself is working fine as on a non-atomic system not using the Flatpak version there is no problem. The issue was in the Flatpak’s environment that missed a specific component, namely dbus-tools. Inside this module the command dbus-monitor is found and this is missing from the current Flathub build.

    The dbus-monitor is used to do exactly as its name states, it monitors the dbus for changes (signals) and this is what Android Studio uses to get the “color-scheme” parameter from the system. If this command cannot be executed it just dies silently and automatic theme change will not work. In a non-atomic system dbus-tools is part of the core system but Flatpaks run in a bare-bones environment and in this case the module is not included.

    To confirm this hypothesis I created my own Flatpak including dbus-tools:

    {
      "name": "dbus-tools",
      "buildsystem": "meson",
      "config-opts": [
        "-Dtools=true",
        "-Dmessage_bus=false",
        "-Dsystemd=disabled",
        "-Dx11_autolaunch=disabled"
      ],
      "sources": [
        {
          "type": "archive",
          "url": "https://dbus.freedesktop.org/releases/dbus/dbus-1.16.2.tar.xz",
          "sha256": "0ba2a1a4b16afe7bceb2c07e9ce99a8c2c3508e5dec290dbb643384bd6beb7e2"
        }
      ]
    },
    ...

    There are a few more tweaks that are not relevant for the case in question but are just to get the Flatpak built with less overhead:

    $ cat com.google.AndroidStudio.Test.json 
    {
      "id": "com.google.AndroidStudio.Test",
      "runtime": "org.freedesktop.Sdk",
      "runtime-version": "25.08",
      "sdk": "org.freedesktop.Sdk",
      "command": "android-studio-wrapper",
      "finish-args": [
        "--socket=x11",
        "--socket=pulseaudio",
        "--socket=ssh-auth",
        "--socket=gpg-agent",
        "--share=ipc",
        "--share=network",
        "--device=all",
        "--filesystem=home",
        "--allow=multiarch",
        "--env=JAVA_HOME=/app/extra/jbr",
        "--talk-name=org.freedesktop.Notifications",
        "--talk-name=org.freedesktop.secrets"
      ],
      "modules": [
        {
          "name": "dbus-tools",
          "buildsystem": "meson",
          "config-opts": [
            "-Dtools=true",
            "-Dmessage_bus=false",
    	"-Dsystemd=disabled",
            "-Dx11_autolaunch=disabled"
          ],
          "sources": [
            {
              "type": "archive",
              "url": "https://dbus.freedesktop.org/releases/dbus/dbus-1.16.2.tar.xz",
              "sha256": "0ba2a1a4b16afe7bceb2c07e9ce99a8c2c3508e5dec290dbb643384bd6beb7e2"
            }
          ]
        },
        {
          "name": "android-studio",
          "buildsystem": "simple",
          "build-commands": [
            "install -D -t ${FLATPAK_DEST}/bin/ apply_extra android-studio-wrapper",
            "echo '[Desktop Entry]' > test.desktop",
            "echo 'Type=Application' >> test.desktop",
            "echo 'Name=Android Studio Test' >> test.desktop",
            "echo 'Exec=android-studio-wrapper' >> test.desktop",
            "echo 'Icon=com.google.AndroidStudio.Test' >> test.desktop",
            "echo 'Categories=Development;IDE;' >> test.desktop",
            "install -Dm644 test.desktop ${FLATPAK_DEST}/share/applications/${FLATPAK_ID}.desktop",
            "echo '<?xml version=\"1.0\" encoding=\"UTF-8\"?>' > test.metainfo.xml",
            "echo '<component type=\"desktop-application\">' >> test.metainfo.xml",
            "echo '  <id>com.google.AndroidStudio.Test</id>' >> test.metainfo.xml",
            "echo '  <metadata_license>CC0-1.0</metadata_license>' >> test.metainfo.xml",
            "echo '  <project_license>Apache-2.0</project_license>' >> test.metainfo.xml",
            "echo '  <name>Android Studio Test</name>' >> test.metainfo.xml",
            "echo '  <summary>Test Build</summary>' >> test.metainfo.xml",
            "echo '  <description><p>Testing theme switching configuration.</p></description>' >> test.metainfo.xml",
            "echo '  <launchable type=\"desktop-id\">com.google.AndroidStudio.Test.desktop</launchable>' >> test.metainfo.xml",
            "echo '</component>' >> test.metainfo.xml",
            "install -Dm644 test.metainfo.xml ${FLATPAK_DEST}/share/metainfo/${FLATPAK_ID}.metainfo.xml",
            "echo \"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'><rect width='10' height='10' fill='purple'/></svg>\" > test.svg",
            "install -Dm644 test.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/${FLATPAK_ID}.svg"
          ],
          "sources": [
            {
              "type": "extra-data",
              "filename": "android-studio.tar.gz",
              "size": 1541218005,
              "only-arches": [
                "x86_64"
              ],
              "url": "https://dl.google.com/dl/android/studio/ide-zips/2026.1.2.10/android-studio-quail2-linux.tar.gz",
              "sha256": "64445a54092e7056c6eb7f1a89ad116d0feec2ef5f965b8e594d62abdb58590f"
            },
            {
              "type": "script",
              "dest-filename": "apply_extra",
              "commands": [
                "tar xzf android-studio.tar.gz --strip-components=1",
                "rm -f android-studio.tar.gz"
              ]
            },
            {
              "type": "script",
              "dest-filename": "android-studio-wrapper",
              "commands": [
                "/app/extra/bin/studio $@"
              ]
            }
          ]
        }
      ]
    }
    

    Then you install flatpak-builder, build your custom Flatpak and when finalised you can test it out:

    $ sudo dnf -y install flatpak-builder git
    $ flatpak-builder --user --install --force-clean --disable-rofiles-fuse build-dir com.google.AndroidStudio.Test.json
    $ flatpak run --command=dbus-monitor com.google.AndroidStudio.Test
    

    If the last command displays content it means dbus-monitor is now part of your Flatpak’s environment and you can safely launch the full appplication:

    $ flatpak run com.google.AndroidStudio.Test

    I ran all inside a toolbx so that I can get rid of it again easily. Also it should not affect your existing Flathub Android Studio installation, it is a completely parallel Flatpak (com.google.AndroidStudio.Test).

    Now the best moment comes, going into Settings>Appearance and enabling “Sync with OS“. Immediately Android Studio should change its theme to the system one. An easy way to change your theme if you have sunrise & sunset as triggers, is to simply change your location in the KDE Plasma settings e.g. to the other side of the planet, then you can quickly revert back and forth.

    As this is only a personal solution I have also created an issue at the Flathub repo so hopefully we will soon see this Android Studio Flatpak correctly switching light to dark themes and viceversa automatically for everyone.

  • Google Earth – Another instance of this application is already running

    Being unable to launch Google Earth Pro because it thinks it is already running seems to be happening frequently for me. I am using the Flatpak version if it matters.

    Despite killing the application there is still a lock file lingering preventing Google Earth Pro to launch. The error message is specifically:

    Google Earth
    Another instance of this application is already running.

    To launch Google Earth again you need to delete this stale lock file which is inside your user directory:

    rm -v $HOME/.var/app/com.google.EarthPro/.googleearth/instance-running-lock

    Once gone Google Earth Pro will run again without complaining.

  • Fedora Thunderbird Flatpak wrong file association

    I struggled for a while with jpg image files not properly opening with the “System Handler” in Thunderbird. Despite changing the file association setting back to “Always ask” to reset it, the wrong application opened the images.

    Usually one would just select another application in the list of applications but since it is a Flatpak the sandbox restricts access and none where displaying.

    Fiddling around I deleted the second order in the chain where Thunderbird Flatpak searches for the right application to open (after the handlers.json):

    rm ~/.var/app/net.thunderbird.Thunderbird/config/mimeapps.list

    After a restart the “System Handler” finally opened up the correct application as it was using the third level in the lookup chain, the XDG Desktop Portal, which gracefully forwarded the request to Loupe in this case.

  • Toolbx mount access from host on Fedora Kinoite

    Since Toolbx mounts are running in different namespaces than the host, the mounts cannot be accessed from the latter. I tried many workarounds to see if it really was possible to get around this limit. After some time I decided that using the network stack was probably a better solution to communicate between Toolbx and host.

    In my particular case I never do any layering but instead try to use Flatpak, Toolbx, or even a Boxes virtual machine for any specific software not included in the base layering.

    I needed to run restic to access some documents on a remote restic repo backup. Since restic is not included I had to use Toolbx for this task. Restic uses FUSE to mount the remote end on the local system. In an ideal world I could just have opened this mount in Dolphin to search and open the needed documents. However due to the namespaces difference this mount just shows empty on the host.

    A really quick and dirty solution is to simply use rclone and its webdav option, then Dolphin just opens the webdav address with no issues. Yes, there is a tiny performance hit, but the speed and easy execution greatly makes up for this:

    restic mount ~/remote-restic

    Now that the mount is working from Toolbx itself run rclone to serve it over the network:

    rclone serve webdav ~/remote-restic --addr :8080 -L

    That is all! Now simply open Dolphin and paste the webdav address and there you have your Toolbx mount visible from the host:

    dav://127.0.0.1:8080

    Please note that this is not only for restic but can be used with any mount type like sshfs or even another rclone mount like S3.

    Is it not ironic… using a 1990s protocol (WebDAV) to solve a 2026 container problem!

  • Fedora Thunderbird flatpak crashes attaching or saving a file

    The latest flatpak version of Thunderbird from Fedora (not Flathub):

    Commit: 936d9f60ac420057270d5c0c26b3383b04177b678afd6f6e7b7b59df3f0e6663
    Subject: Export net.thunderbird.Thunderbird
    Date: 2025-10-12 19:21:33 +0000

    Crashes when trying to attach a file or save an attachment:

    [Parent 3, Main Thread] WARNING: Could not load a pixbuf from icon theme.
    This may indicate that pixbuf loaders or the mime database could not be found.: 'glib warning', file /builddir/build/BUILD/thunderbird-140.3.0-build/thunderbird-140.3.0/toolkit/xre/nsSigHandlers.cpp:201
    
    (net.thunderbird.Thunderbird:3): Gtk-WARNING **: 12:25:17.580: Could not load a pixbuf from icon theme.
    This may indicate that pixbuf loaders or the mime database could not be found.
    **
    Gtk:ERROR:../gtk/gtkiconhelper.c:495:ensure_surface_for_gicon: assertion failed (error == NULL): Failed to load /run/host/share/icons/breeze/status/16/image-missing.svg: Failed to create file “~/.var/app/net.thunderbird.Thunderbird/cache/tmp/gdk-pixbuf-glycin-tmp.KSAZE3”: No such file or directory (g-file-error-quark, 4)
    Bail out! Gtk:ERROR:../gtk/gtkiconhelper.c:495:ensure_surface_for_gicon: assertion failed (error == NULL): Failed to load /run/host/share/icons/breeze/status/16/image-missing.svg: Failed to create file “~/.var/app/net.thunderbird.Thunderbird/cache/tmp/gdk-pixbuf-glycin-tmp.KSAZE3”: No such file or directory (g-file-error-quark, 4)
    Redirecting call to abort() to mozalloc_abort
    
    Exiting due to channel error.
    Segmentation fault         (core dumped) thunderbird
    [📦 net.thunderbird.Thunderbird ~]$ exit
    exit

    There is already a Bugzilla entry but until it is solved you can simply remove the TMPDIR environment variable:

    flatpak override --user --unset-env=TMPDIR net.thunderbird.Thunderbird

    To check that it has been done:

    cat ~/.local/share/flatpak/overrides/net.thunderbird.Thunderbird
    [Environment]
    TMPDIR=
    
    [Context]
    unset-environment=TMPDIR; 

    Now just run Thunderbird as usual and it will again allow to save and attach files.

    To later remove the override once Fedora has fixed the bug just run:

    flatpak override --user --reset net.thunderbird.Thunderbird