Controllo remoto di Motion con anyRemote
by admin on May.17, 2010, under Hacking, Linux, Sicurezza
anyRemote è un’applicazione (gratuita e rilasciata sotto licenza GNU GPL) che consente di utilizzare il cellulare come un sorta di “telecomando” per la gestione di altre applicazioni, ovvero fornire un servizio controllo remoto su piattaforma Linux tramite Bluetooth, InfraRed, o Wi-Fi.
anyRemote supporta infatti una ampia gamma di cellulari Nokia, SonyEricsson, Motorola ed altri (il cui elenco è consultabile alla URL http://anyremote.sourceforge.net/devices.html), rendendoli in grado di comunicare con Linux, è può essere configurata in linea di principio per gestire qualsiasi tipo di software operante su di esso.
Il motivo per cui ne parlo è legato alla necessità di utilizzare un comodo metodo per l’attivazione e la disattivazione del sistema di sorveglianza domestica che spesso costituisce l’argomento dei post più recenti.
Oltre che installare anyRemote da sorgente con l’abituale sequenza:
# ./configure --prefix=/usr
# make
# make install
operazione che tuttavia necessita della presenza di alcuni prerequisiti, variabili a seconda delle tecnologie che si vogliono utilizzare, metivo per cui rimando gli interessati alla pagina http://anyremote.sourceforge.net/pre.html, il software, per chi utilizza Ubuntu, Debian, Mandriva, Fedora o CentOS, è comodamente installabile tramite packages precompilati a patto di intervenire sulle Source Lists utilizzabili dal package manager di turno, definendo una nuova entry con queste caratteristiche (il riferimento è relativo a Ubuntu):
URI: http://ppa.launchpad.net/anyremote/ppa/ubuntu
Distribution: karmic
Componenets: Main
In tale eventualità, è consigliabile anche l’installazione del package ganyremote, se non altro perché offre la possibilità di aggiornare automaticamente il client java da installare sul mobile alla versione più recente (attualmente la 4.21), effettuarne l’upload:

nonché di effettuare un check della configurazione:

Per inciso, anche l’installazione dei front-ends Gnome e KDE, può avvenire a partire da sorgente, ma dato che sono scritti in python, non vi è alcuna compilazione da fare, e così tutto si limita ai comandi:
# ./configure --prefix=/usr
# make install
Per utilizzare anyRemote tramite connessione Bluetooth occorre attivare tale tecnologia sul cellulare ponendolo in modalità “discoverable” e rilevare l’indirizzo bluetooth dello stesso:
# hcitool scan
Scanning ...
00:21:08:DD:78:43 Piersilvio
e, con l’indirizzo rilevato, ricercare i servizi “Serial Port” oppure “Dialup Networking” coi rispettivi channel numbers:
# sdptool browse 00:21:08:DD:78:43
Browsing 00:21:08:DD:78:43 ...
[...]
Service Name: Dial-Up Networking
Service RecHandle: 0×10003
Service Class ID List:
“Dialup Networking” (0×1103)
Protocol Descriptor List:
“L2CAP” (0×0100)
“RFCOMM” (0×0003)
Channel: 2
Per impostare il necessario device /dev/rfcommX, basta impartire in questo caso:
# su -c "rfcomm bind 00:21:08:DD:78:43 2"
In alternativa è possibile editare direttamente il file /etc/bluetooth/rfcomm.conf.
Per connettere anyRemote a /dev/rfcommX occorre mandarlo in esecuzione con il parametro -s /dev/rfcommX oppure specificarlo direttamente nel file di configurazione che si andrà ad utilizzare.
Infatti, ogni applicazione gestita da anyremote ha bisogno di uno specifico file di configurazione, e questo indipendentemente dalla modalità di connessione utilizzata.
Se volessimo utilizzare una connessione di tipo wifi per attivare/disattivare Motion potremmo usare un file di configurazione simile al seguente (che rappresenta solamente un abbozzo notevolmente migliorabile):
# cat /usr/share/anyremote/cfg-data/Server-mode/motion.cfg
%
% anyremote configuration file per Motion. (Server-mode)
%
% STATUS test
% XTEST no
% SOUND app
% ENV no
Log=true
Screen=true
GuiAppName=Motion
GuiAppType=Example
GuiAppBinary=true
GuiAppModes=Server
GuiAppDesc=Avvia e Interrompe Motion
[Aliases]
% Cancel buttons on different phones
-11=Cancel
-8=Cancel
69=Cancel
[End]
[Keys]
(Connect)=Make(mode,motion);
[Mode]=motion
(EnterMode)=Exec(echo 'P=`ps -ef | grep motion | grep -v grep | grep -v anyremote`; if [ "x$P" == "x" ]; then motion; fi' |bash -f -s);\
Set(skin,default);\
Set(icons,Motion,1,launch,2,stop,3,exit,4,default,5,default,6,default,7,default,8,default,9,default,*,default,0,default,#,default);\
Macro(ALLIN1MENU);\
Set(font,small);\
Set(status,Motion Running);
Cancel=Exit
1=Exec(echo 'P=`ps -ef | grep motion | grep -v grep | grep -v anyremote`; if [ "x$P" == "x" ]; then motion; fi' |bash -f -s);\
Set(status,Motion Running);
2=Exec(pkill motion); Set(status,Motion Terminated);
3=Exec(pkill motion); Exit
#=Exec(pkill motion); Exit
[ModeEnd]
[End]
e mandare in esecuzione il modulo server di anyremote con:
# anyremote -s socket:5050 -f /usr/share/anyremote/cfg-data/Server-mode/motion.cfg
Use configuration file /usr/share/anyremote/cfg-data/Server-mode/motion.cfg
INFO: log file is /root/.anyRemote/anyremote.log
Al lancio del client sul cellulare dovremmo in Options selezionare Enter IP address, ed introdurre l’indirizzo opportuno, ad esempio 192.168.1.23:5050
Sempre in corrispondenza al lancio, se già non fosse attiva, verrebbe avviata l’applicazione Motion, e sullo schermo del computer avremmo immediatamente di seguito un riscontro del tipo:
[0] Processing thread 0 - config file /etc/motion/motion.conf
[0] Motion 3.2.11 Started
[0] ffmpeg LIBAVCODEC_BUILD 3412992 LIBAVFORMAT_BUILD 3415808
[0] Thread 1 is from /etc/motion/motion.conf
[1] Thread 1 started
[1] cap.driver: “uvcvideo”
[1] cap.card: “UVC Camera (046d:0994)”
[...]
[1] Started stream webcam server in port 8081
[1] File of type 8 saved to: /tmp/motion/01-20100517183643.swf
[1] File of type 4 saved to: /tmp/motion/01-20100517183643-00m.jpg
Nell’interfaccia client di anyRemote, che presenterà una serie di 9 icone, di cui le prime 3 utilizzabili, la selezione della seconda corrisponderebbe invece alla chiusura dell’applicazione controllata:

[0] httpd - Finishing
[0] httpd Closing
[0] httpd thread exit
[1] Thread exiting
[1] Calling vid_close() from motion_cleanup
[1] Closing video device /dev/video1
[0] Motion terminating
Col terzo pulsante (o semplicemente EXIT) avremmo invece anche l’ uscita dal client di controllo
Got disconnected
Connection closed or lost
Wait 5 seconds to connect/open server socket ...
Lasciando il processo server di anyremote in ascolto sulla porta stabilità:
anyremote 3994 root 3u IPv4 22973 0t0 TCP *:5050 (LISTEN)
È a questo punto piuttosto ovvio che la connessione tra client mobile e server potrebbe tranquillamente avvenire da remoto anche su UMTS o GPRS.

