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

这篇文章上次修改于 11 个月前,可能部分内容已经不适用,如有疑问可询问作者。

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

声明

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