Ajuda para criar uma notificação de caixa de mensagens com opções yes / no antes que um aplicativo seja executado

1

Comecei a usar o Ubuntu ao lado do Windows há cerca de dois meses. Eu lentamente adicionei todos os programas que eu uso regularmente no Ubuntu, para que eu possa eventualmente fazer tudo no Ubuntu que eu puder na minha máquina Windows.

Uma das últimas coisas que preciso migrar é o Popcorn Time. Eu finalmente instalei o aplicativo no Ubuntu e finalmente obtive o VPNAutoConnect instalado. No entanto, no Windows, tenho uma precaução extra: uma caixa de mensagem que aparece quando o ícone Popcorn Time é clicado, perguntando se a VPN está conectada ou não. Se Sim for clicado, o aplicativo será executado. Se No for clicado, ele pergunta se o usuário sabe o que é uma VPN e, em seguida, solicita que conecte ou saia do computador (isso foi útil porque minha colega de quarto e minha namorada às vezes assistiam a filmes quando eu não estava em casa). uma proteção extra para se certificar de que eles verificaram).

Eu quero fazer o mesmo messagebox no Ubuntu. Aqui está o script que usei no Windows:

returnvalue=msgbox("Is the VPN connected?",4,"VPN Authentification")

If returnvalue=6 Then

    Dim objShell
    Set objShell = WScript.CreateObject( "WScript.Shell" )
    objShell.Run("""C:\Users\*********\Downloads\Popcorn-Time\Popcorn-Time.exe""")
    Set objShell = Nothing

Else If returnvalue=7 Then

    returnvalue=msgbox("Do you know what the VPN is?",4,"VPN Authentification")

        If returnvalue=6 Then 
        x=msgbox("Please connect to the VPN",0,"VPN Authentification")

        Else If returnvalue=7 Then 
        x=msgbox("Please get off my computer",0,"VPN Authentification")

        End if    

    End if

End if

End if

Como eu poderia criar esse mesmo tipo de script no Ubuntu?

    
por Portugalthephilosoph 07.06.2014 / 21:38

3 respostas

1

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.

    
por Tommy Brunn 08.06.2014 / 20:27
2

Uma abordagem seria usar o Zenity. Por exemplo:

#!/usr/bin/env bash

if zenity --question --text="What do you choose?"; then
    zenity --info --text="You pressed \"Yes\"!"
else
    zenity --info --text="You pressed \"No\"!"
fi
    
por kraxor 07.06.2014 / 21:52
1

Você provavelmente precisará usar xmessage

Por exemplo: xmessage -center -buttons yes,no Are you connected to the VPN?

Exemplo de script:

#!/bin/bash

xmessage -center -buttons yes,no Are you connected to the VPN?

ans="$?"

if [[ "$ans" == 101 ]]; then
        #command to connect to VPN
        notify-send "Connecting"
else
    notify-send "Not Connecting"
fi
    
por Tim 07.06.2014 / 21:43