我正在尝试使用命令在 Windows 11 上的 WSL2 Ubuntu 上打开网络管理器 GUI nm-connection-editor
,但它显示以下错误:
** (nm-connection-editor:7104): WARNING **: 17:05:24.796: Couldn't construct the client instance: Could not connect: No such file or directory
(nm-connection-editor:7104): GLib-GObject-CRITICAL **: 17:05:24.796: g_object_set_qdata: assertion 'G_IS_OBJECT (object)' failed
(nm-connection-editor:7104): GLib-GObject-WARNING **: 17:05:24.796: instance with invalid (NULL) class pointer
(nm-connection-editor:7104): GLib-GObject-CRITICAL **: 17:05:24.796: g_signal_handlers_destroy: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
(nm-connection-editor:7104): GLib-GObject-WARNING **: 17:05:24.796: instance with invalid (NULL) class pointer
(nm-connection-editor:7104): GLib-GObject-CRITICAL **: 17:05:24.796: g_signal_handlers_destroy: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
(nm-connection-editor:7104): GLib-GObject-CRITICAL **: 17:05:24.796: g_object_unref: assertion 'old_ref > 0' failed
** (nm-connection-editor:7104): WARNING **: 17:05:24.796: Failed to initialize the UI, exiting...
** (nm-connection-editor:7104): CRITICAL **: 17:05:24.796: nm_connection_list_present: assertion 'NM_IS_CONNECTION_LIST (list)' failed
我怎样才能解决这个问题?
注意:我已经尝试了这个问题的可能解决方案, 但仍然不起作用。
哇——你在一个命令中几乎达到了所有WSL 限制!我有点夸大其词,但是您绝对应该阅读该答案以获取更多详细信息。
这里发生了一些事情,但其中大部分都植根于以下事实:
WSL 不(很容易)支持 Systemd。或者,Systemd 不支持在 WSL 下运行,因为它只有在 PID1 时才会运行。请参阅此 Ask Ubuntu 答案和此超级用户答案,我将深入探讨该特定主题。
nm-connection-editor
是一个 Gnome 组件。Gnome 依赖于 Systemd。在我看来
nm-connection-editor
,像许多其他 Gnome 组件一样,使用 Dbus 与其他组件进行交互。DBus 通常由 Systemd(或另一个进程管理器)在启动时启动。可以在没有 Systemd 的情况下运行它,但它在 WSL 中默认不运行。即使我们解决了所有这些问题:
网络管理器在 WSL 中通常不会那么有用,因为您无法更改分发中的默认网络。WSL2 实际上是我们作为用户无法访问的“托管”虚拟机。控制网络的是那个虚拟机。您的 WSL2发行版作为该 VM内的容器运行。
尝试在 WSL 中使用 Network Manager 就像尝试在 Docker 容器中使用它一样——这可能没有多大意义。您没有提及您想要使用网络管理器的用例,但如果您需要为您的用例提供替代方案,这可能需要第二个问题。
综上所述,让网络管理器在 WSL 下运行是可能的,只是相当 hacky 和相当复杂。有关我在 Ubuntu 20.04 下使用的通过 Xrdp 在 WSL 下运行 Gnome 的方法,请参阅此 Ask Ubuntu 答案。
请注意,在 Jammy (22.04) 上,还有一些其他问题需要解决,因为该
gnome-desktop
软件包在 WSL 下引入了一些其他有问题的 Systemd 单元 - 请参阅Github 上的这个 Genie 问题。