📅  最后修改于: 2023-12-03 15:21:16.338000             🧑  作者: Mango
在使用 WSL (Windows Subsystem for Linux) 中的 Shell-Bash 时,经常会遇到屏幕权限被拒绝的问题。这通常是由于 WSL 需要访问 Windows 的图形界面,而缺乏必要的权限导致的。
WSL 使用的是 Windows 内核来运行 Linux 环境,但是它们的权限模型是不同的。在 Windows 中,访问图形界面需要特殊的权限;而在 Linux 中,访问 X11 服务器通常是无需权限的。因此,当 WSL 要访问 Windows 中的 X11 服务器时,往往会遇到权限问题。
一种解决办法是使用 X11 转发功能,将图形界面通过网络传输到其他机器上进行显示。这种方法的好处是可以将图形界面显示在任何能够访问 Windows X11 服务器的机器上。
要启用 X11 转发,需要先安装 X11 工具和 SSH 服务。可以在 WSL 中执行以下命令:
sudo apt-get update
sudo apt-get install -y xorg ssh xauth
安装完成后,在 Windows 端需要安装客户端软件,如 Xming 或 VcXsrv。启动客户端后,在 WSL 中就可以使用 SSH 连接到 Windows X11 服务器,并在其中运行图形界面应用程序了。
另一种解决办法是修改权限配置,使得 WSL 能够访问 Windows 中的图形界面。
要实现这个目标,可以按照以下步骤操作:
打开 Windows CMD 窗口,并执行以下命令:
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" -Name "AutoExposeGpuEnabled" -Value "0" -Type Dword
这个命令会禁用 WSL 的 GPU 自动显露功能,从而使得 WSL 能够访问 Windows 中的 X11 服务器。
在 WSL 中打开 ~/.bashrc
文件,并添加以下内容:
export DISPLAY=$(awk '/nameserver / {print $2; exit;}')":0"
export LIBGL_ALWAYS_INDIRECT=1
这个命令会将 $DISPLAY
环境变量设置为 Windows 中的 X11 服务器地址,并启用间接渲染模式。
重新启动 WSL,并执行以下命令:
xhost +localhost
这个命令会允许本地主机连接 X11 服务器。
现在,重新启动图形界面应用程序就应该能够正常工作了。
WSL 屏幕权限被拒绝的问题是 WSL 中常见的问题之一,但是它有多种解决方法。使用 X11 转发功能可以在其他机器上显示图形界面,而修改权限配置则可以让 WSL 直接访问 Windows 中的图形界面。无论是哪种方法,都需要充分理解 WSL 和 Windows 之间的权限模型,才能安全地进行配置。