WSL2中Arch Linux解决systemctl不能使用的问题

这篇文章上次修改于 6 个月前,可能其部分内容已经发生变化,如有疑问可询问作者。

WSL2中Arch Linux解决systemctl不能使用的问题

安装 daemonize 和 fontconfig

bash
sudo pacman -S  fontconfig daemonize -y
Copy

写入配置

在文件 /etc/profile 末尾加入

bash
sudo vim  /etc/profile
Copy
text
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')



if [ -z "$SYSTEMD_PID" ]; then

   sudo /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target

   SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')

fi



if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then

    exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME

fi
Copy

输入 :wq 保存文件。

如果你的机器无法登录,即nsenter报错。请使用以下示例

text
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')

if [ -z "$SYSTEMD_PID" ]; then

   sudo /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target

   SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')

fi

if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then

    exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -m -p su - $LOGNAME

fi
Copy

在文件 /etc/sudoers 末尾加入

bash
sudo vim /etc/sudoers 
Copy
text
%sudo ALL=(ALL) NOPASSWD: /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target

%sudo ALL=(ALL) NOPASSWD: /usr/bin/nsenter -t [0-9]* -a su - [a-zA-Z0-9]*
Copy

重启 profile 文件使上面的配置生效

bash
sudo -s

source /etc/profile
Copy

声明

本文对原文内容进行演绎,如有侵权,请联系站长删除。