试图了解自动重新连接WIFI的方法


9

我发现这种方法可以从本文中重新连接WIFI加密狗。但是,在尝试实施之前,我想弄清楚它是如何工作的。

  1. 转到/etc/ifplugd/action.d/并将ifupdown文件重命名为 ifupdown.original
  2. 然后执行:cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
  3. 最后: sudo reboot
  1. 什么时候/etc/ifplugd/action.d/ifupdown叫?
  2. 该脚本/etc/wpa_supplicant/ifupdown.sh本质上是用外行的方式执行的,对我来说,它看起来很复杂。什么时候也叫它
  3. 步骤1到步骤3是否会导致其他无法预见的问题,从而导致我的WIFI无法正常工作?我正在尝试通过SSH在Raspberry PI上实现此功能,而在难以到达的位置没有键盘和显示器。

我尝试使用Google进行各种操作,但迷路了!

Answers:


0

ifplugd用于检测以太网连接器的卸下或重新连接。关联的目录/etc/ifplugd/action.d/承载脚本,这些脚本在(例如)插入(或删除)连接器时被调用。

过程中的第2步将导致在插入(或卸下)连接器时(重新)协商wpa连接,并且假定该连接是WPA。您描述的重命名/复制过程将禁用在现有的ifupdown脚本中完成的所有先前存在的处理,该过程可能忽略不计。您可以考虑通过将/etc/wpa_supplicant/ifupdown.sh添加到现有的ifupdown脚本(例如,最后)来简单地调用它,但这取决于了解现有脚本中已经存在的内容(通常很简单)。

如果您只想在断开连接时或断开连接时重新协商wifi连接,而不是处理连接器的物理断开连接,则可以考虑使用以下方法:

https://raw.githubusercontent.com/dweeber/WiFi_Check/master/WiFi_Check

该脚本是健壮的,几乎没有害处,应该有效地解决问题。


0

简洁版本

  1. 已经由dudek回答;该目录用于脚本,这些脚本告诉您的系统如何处理插入或拔出的内容。

  2. 请参阅“长版”以尝试解释我如何理解有关脚本。基本上,在运行了一些检查并加载了一些外部函数之后,它会检查是否应运行start命令序列,或stop,错误输出并退出。

  3. 哦,是的,如果您以RPi不太喜欢的方式触摸网络配置,那么很可能使您无法进行远程访问。过去,我在RPi上已经大致接触到了网络配置,因此从全新安装开始更容易。保持谨慎,可以考虑将RPi临时移动到易于登录的位置。

长版

在我的RPi上浏览此文件时,它似乎已得到很好的注释,并且它并不用于许多外部函数调用。但是,您已经要求外行术语,因此,我将尽我最大的努力来解释我如何理解这些类型的脚本,因为看起来您像我一样是RPi用户(无头远程服务器设置)可能要检查我在RPi StackExchange上已经写过的内容,以便自动重新连接到隐藏的WiFi网络,因为它可能还有其他对服务器要求有用的技巧。

为了帮助回答您的问题,这里有一些shell脚本语法说明;

在shell ~.sh脚本中,通常会找到这样定义的函数;

function_name () {
    echo "doing stuff for function_name"
}

然后function_name在脚本中(有时在其他函数中)通过后者调用。函数,脚本文件以及语句是否只是要运行的命令列表。对于函数,在{}之间运行if的东西,对于语句,在thenfi之间运行的东西,以及在实例中有条件地在elseelif中使用的实例if

对于我们要分析的文件,有一个名为的函数do_startdo_stop而在其他文件中定义了一些函数...“这些其他函数定义了哪些文件?” 或“如何查找脚本a是否从文件b中加载函数?” 我们首先要回答两个问题。

大约线48/etc/wpa_supplicant/ifdown.sh有一个注释行(即行beguining与#simble;这些是由脚本intrupriter忽略......大部分)与source functionscoventently labbling接下来的几行意perpos〜

# source functions
if [ -f /etc/wpa_supplicant/functions.sh ]; then
    . /etc/wpa_supplicant/functions.sh
else
    exit
fi

注意,这是脚本行为的一个很好的例子。在假定存在文件之前检查文件是否存在。

第一位if [ -f是在定义的文件路径下检查文件。如果当前then通过sourcesource命令的.快捷方式是)加载文件的内容,但是我避免在脚本中使用它,因为它可能会cp被路径定义的文件和其他命令误解,但是我有题外话。接下来是else检查是否未找到该文件并以脚本exit 0状态退出0。然后,如果未通过第一个陈述,则该if指示fi以结束动作结束。换句话说,如果/etc/wpa_supplicant/functions.sh 没有存在,然后退出,否则加载那些功能并继续处理。这种双重检查是否存在值或文件是您在整个脚本以及其他脚本中都会反复看到的内容,包括-f检查文件,-n检查字符串长度,-x不仅检查文件是否存在,还检查文件是否存在如果运行脚本的用户对所定义的文件具有可执行权限,则-s 检查文件是否为空,-n检查字符串是否为空或null值,并=比较if语句中的字符串(或值)。别的东西,你会在Linux shell和bash脚本伴见ifstatments elif但这是另一天。在此脚本中,除了使用其他技巧外,if诸如||“或”,&&“与”和!“非”运算符之类的陈述,例如在线55

# quit if executables are not installed
if [ ! -x "$WPA_SUP_BIN" ] || [ ! -x "$WPA_CLI_BIN" ]; then
    exit 0
fi

〜它简单地把状态,如果由定义文件$WPA_SUP_BIN不是可执行文件或通过定义的文件$WPA_CLI_BIN具有状态可执行然后退出0而无需进一步处理。乍一看,它们看起来很复杂,但是以更人性化的语法朗读它们对于初次学习的人(简单的人)会有所帮助,而#为复杂的人添加注释在学习或稍后回到主题时确实很有帮助。

如果不确定ifupdown.sh文件中调用了什么内容,也应该检查内部来源的文件。我建议nano /etc/wpa_supplicant/functions.sh然后使用^wCtrl+w来搜索您想了解更多的函数名称。因为在任务调用此脚本与functions.sh大多数puzzel peces的内容之间都会发现。

现在,事情得到looing有点歧“圆线135,其中一个casestatment开始,这类statments有,我们可以用它来帮助解码opearations一个sertain结构。

case $some_variable in
    start)
         echo "The word [start] was detected in \$some_variable"
    ;;
    stop)
         echo "The word [stop] was detected in \$some_variable"
    ;;
    *)
         echo "The word [$some_variable] was detected in \$some_variable but not understood"
    ;;
esac

在上面的示例中,与其他case语句一样,我们基本上是在搜索内容中$some_variable查找被定义的关键字,即startstop,如果找到了关键字,则发出在拖尾)和预封之间找到的命令,这些命令;;用于将不同的动作分开以采取不同的键找到单词。请注意,在某些脚本中,您可能会casefor循环中找到这些语句,但这也是另一天的事情。

对于脚本中的case语句,ifupdown.sh我们首先要匹配变量中的startor stop状态,$MODE并使用$PHASEvalue来匹配是否应调用命令pre-uppost-up命令序列,或者是否应调用命令pre-downpost-down命令序列。如果start也没有stop检测到错误,则会记录错误,打印错误并以状态1为错误退出脚本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.