Tentando entender o método WIFI de reconexão automática

9

Eu encontrei este método de reconectar o dongle WIFI deste post . Mas quero esclarecer como funciona, antes de tentar implementá-lo.

  1. Vá para /etc/ifplugd/action.d/e renomeie o ifupdownarquivo para ifupdown.original.
  2. Em seguida, fazer: cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown.
  3. Finalmente: sudo reboot
  1. Quando é /etc/ifplugd/action.d/ifupdownchamado?
  2. O que o script /etc/wpa_supplicant/ifupdown.shfaz essencialmente em termos de laymens, parece bastante complexo para mim; e quando é chamado também.
  3. As etapas 1 a 3 poderiam causar outros problemas imprevistos que impediriam meu WIFI de funcionar? Estou tentando implementar isso em um PI de framboesa, via SSH, sem teclado e monitor em um local difícil de alcançar.

Tentei pesquisar no Google vários bits, mas fiquei um pouco perdido!

reggie
fonte

Respostas:

0

O ifplugd deve detectar a remoção ou reconexão de um conector Ethernet. O diretório associado /etc/ifplugd/action.d/ hospeda scripts que são chamados quando, por exemplo, o conector está conectado (ou removido).

A etapa 2 do seu processo faria com que a conexão wpa fosse (re) negociada quando o conector é inserido (ou removido) e assume que a conexão é WPA. O processo de renomeação / cópia que você descreve desabilitaria qualquer processamento preexistente feito no script ifupdown preexistente, que pode ser insignificante ou não. Você pode simplesmente chamar o /etc/wpa_supplicant/ifupdown.sh adicionando isso ao script ifupdown existente (no final, por exemplo), mas isso depende de entender o que já está no script existente (o que geralmente é simples).

Se você deseja apenas renegociar a conexão wifi, se ou quando ela cair, em vez de lidar com a desconexão física do conector, você pode considerar o seguinte:

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

Esse script é robusto, principalmente inofensivo e deve executar o truque de maneira robusta.

GregD
fonte
0

Versão curta

  1. Respondida por dudek já; esse diretório é usado para scripts que informam ao seu sistema como lidar com coisas sendo conectadas ou desconectadas dele.

  2. Veja "Versão longa" para tentar explicar como eu entendi o script em questão. Basicamente, após executar algumas verificações e carregar algumas funções externas, ele verifica se deve executar a startsequência de comandos ou stop, ou, se houver erro e sair.

  3. Ah, sim, poderia muito bem impedir o acesso remoto se você tocar nas configurações de rede de uma maneira que o RPi não goste. Eu toquei minhas configurações de rede de maneira tão grosseira no passado no meu RPi que ficou mais fácil começar com uma nova instalação. Seja cauteloso e considere mover o temperaroly do RPi para um local que seja mais fácil para acessar o local.

Versão longa

Olhando através deste arquivo no meu RPi, ele parece bem comentado e não é usado em muitas chamadas de funções externas. Mas você pediu termos laymens, portanto, farei o meu melhor para explicar como entendo esses tipos de scripts, pois parece que você é um usuário RPi como eu (configuração do servidor remoto sem cabeça) pode verificar o que eu já escrevi no RPi StackExchange para se reconectar automaticamente a redes WiFi ocultas, pois pode ter outros truques úteis para os requisitos do servidor.

Para ajudar a responder suas perguntas, aqui está um pouco da explicação da sintaxe dos scripts de shell;

Nos ~.shscripts shell , é comum encontrar funções definidas assim;

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

e depois chamado via function_nameposterior no script, às vezes dentro de outras funções. Funções, arquivos de script e se as declarações são apenas listas de comandos a serem executados. No caso de funções, as coisas entre {e }são executadas e, no caso de ifdeclarações, as coisas entre thene fisão executadas e em instâncias em que elseou elifsão usadas nas ifdeclarações condicionalmente.

