Eu também respondi no Reddit, mas isso é mais fácil.
A maneira de fazer isso é verificar a saída do comando ifconfig
para a existência de uma interface tun
ou tap
. Muito provavelmente, um deles será criado quando você se conectar à VPN.
#!/usr/bin/env bash
if ifconfig -s | grep -qE "(tun|tap)[0-9]+"; then
# Run popcorn time
else
zenity --error --text "VPN is not running."
fi
ifconfig
é usado para configurar interfaces de rede. Se você não fornecer nenhum argumento, ele retornará todas as interfaces de rede disponíveis junto com um monte de informações sobre elas. O sinalizador -s
faz com que ele apenas exiba uma pequena lista das interfaces. Meu ifconfig -s
quando conectado a uma VPN é assim:
➜ ~ ifconfig -s
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 5302413 0 0 0 1971869 0 0 0 BMRU
lo 65536 0 323789 0 0 0 323789 0 0 0 LRU
tun0 1500 0 0 0 0 0 15 0 0 0 MOPRU
Como você pode ver, na última linha há uma interface chamada "tun0", que é a interface que minha conexão VPN usa. Como está lá, sei que estou conectado à minha VPN. Se você quiser saber mais sobre ifconfig, veja man ifconfig
.
O caractere "pipes" do |
(pipe) envia a saída do primeiro comando para o segundo comando - grep
.
O comando grep
pesquisa no texto de entrada qualquer coisa que corresponda a um padrão. O sinalizador -E
informa que o padrão é um "regex estendido". O que é isso é um pouco demais para explicar, mas se você está curioso, pode ler man grep
. O padrão que eu forneci, (tun|tap)[0-9]+
irá procurar por uma string que comece com "tun" ou "tap", seguida por pelo menos um dígito. O -q
sinaliza ao grep que eu não quero que ele mostre o texto que ele encontrou, estou interessado em saber se ele encontrou algo ou não.
Colocando isso na instrução if
, a condição será verdadeira se grep
encontrar uma string correspondente, então o código dentro da cláusula then
será executado. Se não conseguir encontrar uma string correspondente, o código na cláusula else
será executado.
As linhas que começam com #
são comentários - código ignorado e não executado. Como não sei onde o Popcorn Time está instalado, não sei como executá-lo, então você terá que preencher isso em si mesmo.
A primeira linha, começando com #!
, é chamada de "shebang". Essa linha simplesmente diz ao seu shell (o que você usa para executar o script) qual programa ele deve usar para executar o script. Nesse caso, provavelmente queremos que use bash
.
Alguém nos comentários sugeriu que você olhasse a saída do comando route
, o que poderia ser bom, mas quando tentei, foi bem lento. Se você tivesse várias conexões VPN e quisesse verificar se uma específica estava funcionando, então o comando route
seria muito melhor (porque você poderia procurar um endereço IP específico), mas para o caso de uso simples, eu não acho que é necessário.