Попытка понять метод автоматического повторного подключения 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? Я пытаюсь реализовать это на Raspberry PI, через SSH, без клавиатуры и монитора в труднодоступном месте.

Я пытался гуглить разные биты, но потерял немного!

Реджи
источник

Ответы:

0

ifplugd предназначен для обнаружения удаления или переподключения разъема Ethernet. Связанный каталог /etc/ifplugd/action.d/ содержит сценарии, которые вызываются, когда, например, соединитель подключен (или удален).

Шаг 2 в вашем процессе приведет к тому, что при подключении (или удалении) коннектора будет проводиться (пере) согласование соединения wpa, и предполагается, что это соединение WPA. Процесс переименования / копирования, который вы описываете, отключил бы любую ранее существующую обработку, выполненную в существующем сценарии ifupdown, который может быть незначительным или нет. Вы можете просто вызвать /etc/wpa_supplicant/ifupdown.sh, добавив это к существующему сценарию ifupdown (например, в конце), но это зависит от понимания того, что уже есть в существующем сценарии (который часто прост).

Если вы просто хотите пересмотреть соединение Wi-Fi, если или когда оно разрывается, вместо того, чтобы обрабатывать физическое отключение разъема, вы можете рассмотреть возможность использования этого:

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

Этот сценарий является надежным, в основном безвредным, и должен решительно действовать.

GregD
источник
0

Укороченная версия

  1. Ответили уже Dudek; этот каталог используется для сценариев, которые сообщают вашей системе, как обрабатывать вещи, подключенные к ней или отключенные от нее.

  2. См. «Длинную версию», чтобы попытаться объяснить, как я понял сценарий, о котором идет речь. В основном, после запуска некоторых проверок и загрузки некоторых внешних функций, он проверяет, должен ли он выполнять либо startпоследовательность команд stop, либо ошибки или выходить из системы.

  3. О, да, это очень хорошо может заблокировать вас от удаленного доступа, если вы прикоснетесь к сетевым настройкам так, как RPi не очень нравится. Я уже почти коснулся своих сетевых настроек на моем RPi, так что проще было начать с новой установки. Будьте внимательны и подумайте о перемещении температуры RPi в место, куда проще войти в локальную сеть.

Длинная версия

Просматривая этот файл на моем RPi, он кажется хорошо прокомментированным и бесполезным для многих вызовов внешних функций. Но вы просили терминов для непрофессионалов, поэтому я сделаю все возможное, чтобы объяснить, как я собираюсь разобраться в этих видах сценариев, хотя, похоже, вы такой же пользователь RPi, как я (настройка удаленного сервера без головы), да может быть, мне стоит проверить, что я уже переписал на RPi StackExchange для автоматического повторного подключения к скрытым сетям WiFi, поскольку у него могут быть другие приемы, полезные для требований вашего сервера.

Чтобы помочь в ответе на ваши вопросы, приведено несколько изменений синтаксиса сценариев оболочки;

В ~.shсценариях оболочки часто можно найти функции, определенные так;

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

и затем вызывается через function_nameпоследний в скрипте, иногда в других функциях. Функции, файлы сценариев и, если отчеты - это просто списки команд для запуска. В случае функций вещи между {и }запускаются, а в случае ifстатистик вещи между thenи fiзапускаются и в инстинктах, где elseили elifиспользуются в пределах ifинструкций условно.

Для файла мы disecting есть функции с именами do_start, do_stopи некоторые функции , определенные в других файлах ... «Какие файлы эти другие функции definded?» или "Как мне найти скрипт, загружающий функции из файла 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загружать содержимое файла через source(сокращенная sourceкоманда, .но я избегаю использовать его в моих сценариях, потому что это может быть неправильно использовано cpдругими командами, но у меня есть отклонения ), файл определяется путем. Далее следует elseпроверить, что если этот файл не найден, exit 0завершите работу со статусом 0сценария. Затем ifstetement заканчивается, fiчтобы закрыть действия, которые нужно предпринять, если первый устав не прошел. Или, другими словами, если /etc/wpa_supplicant/functions.sh неexsist затем завершите работу, в противном случае загрузите эти функции и продолжите обработку. Этот вид двойной проверки, если значение или файл присутствует, является тем, что вы увидите, повторяется в рассматриваемом сценарии, а также в других сценариях, -fпроверяет файлы, -nпроверяет длину строки, -xпроверяет не только наличие файла, но и если пользователь, выполняющий сценарий, имеет права на выполнение исполняемого файла для определенного файла, -s проверяет, является ли файл пустым, -nпроверяет, является ли строка пустой или пустой null, и =сравнивает строки (или значения) в ifстатистике. Что-то еще вы увидите в сценариях оболочки и bash в Linux со ifстатистикой, 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а затем использовал ^wили Ctrl+wдля поиска названия функции, о которой вы хотите узнать больше. Потому что между тем, что когда-либо называет этот сценарий задачей, и удовлетворением functions.shбольшинства загадочных вещей.

Теперь дело доходит до того, что можно зацикливаться на несколько иной круглой линии, 135в caseкоторой начинается определение, такие типы оценок имеют структуру 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

В приведенном выше примере , как и с другими casestatments мы в основном ищем содержимое $some_variableдля ключевых слов defiened, то есть startили stopесли ключевое слово найдено , то команд выдают найденные между trailling )и preseading , ;;который действует на sepperate differant действия предпринять для различного ключа слова найдены. Обратите внимание, что в некоторых скриптах вы можете найти эти caseоценки внутри forциклов, но это также относится к другому дню.

В случае caseзаявления в рамках ifupdown.shсценария мы предварительно соответствие startили stopстатус в $MODEпеременной и использовать $PHASEзначение , чтобы соответствовать , если pre-upили post-upпоследовательность команд должна быть вызвана или если pre-downили post-downпоследовательность команд должна вызываться вместо этого. Если startни stopто, ни другое не обнаружено, то ошибка регистрируется, распечатывается, и сценарий завершается со статусом 1ошибка.

S0AndS0
источник