WSLg:如何以 root 身份运行 GUI WSL 应用程序?

WSLg:如何以 root 身份运行 GUI WSL 应用程序?

我刚刚开始使用 WSLg,我可以运行 nautilus OK 之类的应用程序,但不能以 root 身份运行它们。

如果我使用 Windows 的“以管理员身份运行”选项运行它,那么该应用程序似乎只是以普通用户身份运行:

(base) ian@IansDesktop:~$ sudo ps aux | grep nautilus
ian        521  4.0  0.8 573876 70432 pts/1    Ssl+ 21:55   0:14 nautilus --new-window

如果我尝试从终端运行,sudo它会退出并出现错误:

(base) ian@IansDesktop:~$ sudo nautilus --new-window

** (org.gnome.Nautilus:1025): WARNING **: 22:02:15.647: Error on getting connection: Failed to load SPARQL backend: Error spawning command line ?dbus-launch --autolaunch= --binary-syntax --close-stderr?: Child process exited with code 1

如何以 root 身份启动 WSLg 应用程序?

答案1

虽然我无法重现您的问题,但请让我分享我所知道的信息(到目前为止),因为它太长了,无法发表评论/聊天。我刚刚设置了一个全新的 20.04 WSL2(Windows 11)发行版来尝试重现您的问题,但它对我有用——我能够使用 启动 WSLg sudo nautilus --new-window

这个 Ask Ubuntu 答案在引用类似错误的问题上似乎表明尝试运行多个 Nautilus 实例时存在冲突,但我无法通过这种方式重现。

几点说明:

首先,最重要的是,这可能不是所有 GUI 应用程序的问题。我建议尝试:

sudo apt install xterm
sudo xterm

预计这要么对您有用(使用 xterm 中的 root shell),要么帮助我们识别您的 root 问题(没有双关语;只是一个意外的惊喜)。

您还可以尝试wsl --terminate <distribution_name>在新启动的实例中以 root 身份运行 Nautilus。

而且,也有可能sudo -E nautilus --new-window得到不同的结果,但根据我的测试,我认为这种情况不太可能发生。不过,还是值得一试。

最后,需要意识到的一件重要事情是,在 WSLg 下运行 Gnome 应用程序并不像运行大多数其他 GUI 应用程序那么简单。Gnome 应用程序高度依赖许多其他相互关联的功能,例如:

  • D-总线
  • 系统化
  • gio/gvfs

我以为我能够将您的特定问题追踪到其中之一,但我还无法将这些点连接起来并在我的系统上重现它。

通常可能的来克服 WSL 上的 Gnome 问题,但它肯定比其他应用程序需要更多的努力。

例如,即使作为普通用户,Operation not supported如果您尝试访问“垃圾箱”功能,Nautilus 也可能会出错。这可以通过以下方法解决:

dbus-launch nautilus

...它将在 D-bus 用户会话内启动 Nautilus,从而gvfs通过 D-bus 提供支持。

这引出了最后一个想法——您也可以尝试:

sudo dbus-launch nautilus

相关内容