Para o arquivo estamos disecting existem funções nomeadas do_start, do_stope algumas funções definidas em outros arquivos ... "quais arquivos são essas outras funções definded?" ou "Como localizo se o script a carrega funções do arquivo b?" são duas perguntas que precisaremos responder primeiro.

Em torno da linha 48, /etc/wpa_supplicant/ifdown.shhá uma linha comentada (ou seja, linha enganadora com #simble; estes são ignorados pelo intruso de script ... principalmente), com a source functionslabuta dissimulada dos objetivos pretendidos das próximas linhas ~

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

Observe que este é um bom exemplo de comportamento de script; verificando se existe um arquivo antes de assumir que está.

O primeiro bit if [ -festá procurando um arquivo no caminho definido. E, se presente, thencarregar o conteúdo do arquivo via source(mão de sourcecomando curta é, .mas eu evito usá-lo em meus scripts, porque ele pode ser mal interpretado por cpe outros comandos, mas o que eu tenho) é o arquivo definido pelo caminho. A seguir, elseverifique se o arquivo não foi encontrado exit 0com o status de 0script. Em seguida, o ifstetment termina com fiações a serem executadas se a primeira declaração não for aprovada. Ou, em outras palavras, se /etc/wpa_supplicant/functions.sh nãoexsist, em seguida, saia; caso contrário, carregue essas funções e continue o processamento. Esse tipo de verificação duble se um valor ou arquivo está presente é algo que você verá repetido em todo o script em questão, bem como em outros scripts, a -fverificação de arquivos, a -nextensão da string, além de -xverificar se existe um arquivo, mas também se o usuário executando o script tiver permissões executáveis ​​para o arquivo definido, -s verifica se um arquivo está vazio, -nverifica se a sequência não está vazia ou não possui nullvalor e =compara as seqüências (ou valores) nas ifdeclarações. Outra coisa que você verá nos scripts shell e bash no Linux com ifdeclarações, elifmas isso é para outro dia. Dentro deste script, há outros truques usados ​​além deifdeclarações como operadores ||"ou", &&"e" e !" e não", como on-line 55~

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

~ que simplesmente coloca estados, se o arquivo definido por não$WPA_SUP_BIN for executável ou o arquivo definido por não for executável, saia com status sem processar mais. Eles podem parecer complexos no começo, mas lê-los em voz alta em uma sintaxe mais humana pode ajudar na primeira aprendizagem, para os mais simples, e adicionar comentários nos mais complexos é realmente útil ao aprender ou voltar ao assunto posteriormente.$WPA_CLI_BIN0#

O arquivo que é fornecido internamente também deve ser inspecionado se não tiver certeza do que algo chamou dentro do ifupdown.sharquivo. Eu sugiro que, em nano /etc/wpa_supplicant/functions.shseguida, use ^wou Ctrl+wpara procurar o nome da função que você deseja saber mais. Porque entre o que qualquer tarefa chama esse script e a contenção da functions.shmaioria dos pecados de quebra-cabeça será encontrada.

Agora, as coisas começam a ficar um pouco diferentes da linha redonda 135onde uma casedeclaração é iniciada; esses tipos de declarações têm uma estrutura de manutenção que podemos usar para ajudar a decodificar operações.

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

No exemplo acima, como em outras caseafirmações, estamos basicamente pesquisando o conteúdo das $some_variablepalavras-chave defiened, startou seja, stope se a palavra-chave for encontrada, emita comandos encontrados entre a execução )e a execução ;;que atuam para separar ações diferentes a serem executadas por várias chaves. palavras encontradas. Observe que em alguns scripts você pode encontrar essas casedeclarações dentro de forloops, mas isso também ocorre em outro dia.

No caso das casedeclarações dentro ifupdown.shscript que está combinando primeiro o startou stopstatus dentro $MODEvariável e usando $PHASEo valor para corresponder se pre-upou post-upsequência de comando deve ser chamado ou se o pre-downou post-downsequência de comandos deve ser chamado em seu lugar. Se niether startnem stoponde for detectado, um erro será registrado, impresso e o script será encerrado com status de 1erro.

S0AndS0
fonte