J'ai commencé à utiliser Ubuntu aux côtés de Windows il y a environ 2 mois. J'ai lentement ajouté tous les programmes que j'utilise régulièrement à Ubuntu, afin que je puisse finalement faire tout ce que je pourrais faire sur Ubuntu sur ma machine Windows.
L'une des dernières choses sur lesquelles je dois migrer est Popcorn Time. J'ai enfin installé l'application sur Ubuntu et j'ai enfin installé VPNAutoConnect. Cependant, sous Windows, j'ai une précaution supplémentaire: une boîte de message qui apparaît lorsque l'utilisateur clique sur l'icône Popcorn Time, qui demande si le VPN est connecté ou non. Si Oui est cliqué, l'application s'exécutera. Si Non est cliqué, il demande si l'utilisateur sait ce qu'est un VPN et leur demande ensuite de le connecter ou de descendre de mon ordinateur (cela était utile car mon colocataire et ma petite amie regardaient parfois des films lorsque je n'étais pas à la maison, donc c'était une garantie supplémentaire pour vous assurer qu'ils ont vérifié).
Je veux créer la même boîte de message dans Ubuntu. Voici le script que j'ai utilisé dans 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
Comment pourrais-je créer ce même type de script dans Ubuntu?
Je vous ai également répondu sur Reddit, mais c'est plus facile.
La façon dont je le ferais est de vérifier la sortie de la commande ifconfig
pour l'existence d'une interface tun
ou tap
. Très probablement, l'un d'eux sera créé lorsque vous vous connecterez au 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
est utilisé pour configurer les interfaces réseau. Si vous ne fournissez aucun argument, il renverra toutes les interfaces réseau disponibles avec un tas d'informations à leur sujet. Le -s
L'indicateur ne produit qu'une petite liste des interfaces. Ma ifconfig -s
lorsqu'il est connecté à un VPN ressemble à ceci:
➜ ~ 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
Comme vous pouvez le voir, sur la dernière ligne, il y a une interface appelée "tun0", qui est l'interface que ma connexion VPN utilise. Depuis qu'il est là, je sais que je suis connecté à mon VPN. Si vous souhaitez en savoir plus sur ifconfig, consultez man ifconfig
.
Le |
(pipe) caractère "pipes" (envoie) la sortie de la première commande dans la deuxième commande - grep
.
La commande grep
recherche dans le texte d'entrée tout ce qui correspond à un modèle. Le -E
le drapeau lui indique que le modèle est une "expression régulière étendue". Ce que c'est un peu trop à expliquer, mais si vous êtes curieux, vous pouvez lire man grep
. Le modèle que j'ai fourni, (tun|tap)[0-9]+
recherchera une chaîne commençant par "tun" ou "tap", suivie d'au moins un chiffre. Le -q
flag indique à grep que je ne veux pas qu'il affiche le texte réel qu'il a trouvé, je suis simplement intéressé de savoir s'il a trouvé quelque chose ou non.
En mettant cela dans l'instruction if
, la condition sera vraie si grep
trouve une chaîne correspondante, donc le code dans la clause then
sera exécuté. S'il ne parvient pas à trouver une chaîne correspondante, le code de la clause else
s'exécutera.
Lignes commençant par #
sont des commentaires - code ignoré et non exécuté. Comme je ne sais pas où Popcorn Time est installé, je ne sais pas comment l'exécuter, vous devrez donc le remplir vous-même.
La première ligne, commençant par #!
est appelé le "Shebang". Cette ligne indique simplement à votre Shell (la chose que vous utilisez pour exécuter le script) avec quel programme il doit utiliser pour exécuter le script. Dans ce cas, nous souhaitons probablement qu'il utilise bash
.
Quelqu'un dans les commentaires a suggéré que vous regardiez la sortie de la commande route
, ce qui pourrait être bon, mais quand je l'ai essayé, c'était assez lent. Si vous aviez plusieurs connexions VPN et que vous vouliez vérifier qu'une connexion spécifique était active, la commande route
serait bien meilleure (car vous pourriez rechercher une adresse IP spécifique), mais pour le cas d'utilisation simple , Je ne pense pas que ce soit nécessaire.
Une approche consisterait à utiliser Zenity. Par exemple:
#!/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
Vous devrez probablement utiliser xmessage
Par exemple: xmessage -center -buttons yes,no Are you connected to the VPN?
Exemple 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