脚本的网络相关部分将不会在 /lib/systemd/system-sleep 中运行

脚本的网络相关部分将不会在 /lib/systemd/system-sleep 中运行

该脚本的目的是在从睡眠状态恢复时重新启用隐藏的 SSID。当我从 18.04 LTS 升级到 20.04 LTS 时,不知何故自动重新启动隐藏 SSID 的功能丢失了。

您可以从下面的脚本中看到我尝试了多少种方法来使其工作。每次恢复时echo,打印到都suspend.txt有效。只有重新启动 wifi 的部分不起作用。
我在脚本中尝试的所有命令在 CLI 中输入时都按预期工作,并且/home/user/Desktop/wifi-ssid.sh双击时有效。

journalctl | grep systemd-sleep脚本下方是结果。最值得注意的是错误...

"Error: Connection activation failed: No suitable device found for this connection (device lo not available because device is strictly unmanaged)."

这应该很简单。请帮忙。


#!/bin/sh

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/home/user/Desktop

case "$1" in
    pre)
            #code execution BEFORE sleeping/hibernating/suspending
    ;;
    post)
            #code execution AFTER resuming
            echo "$(date) - $1: test pre" >> /home/user/tmp/suspend.txt
            /usr/bin/nmcli c up id "SSID"
            #/usr/bin/nmcli radio wifi on
          #sleep 2
          #/usr/bin/nmcli c up id "SSID"
            #/home/user/Desktop/wifi-ssid.sh
            #su user -c "/home/user/Desktop/wifi-ssid.sh"
            #su user -c "/usr/bin/nmcli c up id "SSID""
            #/usr/bin/sudo -u user bash -c "export XDG_RUNTIME_DIR=/run/user/1000; /home/user/Desktop/wifi-ssid.sh"
            #/usr/bin/sudo -u user bash -c "export XDG_RUNTIME_DIR=/run/user/1000; /usr/bin/nmcli c up id "SSID""
            #/usr/bin/sudo -u user bash -c "/home/user/Desktop/wifi-ssid.sh"            
            #su user -c "/usr/bin/nmcli con up SSID"
            #/usr/bin/sudo -u user bash -c "export XDG_RUNTIME_DIR=/run/user/1000; /usr/bin/nmcli con up SSID; /usr/bin/nmcli radio wifi on; sleep 2; /usr/bin/nmcli c up id "SSID""
            
     ;;
esac

exit 0

journalctl | grep systemd-sleep显示以下内容:

Mar 03 16:53:30 User systemd-sleep[4074]: Suspending system...  
Mar 03 20:01:32 User systemd-sleep[4074]: System resumed.  
Mar 03 20:01:32 User systemd-sleep[4206]: /dev/sda:  
Mar 03 20:01:32 User systemd-sleep[4206]:  setting Advanced Power Management level to 0xfe (254)  
Mar 03 20:01:32 USer systemd-sleep[4206]:  APM_level = 0  
Mar 03 20:01:32 User systemd-sleep[4189]: Error: Connection activation failed: No suitable device found for this connection (device lo not available because device is strictly unmanaged).

答案1

/lib/systemd/system-sleep直到目录中的所有脚本都完成执行后,网络才可用。

尝试在子 shell 中将网络相关命令发送到后台并延迟(例如 10 秒)然后将其分离,即更改:

/usr/bin/nmcli c up id "SSID"

到:

(sleep 10; /usr/bin/nmcli c up id "SSID") & disown

注意disown是一个bash内置函数,并且根据您的系统 shell 配置,/bin/sh可能会链接到除 ... 之外的其他 shell 命令解释器。bash对于这种情况,您可以/bin/bash使用如下命令字符串进行调用:

/bin/bash -c '(sleep 10; /usr/bin/nmcli c up id "SSID") & disown'

或者甚至在大多数情况下/bin/sh使用命令字符串中的子 shell 进行调用,如下所示:

/bin/sh -c '(sleep 10; /usr/bin/nmcli c up id "SSID") &'

应该分叉一个新的分离进程。

其他为保持该进程正常运行,您可能需要明确指定/切换到用户,例如您的用户,username或者即使root您的命令/脚本需要提升的权限才能执行...您也可以在命令字符串样式中执行此操作,但是您需要使用不同的引用样式,即双引号,/bin/su username -c "/bin/bash -c '...'"例如:

/bin/su username -c "/bin/bash -c '(sleep 10; /usr/bin/nmcli c up id SSID) & disown'"

更改username为系统上有效帐户的用户名,例如您实际的帐户登录用户名。

相关内容