📜  wsl 屏幕权限被拒绝 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:21:16.338000             🧑  作者: Mango

WSL 屏幕权限被拒绝 - Shell-Bash

在使用 WSL (Windows Subsystem for Linux) 中的 Shell-Bash 时,经常会遇到屏幕权限被拒绝的问题。这通常是由于 WSL 需要访问 Windows 的图形界面,而缺乏必要的权限导致的。

原因分析

WSL 使用的是 Windows 内核来运行 Linux 环境,但是它们的权限模型是不同的。在 Windows 中,访问图形界面需要特殊的权限;而在 Linux 中,访问 X11 服务器通常是无需权限的。因此,当 WSL 要访问 Windows 中的 X11 服务器时,往往会遇到权限问题。

解决方案
方法一:使用 X11 转发

一种解决办法是使用 X11 转发功能,将图形界面通过网络传输到其他机器上进行显示。这种方法的好处是可以将图形界面显示在任何能够访问 Windows X11 服务器的机器上。

要启用 X11 转发,需要先安装 X11 工具和 SSH 服务。可以在 WSL 中执行以下命令:

sudo apt-get update
sudo apt-get install -y xorg ssh xauth

安装完成后,在 Windows 端需要安装客户端软件,如 XmingVcXsrv。启动客户端后,在 WSL 中就可以使用 SSH 连接到 Windows X11 服务器,并在其中运行图形界面应用程序了。

方法二:修改权限配置

另一种解决办法是修改权限配置,使得 WSL 能够访问 Windows 中的图形界面。

要实现这个目标,可以按照以下步骤操作:

  1. 打开 Windows CMD 窗口,并执行以下命令:

    Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" -Name "AutoExposeGpuEnabled" -Value "0" -Type Dword
    

    这个命令会禁用 WSL 的 GPU 自动显露功能,从而使得 WSL 能够访问 Windows 中的 X11 服务器。

  2. 在 WSL 中打开 ~/.bashrc 文件,并添加以下内容:

    export DISPLAY=$(awk '/nameserver / {print $2; exit;}')":0"
    export LIBGL_ALWAYS_INDIRECT=1
    

    这个命令会将 $DISPLAY 环境变量设置为 Windows 中的 X11 服务器地址,并启用间接渲染模式。

  3. 重新启动 WSL,并执行以下命令:

    xhost +localhost
    

    这个命令会允许本地主机连接 X11 服务器。

现在,重新启动图形界面应用程序就应该能够正常工作了。

总结

WSL 屏幕权限被拒绝的问题是 WSL 中常见的问题之一,但是它有多种解决方法。使用 X11 转发功能可以在其他机器上显示图形界面,而修改权限配置则可以让 WSL 直接访问 Windows 中的图形界面。无论是哪种方法,都需要充分理解 WSL 和 Windows 之间的权限模型,才能安全地进行配置。