Linux GTK/WebKit "Nothing Renders" Checklist
Operational Diagnostic Guide
Operational Diag Guide⚓︎
- An
Operational Diagnostic Guidefor troubleshooting instances where GTK/WebKit-based applications (e.g., Remarkable, Devhelp, Yelp, GNOME Help) launch successfully but render a completely blank content pane.
⚡ Quick Triage (The 2-Minute Version)⚓︎
Quick Triage
- Before executing the full diagnostic tree, run these four commands to immediately isolate the root cause.
🔍 Immediate Indicator Matrix⚓︎
| Diagnostic Signal | Identified Subsystem | Immediate Action |
|---|---|---|
pkill resolves issue |
Stale Render Process | Document incident; restart application. |
fc-match fails/hangs |
Font Config Subsystem | Proceed directly to Step 5 (Cache Reset). |
coredumpctl shows fresh logs |
WebKit Core Crash | Proceed to Step 2 (Crash Analysis). |
LIBGL variable resolves issue |
GPU / Mesa Driver | Proceed to Step 6 (Hardware Isolation). |
Core Diagnostic Rule
If multiple WebKitGTK applications suddenly render blank content simultaneously, suspect the shared WebKit rendering stack before troubleshooting the individual applications.
🎮 Cross-Hardware Graphics Triage⚓︎
Cross-Hardware Graphics Triage
When an application works under LIBGL_ALWAYS_SOFTWARE=1, the issue lies within your hardware acceleration pipeline. Select your active GPU architecture below to run targeted environment overrides before resorting to full software fallback.
Because you are running an AMD Radeon RX 580 via the open-source Mesa drivers, rendering issues are often caused by WebKit fighting with hardware acceleration, WebGL, or driver compilation layers.
- Disable GPU Sandboxing (WebKit Flag)
Use Case: WebKit's security sandbox often clashes with AMD driver memory allocation. If this works, the issue is sandboxing, not your GPU. - Bypass Driver Shaders (Mesa Toggles)
Use Case: Disables specific hardware-level optimization steps in the AMD driver to see if a driver bug is misdrawing the app window. - Disable Compositing Mode
Use Case: Forces WebKit to draw the window layout using standard rendering instead of hardware acceleration, bypassing deep driver layers entirely.
The proprietary Nvidia driver stack utilizes a completely different rendering path than Mesa. WebKit failures here usually relate to GLX contexts, thread management, or power-saving states.
- Force Legacy GLX Indirect Rendering
Use Case: Bypasses Nvidia's direct rendering infrastructure if there is a context mismatch between GTK and the display server. - Disable Threaded Optimizations
Use Case: Resolves timing-related race conditions where WebKit threads collapse while communicating with the Nvidia binary driver. - Force WebKit WebGL Disabling
Use Case: Fixes blank screens on Nvidia setups caused by broken DMA-BUF memory sharing protocols between the GPU and WebKit processes.
Intel graphics rely heavily on the modern iris driver within Mesa. Under production stress, it can experience severe rendering sync drops or memory caching faults.
- Force Older Intel Driver Generation
Use Case: Forces the system to fall back from the modern Iris driver to the mature, stable legacy i965 driver path. - Disable Performance Cache Compilations
Use Case: Instructs the Intel driver to bypass the internal shader cache, clearing up pipeline errors caused by corrupted system shader trees.
📋 Comprehensive Diagnostic Steps⚓︎
Step 0 — Isolate Scope⚓︎
Isolate Scope
Determine if the rendering failure is isolated or system-wide by testing at least two independent WebKit applications (e.g., remarkable and devhelp).
| Observation | Diagnostic Deductible | Operational Focus |
|---|---|---|
| One application broken | App-Specific Configuration Error | Check local app configs, dotfiles, or extensions. |
| Both applications broken | Shared Stack Corruption | Target shared libraries (WebKit, GTK, Fonts, GPU). |
Step 1 — Check for WebKit Crashes⚓︎
Check for Webkit Crashes
Inspect the system core dump manager to verify if the underlying WebKit process is actively terminating.
Analysis of Outputs
If fresh entries are populated in the list, extract the specific crash metadata using the Process ID (PID):
* Critical Signal to Look For:
Signal: 6 (ABRT) or any explicit WebKitWebProcess failure tracking.* Verdict: If present, the WebKit engine itself is unstable. Proceed to package integrity validation.
Step 2 — Trace Terminal Standard Outputs⚓︎
Trace Terminal Standard Outputs
Launch the affected application directly from an active terminal session to capture real-time stdout and stderr diagnostic streams.
Error Signature Branching
- Signature:
Segmentation fault
👉 Verdict: Memory corruption or binary incompatibility. Skip rendering checks; review system memory or package versions. - Signature: References to
GLib,WebKit, orJavaScriptCore
👉 Verdict: Broken rendering stack. Proceed with the checklist sequentially.
Step 3 — Terminate Stale WebKit Renderers⚓︎
Terminate Stale WebKit Renderers
Stale background rendering processes can lock shared resources and prevent new instances from drawing GUI surfaces.
Validation
Relaunch the target application. If the interface renders correctly, a stale or orphaned renderer state was blocking execution.
Step 4 — Verify Font Subsystem Integrity⚓︎
Verify Font Subsystem Integrity
A corrupted, missing, or hanging system font configuration can completely block text-heavy WebKit canvas initialization.
Output Evaluation
- Positive Indicators: Clean, instant stdout mapping to local fonts (e.g.,
Noto Sans,DejaVu). - Negative Indicators: Missing output, explicitly logged errors, or a terminal hang. Proceed immediately to Step 5.
Step 5 — Rebuild Font Subsystem Caches⚓︎
Rebuild Font Subsystem Caches
Force a complete purge and regeneration of the font configuration binaries. Execute this if Step 4 yielded any anomalies.
Post-Execution Action
Relaunch your WebKit applications to verify if the fresh font map resolves the rendering block.
Step 6 — Isolate GPU and Mesa Driver Conflicts⚓︎
Isolate GPU and Mesa Driver Conflicts
Determine if hardware acceleration or the graphics driver stack is causing rendering failures by forcing a pure software rendering fallback.
Deductible Outcomes
- Resolved: A direct incompatibility exists between the user-space driver, kernel GPU module, and WebKit's hardware pipeline. Move to the Cross-Hardware Graphics Triage section to find an architectural workaround.
- Unchanged: The hardware acceleration pipeline is highly unlikely to be the root cause.
Step 7 — Validate Package Integrity⚓︎
Validate Package Integrity
Verify that the shared WebKit libraries and components are complete, uncorrupted, and synchronized via pacman.
Verify versions
Verify file hashes and permissions
Package Discrepancies
Look closely for warnings concerning Missing files, Modified files, or Partial upgrades. If any are found, force-reinstall the packages:
Step 8 — Query System Logs for Component Failures⚓︎
Query System Logs for Component Failures
Filter user and system journals specifically for WebKit engine events generated during the current boot cycle.
Log Analysis
This step regularly surfaces hidden segmentation faults, pointer errors, or system library linkage omissions not printed to the application's standard terminal output.
Step 9 — Isolate Local User Profile Corruption⚓︎
Isolate Local User Profile Corruption
Determine if the root cause resides within user configuration directories (~/.config, ~/.local) or is a persistent system-wide fault.
Test Protocol
- Log out of your desktop environment.
- Log in as the newly created
testwebkituser profile. - Execute
devhelpfrom a terminal window.
| Result Profile | Root Cause Domain |
|---|---|
| Interface Renders Successfully | Dotfile/Cache corruption within your primary home directory. |
| Interface Remains Blank | System-wide package, library, or hardware driver failure. |
Step 10 — Nuclear User Cache Reset⚓︎
Nuclear User Cache Reset
If Step 9 proved the issue is isolated to your primary user profile, execute a complete clearance of local transient caches.
Precautionary Step
Ensure all work is saved. Log completely out of your desktop session, then log back in to force all background user processes to re-initialize clean caches.
📝 Incident Data Collection Protocol⚓︎
Incident Data Collection Protocol
When anomalous rendering behaviors occur, immediately dump the system state metrics. Preserving this timeline context prevents trial-and-error debugging later.
Capture operational snapshot
Extract the recent delta of the system log
Lessons Learned Notebook
Always record the exact packages updated in the transaction preceding a WebKit crash event. Correlating package rollouts to application behavior reduces diagnostic mazes into predictable, 2-minute resolutions.
REMARKABLE SCROLL FIX — SUMMARY⚓︎
What we did
- Confirmed you use jamiemcg/Remarkable (GTK, v1.95-3 from AUR), not the JS library
- Backed up the original file: ~/RemarkableWindow.py.orig
- Took the scrolling fix (only) from GitHub issue #434 — preview now follows your cursor to the line you're editing instead of jumping to the top
- Built it into a script: ~/Downloads/remarkablescroll/make_scroll_only.py
- Tested it in a throwaway copy (~/remarkable-test) before touching anything real
- Installed it into the real app, so your normal icon/double-click already uses it
What's on your system now:
- ~/RemarkableWindow.py.orig — untouched original, keep this!
- ~/RemarkableWindow.py.scroll — the patched version, currently installed
- ~/Downloads/remarkablescroll/make_scroll_only.py — the script that builds it
- ~/remarkable-test/ — the test copy, safe to delete anytime
If an update ever overwrites the fix.
If a Remarkable package update ever overwrites the fix, reapply it with:
python3 ~/Downloads/remarkablescroll/make_scroll_only.py ~/RemarkableWindow.py.orig ~/RemarkableWindow.py.scroll
NOTE
This only works cleanly if the update is still version 1.95. If it's a newer version, the surrounding code may have changed and the script's edits might not match — bring it back to me and I'll check.
Not fixed: the whole preview still re-renders on every change, so very long chapters may still feel a bit heavy, just no longer disorienting.