You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Debian/WSL环境下WebKitGTK 6.0应用运行时无窗口显示问题

WebKitGTK 6.0 在WSL中运行异常的解决思路

问题描述

将原本基于webkit2gtk-4.1的WebKit示例升级到webkitgtk-6.0后,在Debian和Ubuntu WSL环境中运行出现异常:程序启动后无窗口弹出,但任务栏可见对应图标,点击图标无任何反应,同时终端输出一系列错误信息。

出错的webkitgtk-6.0代码

// cc `pkg-config --cflags --libs webkitgtk-6.0 ` WebKitTest2.c 
#include <gtk/gtk.h>
#include <webkit/webkit.h>

void
activate (GtkApplication *app, gpointer)
{
  GtkWidget *window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "NPC");
  gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);

  GtkWidget *webView = webkit_web_view_new ();

  gtk_window_set_child (GTK_WINDOW (window), webView);
  webkit_web_view_load_uri (WEBKIT_WEB_VIEW (webView),
                            "https:/google.com");

  gtk_widget_show(window);
  gtk_window_present (GTK_WINDOW(window));
}

int
main (int argc, char *argv[])
{
    int status;

    GtkApplication *app = gtk_application_new ("com.example.GtkApplication",
                                G_APPLICATION_DEFAULT_FLAGS);
    g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
    status = g_application_run (G_APPLICATION (app), argc, argv);
    g_object_unref (app);
    
    return status;
}

运行时错误输出

$ ./WebKitTest 

    
libEGL warning: MESA-LOADER: failed to open vgem: /usr/lib/dri/vgem_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/x86_64-linux-gnu/dri:$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
    
    libEGL warning: failed to open /dev/dri/card0: Permission denied
    
    
    (process:2): Gdk-WARNING **: 14:30:13.944: Settings portal not found: Failed to execute child process “dbus-launch” (No such file or directory)
    libEGL warning: MESA-LOADER: failed to open vgem: /usr/lib/dri/vgem_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/x86_64-linux-gnu/dri:$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
    
    libEGL warning: failed to open /dev/dri/card0: Permission denied
    
    ^C

旧版本(webkit2gtk-4.1)可用代码

//clang `pkg-config --cflags --libs webkit2gtk-4.1` WebKitTest.c++

#include <gtk/gtk.h>
#include <webkit2/webkit2.h>

static void
destroyWindowCb (GtkWidget *widget, GtkWidget *window)
{
  gtk_main_quit ();
}

int
main (int argc, char *argv[])
{
  gtk_init (&argc, &argv);

  GtkWidget *main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_default_size (GTK_WINDOW (main_window), 800, 600);

  WebKitWebView *webView = WEBKIT_WEB_VIEW (webkit_web_view_new ());
  gtk_container_add (GTK_CONTAINER (main_window), GTK_WIDGET (webView));

  g_signal_connect (main_window, "destroy", G_CALLBACK (destroyWindowCb),
                    NULL);

  webkit_web_view_load_uri (webView, "https://google.us");

  gtk_widget_show_all (main_window);

  gtk_main ();

  return 0;
}

解决思路

  • 修复EGL依赖与图形驱动问题
    安装缺失的Mesa驱动组件:

    sudo apt update && sudo apt install mesa-utils libegl1-mesa libgl1-mesa-dri
    

    若使用WSLg,确保系统已更新到最新版本;若手动使用XServer(如VcXsrv),确认XServer正在运行并允许WSL连接。

  • 解决DBus缺失问题
    安装dbus-x11工具:

    sudo apt install dbus-x11
    

    启动程序前先初始化DBus会话:

    eval `dbus-launch --auto-syntax`
    
  • 修正代码中的URI错误
    代码中加载的URI存在拼写错误:"https:/google.com" 需改为 "https://google.com",避免后续页面加载失败。

  • 适配GTK4窗口显示逻辑
    在GTK4中,可尝试在添加WebView后显式调用gtk_widget_show(webView),或确保gtk_window_present()正确触发窗口激活;也可替换gtk_widget_show(window)为gtk_widget_show_all(window),确保所有子控件都被正确显示。

  • 检查WSL图形环境配置
    确认DISPLAY环境变量设置正确:

    echo $DISPLAY
    

    WSLg环境下DISPLAY应为:0;手动XServer环境下需设置为localhost:0或对应XServer的IP端口,同时确保XServer未限制外部连接。

内容的提问来源于stack exchange,提问作者user22925547

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:32:11