我是 Linux 新手。我最近在 Windows 10 上安装了 WSL2(Ubuntu 22.04)。每当我打开终端或在终端中输入 bash 时,它都会不断出现错误。(抱歉,我无法从终端复制。)我该如何解决这个问题?
bashrc 内的代码从第 117 行开始。
fi export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0 export
LIBGL_ALWAYS_INDIRECT=1 sudo /etc/init.d/dbus start &> /dev/null export DISPLAY=$(cat /etc/resolv.conf | grep
nameserver | awk '{print $2; exit;}'):0.0 export LIBGL_ALWAYS_INDIRECT=1 sudo /etc/init.d/dbus start &>
/dev/null
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0
export LIBGL_ALWAYS_INDIRECT=1
sudo /etc/init.d/dbus start &> /dev/null
答案1
尽管@ArthurMeinild 的回答从技术上来说,修复错误是正确的,但请注意,这些行不是需要在 WSL 上不再可用,可能应该完全删除。
作为@Raffa 在评论中提到,看来您是从网站上复制这些内容并粘贴的,第一次尝试时就丢失了换行符。
你应该确定为什么您首先尝试使用这些行,然后可能考虑其他(在我看来,更好的)选项。请注意,WSL 已经看到了一些大量的过去 18 个月的变化和改进。如果你遵循的是之前的网站/博客上的说明,它们可能已经过时了。当然,总是对任何未注明发布或更新日期的网站/博客帖子都应持怀疑态度。
至于这些特定的行,它们的作用以及为什么可能不需要它们:
仅当您需要第三方 X 服务器时才需要此
export DISPLAY
行,而现在很可能不再需要第三方 X 服务器了。WSL 现在可以使用 WSLg 而不是第三方 X 服务器直接运行 GUI 应用程序。请参阅这个答案有关如何确保已更新到支持此功能的最新版本的信息。即使你使用第三方 X 服务器,也有一个更好的版本 (IMHO)
DISPLAY
:export DISPLAY="$(hostname).local:0"
看看我的超级用户在这里回答和我的Stack Overflow 解释。
同样,
LIBGL_ALWAYS_INDIRECT
新的 WSL 实现也不需要。现在,WSL 可以在最新版本中直接设置和运行 Systemd 和 D-Bus(如果需要,但通常不需要)。请参阅我的 Systemd 答案在这里有关如何设置以及如何确定是否真的需要它的信息。
即使你因为某种原因需要在启动时直接启动 D-Bus,也可以
sudo
在你的用户rc
文件不是最好的选择。这意味着每次在 WSL 上启动 Ubuntu 时,您都必须输入密码,而通常情况并非如此。如果你需要在 Ubuntu/WSL 启动时启动系统服务(Systemd 除外),请创建一个
/etc/wsl.conf
文件(如sudo
)并使用[boot]
如下部分这个答案。
因此,我强烈推荐移除所有这些额外的行并使用 WSL 功能直接完成相同的操作。
答案2
我认为你提到的这些行应该像这样布局:
fi
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0
export LIBGL_ALWAYS_INDIRECT=1
sudo /etc/init.d/dbus start &> /dev/null
删除所有多余的内容(删除fi
第 117 行之后的所有内容)。