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 $DISPLAYWSLg环境下DISPLAY应为
:0;手动XServer环境下需设置为localhost:0或对应XServer的IP端口,同时确保XServer未限制外部连接。
内容的提问来源于stack exchange,提问作者user22925547
相关产品推荐
相关产品推荐

