--- description: >- Chrome 148 on NVIDIA Wayland (Hyprland) — full GPU/video acceleration config. Replaced the 2026-03-11 WebGPU flags with state-of-the-art NVIDIA VA-API setup. tags: [chrome, nvidia, wayland, vaapi, gpu, acceleration] last_updated: '2026-05-21' --- # Chrome 148 — NVIDIA Wayland Hardware Acceleration Date: 2026-05-21 (updated from 2026-03-11) ## Context Chrome on NVIDIA + Wayland has three known issues: 1. **GBM "Permission denied"**: Chrome's seccomp sandbox blocks NVIDIA's `nvidia-drm_gbm.so` on Wayland. 2. **Vulkan/Wayland incompatibility**: `--ozone-platform=wayland` is not compatible with Vulkan rendering (Chromium issue 334275637). 3. **NVIDIA VA-API allowlist**: Hardware video decode is blocked on NVIDIA without explicit flags. The old WebGPU config (`--enable-unsafe-webgpu`, `--enable-vulkan`) is obsolete — WebGPU works natively in Chrome 148 via ANGLE+OpenGL on Wayland without Vulkan flags. ## Required Packages | Package | Reason | |---------|--------| | `libva-utils` | Verification: `vainfo` | | `libva-nvidia-driver` | VA-API NVDEC bridge (already installed, was `nvidia-vaapi-driver`) | Note: `libva-utils` was installed 2026-05-21. `libva-nvidia-driver` (0.0.17-1) was already present. ## Configuration: `~/.config/chrome-flags.conf` ``` --ozone-platform=wayland --disable-seccomp-filter-sandbox --disable-features=Vulkan,VulkanFromANGLE,DefaultANGLEVulkan --use-angle=gl --enable-features=VaapiOnNvidiaGPUs,VaapiIgnoreDriverChecks,AcceleratedVideoDecodeLinuxZeroCopyGL,AcceleratedVideoDecodeLinuxGL --password-store=gnome-libsecret ``` ### Flag Rationale | Flag | Purpose | |------|---------| | `--ozone-platform=wayland` | Force Wayland; auto-detect unreliable on Hyprland | | `--disable-seccomp-filter-sandbox` | Fixes GBM `Permission denied` (Chrome sandbox blocks NVIDIA GBM on Wayland) | | `--disable-features=Vulkan,VulkanFromANGLE,DefaultANGLEVulkan` | Vulkan incompatible with Ozone Wayland; all three must be disabled | | `--use-angle=gl` | Force ANGLE→OpenGL backend; prevents auto-selection of Vulkan | | `--enable-features=VaapiOnNvidiaGPUs,...` | Bypass NVIDIA video decode allowlist; modern flags (replaced deprecated `VaapiVideoDecoder`) | | `--password-store=gnome-libsecret` | gnome-keyring integration (not auto-detected outside GNOME DE) | ## Verification ```bash vainfo # Shows VA-API NVDEC decoder capabilities LIBVA_DRIVER_NAME=nvidia vainfo # Explicit NVIDIA VA-API check ``` Expected `chrome://gpu` results: - Canvas: **Hardware accelerated** - Compositing: **Hardware accelerated** - Video Decode: **Hardware accelerated** (H.264, VP9, HEVC) - WebGL: **Hardware accelerated** - WebGPU: **Hardware accelerated** - GPU: GTX 1050 Ti / NVIDIA 580.159.03 - GL implementation: `gl=egl-angle,angle=opengl` - GPU process crash count: **0** - Ozone platform: **wayland** ## Known Warnings Three log lines persist despite correct config — these are upstream Chromium warnings: ``` ERROR:ui/ozone/platform/wayland/gpu/wayland_surface_factory.cc:252: '--ozone-platform=wayland' is not compatible with Vulkan WARNING:sandbox/policy/linux/sandbox_linux.cc:404: InitializeSandbox() called with multiple threads in process gpu-process ERROR:ui/gl/egl_util.cc:92: EGL Driver message (Error) eglCreateContext: Requested version is not supported ``` These are cosmetic. Chrome falls back to ANGLE+OpenGL before they print. No fix exists upstream yet (Chromium issue 334275637). ## Key Learnings 1. **Deprecated flags**: `VaapiVideoDecoder`, `VaapiVideoDecodeLinuxGL` replaced by `AcceleratedVideoDecodeLinuxZeroCopyGL`, `AcceleratedVideoDecodeLinuxGL` since Chrome ≥131. 2. **Vulkan is opt-in, not opt-out**: `--disable-features=Vulkan` alone is insufficient; `VulkanFromANGLE` and `DefaultANGLEVulkan` are auto-enabled and must be listed. 3. **GBM "Permission denied" is not file perms**: It's seccomp sandbox + NVIDIA GBM. `--disable-seccomp-filter-sandbox` is the confirmed workaround. 4. **Password store**: Hyprland ≠ GNOME, so `--password-store=gnome-libsecret` explicit flag needed. 5. **`--ignore-gpu-blocklist` no longer needed**: Chrome 148 recognizes the GTX 1050 Ti + current driver without it. ## Ansible Integration The `dev-tools` role manages this file. Update both: - `ansible/roles/dev-tools/tasks/main.yml` (the copy task content) - This learning doc (the rationale)