We often compare installing a binary on an open system versus a closed system. On Linux, the journey is more demanding but allows better control over risks. On Windows, installation is simpler, but risk control is limited. Installing Google Earth Pro on openSUSE Tumbleweed becomes the start of a methodical investigation — from the first crash to a stable solution.
Background
Google Earth Pro remains a popular tool: satellite imagery, measurements, 3D views, historical data. On Linux, Google still distributes it as a self-contained .rpm (or .deb) package. The catch: this package is frozen on libraries from another era — a Qt 5.5Graphics library released in 2015. Google Earth ships it internally, ignoring modern system versions (Qt 5.15 or Qt 6). from 2015 and a long‑end‑of‑life OpenSSL 1.0Cryptographic library past its end of life. Current distributions have moved to OpenSSL 3.x, whose binary interface is incompatible..
On a conservative stable distributionSlow release cycle, prioritising reliability and extensive testing over the newest versions., it works. But on an up‑to‑date rolling releaseContinuous update model where software ships as soon as it's ready, without fixed major releases. like openSUSE Tumbleweed, hardened with SELinux enforcingMode where SELinux actively enforces security policies and blocks unauthorised actions. and a WaylandModern display protocol replacing X11. Older X11‑only applications run via a compatibility layer, XWayland. session, the mismatch becomes glaring: the package installs, but the application refuses to open.
google-earth-pro-stable 7.3.7. This "hardened + up‑to‑date" context is precisely what triggers the failures.
Starting point: a click, then nothing
First reflex after installation: click the icon. Nothing opens. No window, no message. When a graphical application stays silent, the golden rule is to launch it from a terminalText interface allowing you to run commands and see raw error messages from applications. — that's where the real error messages appear.
/opt/google/earth/pro/googleearth-bin
Copied
And there, the first clue drops. The journey begins.
First roadblock — executable stackMemory stack marked as executable, a risky practice that hardened systems reject by default. denied
libcrypto.so.1.0.0: cannot enable executable stack
as shared object requires: Permission denied
Copied
Translation: the bundled old libraryReusable code file (.so on Linux) that programs load to work. libcrypto demands an executable stack, and the system refuses. Rather than guess, we ask SELinux what it blocked:
sudo ausearch -m avc -ts recent | grep execstack
# avc: denied { execstack } for comm="googleearth-bin" ... permissive=0
Copied
The verdict is clear: an AVC"Access Vector Cache" — the SELinux log line that precisely indicates which action was denied, by which process and on which resource. denied { execstack } in permissive=0 (so actually blocked). Before fixing, one question: is this the only offending library? We scan all binaries in the folder for the executable stack flag (RWE) using the command for f in; do readelf ; grep -qShell loop combining readelf (ELF header reader) and grep (quiet search) to inspect multiple files.:
for f in /opt/google/earth/pro/lib*.so*; do
readelf -l "$f" 2>/dev/null | grep -q 'GNU_STACK.*RWE' && echo "$f"
done
# -> /opt/google/earth/pro/libcrypto.so.1.0.0
Copied
Only one. The problem is contained — no need for a sledgehammer to crack a nut.
The right door (and the wrong one)
🚫 The tempting shortcut
Faced with this crash, taking a shortcut is tempting. Imagine a giant switch that would turn off all the security cameras in your building, just so you could open your closet door without being filmed. That's exactly what the easy (but bad) solution offers:
setsebool -P selinuxuser_execstack on
This command tells SELinux: "Allow all my programs to execute code from the memory stack". Suddenly Google Earth runs, but you've just opened a highway to any virus or malicious processAn instance of a running program, with its own memory and resources. that passes by. Avoid at all costs.
🧑⚕️ The surgical approach
Instead of weakening the whole organism, we operate on a single cell: the libcrypto.so file that causes the problem. We don't touch global security — we just remove a small "flag" PF_X attached to this specific library.
⚠️ Why SELinux blocks
This flag tells the Linux kernel: "This library reserves the right to execute code from the stack memory area".
If the kernel sees this PF_X flag enabled, it is forced to disable this protection for the whole process, because the code promised it would need it. However, Google Earth runs in a strict SELinux environment. Seeing this executable‑stack request, SELinux says "No compromise" and kills the application. Hence our crash.
✅ Security preserved
Removing this flag modifies no code of the library. We just erase the label. We tell the kernel: "Rest assured, this library doesn't really need to execute its stack — it's a compilation leftover, an old habit of the developers". In 99 % of cases, it's true: libcrypto.so runs perfectly without this permission. By removing it, SELinux stops alarming, the NX protection remains active, and the machine stays protected. We won the battle without sacrificing the security war.
Python script — the home‑made tool
On classic distributions, one would use the execstack tool to clean this flag. But on openSUSE Tumbleweed, this tool is no longer maintained and is not packagedAvailable in the official distribution repositories, ready to install via the package manager..
Good news: we can do without it. To remove this flag, we only need a tiny Python script. No external package to look for, no dependencies to add: Python is already installed on your system.
The script to copy
Here is this little home‑made tool. Copy this code into a file (e.g. fix_stack.py) and run it with python3 fix_stack.py:
#!/usr/bin/env python3
import struct
f = "/opt/google/earth/pro/libcrypto.so.1.0.0"
d = bytearray(open(f, "rb").read())
phoff = struct.unpack_from("<Q", d, 0x20)[0]
phentsize = struct.unpack_from("<H", d, 0x36)[0]
phnum = struct.unpack_from("<H", d, 0x38)[0]
for i in range(phnum):
o = phoff + i * phentsize
if struct.unpack_from("<I", d, o)[0] == 0x6474E551: # PT_GNU_STACK
fl = struct.unpack_from("<I", d, o + 4)[0]
struct.pack_into("<I", d, o + 4, fl & ~0x1) # remove PF_X
open(f, "wb").write(d); print("PF_X removed"); break
Copied
🛠️ Backup and verification
Let's get to work. Before any change, we back up the file:
sudo cp -a /opt/google/earth/pro/libcrypto.so.1.0.0 \
/opt/google/earth/pro/libcrypto.so.1.0.0.bak
Copied
After the script is run, we confirm the flag is removed (the segment should now show RW, not RWE):
readelf -l /opt/google/earth/pro/libcrypto.so.1.0.0 | grep -A1 GNU_STACK
Copied
🔍 And yet…
We relaunch. The error is gone. Victory?
Second wall — the "signal 6" crash
Google Earth has caught signal 6.
Copied
A signal 6 (SIGABRT)"Abort" signal — the program self‑terminates after detecting a fatal condition, often via an internal assertion. occurs almost instantly. The crash log in ~/.googleearth/crashlogs/ points to QtGraphical framework used to build user interfaces, of which Google Earth embeds a specific version. initialisation:
QGuiApplicationPrivate::createEventDispatcher
-> QMessageLogger::fatal -> abort
Copied
The pluginLoadable module that extends a software's functionality (e.g. the xcb plugin for Qt). xcb of this old Qt crashes during initialisation. Crucial detail: all libraries load correctly — so it's not a missing dependency, but the graphical initialisation itself that fails, probably on the GLXThe layer connecting OpenGL to the X server. The old xcb plugin tries to access it in hardware mode and fails on the modern graphics stack. hardware integration.
By elimination: test, discard, try again
This is where the troubleshooting becomes a real journey. We hypothesise — "it's hardware OpenGL3D rendering accelerated by the GPU (graphics card), fast but sometimes incompatible with older libraries. that's failing" — and we test in steps, noting what fails.
Here are the three commands (or variations) we tested to isolate the culprit, with their real results (tested on openSUSE Tumbleweed, Wayland session):
Option A — The solution (GPU preserved)
QT_QPA_PLATFORM=xcb QT_XCB_GL_INTEGRATION=none /opt/google/earth/pro/googleearth
Result: ✅ Application starts.
What it proves: The crash cause was not hardware OpenGL. Disabling the GL integration of the xcb plugin is enough. The GPU is preserved → smooth 3D.
Option B — The dead end
QT_QUICK_BACKEND=software QT_XCB_GL_INTEGRATION=none /opt/google/earth/pro/googleearth
Result: ❌ Fails (signal 6).
Why: The bundled Qt 5.5 contains no Wayland plugin (only libqxcb, libqminimal, libqoffscreen and libqlinuxfb are present in plugins/platforms/). Without QT_QPA_PLATFORM=xcb, platform initialisation fails. B's crashlog stops exactly at the same point as the original crash (createEventDispatcher).
Option C — Fallback (software rendering)
QT_QPA_PLATFORM=xcb QT_XCB_GL_INTEGRATION=none LIBGL_ALWAYS_SOFTWARE=1 /opt/google/earth/pro/googleearth
Result: ✅ Application starts.
Status: Works but forces software rendering (llvmpipe). Reserve this if option A fails on a specific driver, because it needlessly sacrifices GPU performance.
The winning combination is therefore option A: it isolates the exact breaking point — the OpenGL integration of the xcb plugin — and bypasses it without touching GPU performance.
QT_QPA_PLATFORM=xcb QT_XCB_GL_INTEGRATION=none /opt/google/earth/pro/googleearth
Copied
The permanent solution
Typing this variable each time isn't sustainable. So we confine the fix to Google Earth using user‑level files (which survive package updates).
A wrapper in ~/.local/bin
Placed at the head of your PATH, it intercepts terminal launches:
cat > ~/.local/bin/google-earth-pro <<'EOF'
#!/bin/sh
# The crash came from the GL integration of the xcb plugin (Qt 5.5), NOT from the GPU.
# Fix retained (option A, tested 2026-06-20): force xcb platform + disable
# the plugin's GL integration. GPU acceleration is CONSERVED (smooth 3D).
# Fallback if A fails on a specific driver: uncomment the line below to
# force software rendering (LIBGL_ALWAYS_SOFTWARE=1).
export QT_QPA_PLATFORM=xcb
export QT_XCB_GL_INTEGRATION=none
# export LIBGL_ALWAYS_SOFTWARE=1 # uncomment for software fallback
exec /opt/google/earth/pro/googleearth "$@"
EOF
chmod +x ~/.local/bin/google-earth-pro
Copied
A user menu entry
So that launching from the menu applies the same variables, we create a user shortcut that calls the wrapper (replace USER with your username):
cat > ~/.local/share/applications/google-earth-pro.desktop <<'EOF'
[Desktop Entry]
Version=1.0
Name=Google Earth Pro
Comment=Explore, search and discover the planet
Exec=/home/USER/.local/bin/google-earth-pro %f
Terminal=false
Icon=google-earth-pro
Type=Application
Categories=Application;Network;
EOF
update-desktop-database ~/.local/share/applications
Copied
Terminal or menu: the workaround now applies automatically.
The journey at a glance
| Step | Symptom | Cause | Fix |
|---|---|---|---|
| Installation | Dependency mesa-libGLU not found | Package name inherited from Fedora | opi mesa |
| Obstacle 1 | cannot enable | Bundled libcrypto rejected by SELinux | Remove the PF_X flag |
| Obstacle 2 | caught signal 6 | GL integration of the xcb plugin (Qt 5.5) | QT_QPA_PLATFORM=xcb + QT_XCB_GL_INTEGRATION=none |
| Permanence | Variables to retype | Unscripted launch | Wrapper + menu entry |
Conclusion: troubleshooting method and the state of the binary
Beyond Google Earth, this journey illustrates a methodology that applies to any bug:
Make the error visible
Launch from a terminal instead of suffering a silent failure.
Question the source
Use SELinux (ausearch) and the crash log instead of guessing.
Contain
Check the real scope of the problem (only one library?) before fixing.
Test by elimination
Advance hypothesis by hypothesis, keep what works.
Fix as precisely as possible
Prefer a targeted fix to a global switch that weakens the whole system.
Verify the fix
Validate in terminal and graphically.
Start with the lightest solution
Don't add extra layers (e.g. software rendering) if the simple fix already works with the GPU.
google-earth-pro 7.3.7 binary (64‑bit RPM)
The package is effectively on minimal maintenance. It ships its own copy of Qt 5.5 (2015) and OpenSSL 1.0 (EOL), via an RPATHLibrary search path hard‑coded in the binary, forcing it to load its internal libs before system ones. that freezes it in the past. Packaged for Fedora/LSB, it assumes — executable stack allowed, hardware OpenGL via X11 — that modern hardened distributions reject by default. Consequence: on a rolling release, you will always be patching a gap. That's the price of proprietary software that its vendor is now pushing toward its web version.
The lesson goes beyond Google Earth: a proprietary binary frozen to a point‑in‑time system ages poorly against an OS that keeps moving forward. The workaround presented here (option A) is clean, reversible, confined and preserves hardware acceleration — exactly what you want from a fix on a machine you intend to keep both safe and performant.
Sources and references
Documentation and discussions
Discussion about Google Earth launch issues on openSUSE.
Official download page for Google Earth Pro versions.
Official manual page explaining the `-c` flag and the `PF_X` flag you manipulate with your Python script.
Official Qt documentation explaining `QT_QPA_PLATFORM` and why forcing `xcb` is relevant.
Recommended Reading SafeITExperts
If you enjoyed this troubleshooting story, these articles extend the reflection on Linux, openSUSE and problem‑solving:
The method to diagnose without making things worse — the mindset behind this article.
Another concrete openSUSE bug dissected step by step.
When repositories and infrastructure of a distribution begin to falter.
