Estou tentando usar /etc/network/if-up.d/
e /etc/network/if-down.d
para enviar um SMS do meu computador para meu telefone via Gmail sempre que meu computador entrar ou sair de uma rede sem fio. O script principal é escrito em Perl, e os scripts nas referidas pastas são essencialmente wrappers em torno dele. Aqui está o script Perl, ~user/bin/laptopSMS.pl
:
#!/usr/bin/perl
use strict;
use warnings;
use Email::Send;
use Email::Send::Gmail;
use Email::Simple::Creator;
my $addy = q{[email protected]};
my $pass = q{myPass};
my $sms = q{[email protected]};
my $email = Email::Simple->create(
header => [
From => $addy,
To => $sms,
Subject => "$ARGV[0]",
],
body => "$ARGV[1] / $ARGV[2]",
);
my $sender = Email::Send->new(
{ mailer => 'Gmail',
mailer_args => [
username => $addy,
password => $pass,
]
}
);
eval { $sender->send($email) };
die "Error sending email: $@" if $@;
O script a seguir é /etc/network/if-up.d/99postconnect_laptopSMS
:
#!/bin/bash
set -e
if [ "$IFACE" == "wlan0" ]; then
ipaddr='ip addr | grep inet[^6] | grep -v 127.0.0.1 | awk {'print '} | sed 's!/[0-9]*!!g''
ssid='iwgetid -r'
~user/bin/laptopSMS.pl "connected" "$ssid" "$ipaddr"
fi
Isso funciona bem e recebo uma mensagem de texto sempre que meu telefone entra em uma rede; o script if-down.d
correspondente enviar um sinal de "desconexão", no entanto:
#!/bin/bash
set -e
if [ "$IFACE" == "wlan0" ]; then
~user/bin/laptopSMS.pl "disconnect" "disconnect" "disconnect"
fi
Isso não está sendo executado; Tentei colocar o seguinte snippet no script para ver se algo está sendo executado:
ifdowntest=/home/user/ifdown_test.txt
date >> $ifdowntest
whoami >> $ifdowntest
ifconfig >> $ifdowntest
sleep 5
Deixar isso no script por si só é executado bem, mas anexá-lo ao wrapper para o script Perl não. (Nenhum arquivo é gerado.)
A saída de ifconfig >> $ifdowntest
mostra que o wlan0 não tem um IP - ele foi removido. Posso obter este script para executar pre-down (eu pensei que é o que a pasta if-down.d
fez) ou de alguma forma editar algo para fazer este trabalho? Note que leva cerca de 3 segundos para o script Perl ser acionado quando executado manualmente.
FWIW: Estou derrubando a rede manualmente clicando no applet NetworkManager e clicando em "Desconectar". Eu poderia apenas matar meu roteador para testar isso também, mas não sei se há uma diferença entre desconectar manualmente e o AP não existir mais.