该脚本的目的是在从睡眠状态恢复时重新启用隐藏的 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
为系统上有效帐户的用户名,例如您实际的帐户登录用户名。