Pendetect

Publicado por Victor Guimarães Nunes 15/07/2008

[ Hits: 6.537 ]

Download pendetect-0.2-noarch-1vn.tgz




Detecta pendrives com bash e kdialog.

Uma vantagem deste script para outros feitos para Slackware (kernel 2.4) é que trabalha integrado com o KDE (interface padrão do sistema) e detecta apenas mídias de armazenamento USB, nao trabalha, por exemplo, com webcam nem mouse.

Espero que gostem (eu achei melhor do que compilar o kernel 2.6 e instalar o HAL. Dá muito trabalho no slack 11)

ps.: Postando o pacote .tgz, em vista de algumas dependências, como os arquivos de áudio (alarmes de conexão e desconexão).

  



Esconder código-fonte

#!/bin/bash
######################################################################################
#
# Pendetect:
# detecta pendrives junto ao ambiente Linux/KDE.
#
# Este script pode ser alterado livremente.
# desenvolvido por Victor Nunes - vitimnunes@gmail.com
#
######################################################################################

loadconfig() {
######################################################################################
#
# Configuracoes de opcao de pendetect
#
# Modifique com cuidado!
#
######################################################################################

# LOCK: arquivo temporario de pendetect
LOCK=\"/tmp/.pendetect.lock\"

# penIn_Wav: som wav que é reproduzido quando um pendrive é detectado
penIn_Wav=\"/usr/share/pendetect/audio/pendriveIn.wav\"

# penOut_Wav: som wav que é reproduzido quando um pendrive é desconectado
penOut_Wav=\"/usr/share/pendetect/audio/pendriveOut.wav\"

# errormsg: mostra a mensgem de erro no dialogo
errormsg=\"Nao foi possivel montar o dispositivo conectado. Abortado!\"

# devpath: dispostivos que podem ser montados como pendrives
devpath=\"/dev/sda:/dev/sdb:/dev/sdc:/dev/sdd:/dev/sde:/dev/sdf:/dev/sdg:/dev/sdh\"

# filemanager: nome do gerenciador de arquivos que aparecera no menu
filemanager=\"konqueror\"

# mountpoint: ponto de montagem do pendrive
mountpoint=\"/mnt/pen\"

# opendircmd: comando para abrir o diretorio montado
opendircmd=\"kfmclient exec $mountpoint\"

# msgconnected: mensagem da janela do menu
msgconnected=`echo -e \"Novo dispositivo USB conectado.\\nO que deseja fazer?\"`

# opc1: primeira opcao do menu
opc1=\"Abrir com $filemanager\"

# opc2: segunda opcao do menu
opc2=\"Nao fazer nada\"

# geometry: geometria da janela do menu
geometry=\"250x250++\"
}

configure() {
######################################################################################
#
# Prepara o pendetect para rodar sem erros, cria e resolve as dependencias
#
######################################################################################

mkdir -p $mountpoint
rm -f $LOCK
}

reporterror() {
######################################################################################
#
# Reporta um erro de montagem do pendrive
#
######################################################################################

echo \"erro\"
kdialog --caption \"Erro\" --error \"$errormsg\"
exit 1
}

checkdisconnection() {
######################################################################################
#
# Verifica se um pendrive desmontado ja foi desconectado da porta usb
#
######################################################################################

C_LOCK=`cat $LOCK`
lsusb | grep \"$C_LOCK\" >&/dev/null # verifica se o usuario removeu o pendrive
rcd=$?

case $rcd in
0) return 0 ;; # caso o usuario NAO tenha removido o dispositivo
1) return 1 ;; # caso o usuario tenha removido o dispositivo
esac
}

ejectactions() {
######################################################################################
#
# Acoes executadas quando o usuario desmonta o pendrive
#
######################################################################################
SHORTCUT=$1

kdialog --caption \"usb-removido\" --msgbox \"O dispositivo ja pode ser removido com segurança!\"
echo -n \'Aguardando desconexao do dispostivo...\'
while [ true ] ; do

sleep 0.5
checkdisconnection ; # funcao que verifica se o usuario removeu o pendrive
rd=$?

case $rd in
0) continue ;;
1) echo \'desconectado\' ;
rm -f $SHORTCUT ;
play $penOut_Wav ;
start ;;
esac
done
}

waitforumount() {
######################################################################################
#
# Acoes executadas quando o pendrive esta sendo usado, espera o comando para excutar
# os procedimentos de remocao do dispositivo
#
######################################################################################

DEVICE=$1
SHORTCUT=\"$HOME/Desktop/`basename $DEVICE`.desktop\"

echo -n \'Monitorando dispositivo...\'
while [ true ] ; do
sleep 1
mount -l | grep $DEVICE >&/dev/null
rcmd=$?

case $rcmd in
0) continue ;;
1) echo \'desmontado\' ; ejectactions $SHORTCUT ;;
esac
done
}

shortcutgenerate() {
######################################################################################
#
# Gera o atalho para o pendrive na area de trabalho, futuramente também na system tray
#
######################################################################################

DEVICE=$1
MOUNTPOINT=$2
SHORTCUT=\"$HOME/Desktop/`basename $DEVICE`.desktop\"

echo \"[Desktop Entry]\" > $SHORTCUT
echo \"Dev=$DEVICE\" >> $SHORTCUT
echo \"Encoding=UTF-8\" >> $SHORTCUT
echo \"Icon=usbpendrive_mount\" >> $SHORTCUT
echo \"MountPoint=$MOUNTPOINT\" >> $SHORTCUT
echo \"ReadOnly=false\" >> $SHORTCUT
echo \"Type=FSDevice\" >> $SHORTCUT
echo \"UnmountIcon=usbpendrive_unmount\" >> $SHORTCUT
}

mountpen() {
######################################################################################
#
# Executa a montagem do dispositivo, isto anexa o conteudo do pendrive ao sistema
# deixando-o pronto para usar
#
######################################################################################

OPENDIR=$1
npath=1
montado=0
while [ $npath -lt 9 ] ; do
device=`echo $devpath | cut -d: -f$npath`
devicenow=1
while [ $devicenow -lt 10 ] ; do
echo -en \"\\rtentando montar a partir de $device$devicenow...\"
mount -t vfat $device$devicenow $mountpoint >&/dev/null
r=$?
case $r in
0) echo \'ok\' ; shortcutgenerate $device$devicenow $mountpoint ; montado=1 ; break ;;
*) devicenow=`expr $devicenow + 1` ;;
esac
done

case $montado in
0) continue ;;
1) break ;;
esac

npath=`expr $npath + 1`
done

if [ $montado == 1 ] ; then
case $OPENDIR in
0) waitforumount $device$devicenow ;;
1) $opendircmd ; waitforumount $device$devicenow ;;
esac
else
reporterror ;
fi
}

getbus() {
######################################################################################
#
# Obtem informacoes sobre o bus de dispostivos que ja foram plugados
#
######################################################################################

bus=`lsusb | grep -v \'0000:0000\' | cut -d\' \' -f2`
bus=`echo $bus | tr \\n \\t`
}

getdev() {
######################################################################################
#
# Obtem informacoes sobre o dev de dispostivos que ja foram conectados
#
######################################################################################

dev=`lsusb | grep -v \'0000:0000\' | cut -d\' \' -f4 | cut -d: -f1`
dev=`echo $dev | tr \\n \\t`
}

start() {
######################################################################################
#
# Inicia o monitoramento das portas usb, esta funcao detecta as conexoes de
# dispositivos USB-STORAGE, ou seja, de drives de armazenamento. Nao detecta mouses
# ou qualquer outro ustilitario usb que nao seja de armazenamento.
#
######################################################################################

while [ true ] ; do
sleep 1.5
getbus;
getdev;
if [ \"$bus\" != \"\" ] ; then
ndrv=`echo $bus | wc -w`
limit=`expr $ndrv + 1`
ndrvnow=1
while [ $ndrvnow -lt $limit ] ; do
echo -en \"\\rnumero de drives: $ndrv\"
busnow=`echo $bus | cut -d\' \' -f$ndrvnow`
devnow=`echo $dev | cut -d\' \' -f$ndrvnow`
mod=`usbmodules --device /proc/bus/usb/$busnow/$devnow`
if [ \"$mod\" == \"usb-storage\" ] ; then
echo -e \"\\nusb-storage encontrado em [bus=$busnow|dev=$devnow]\"
echo `lsusb | grep \"Bus $busnow Device $devnow\"` > $LOCK
play $penIn_Wav
menu=`kdialog --caption \"usb-drive\" --miniicon \"usbpendrive_unmount\" --menu \"$msgconnected\" 0 \"$opc1\" 1 \"$opc2\" --geometry \"$geometry\"`
case $menu in
0) mountpen 1 ;;
*) mountpen 0 ;;
esac
else
ndrvnow=`expr $ndrvnow + 1`
fi
done
fi
done
}

echo -n \"Carregando configuracoes...\"
loadconfig ;
echo \"ok\"
echo -n \"Aplicando configuracao...\"
configure ;
echo \"ok\"
echo \"Iniciando monitoramento...\"
start ;

Scripts recomendados

Malwares

Enviar ip dinâmico

Juros compostos usando bc

akill

Script bem simples para eniar e-mail com arquivo em anexo.


  

Comentários
[1] Comentário enviado por jeferson_roseira em 16/07/2008 - 22:38h

cara interessante seu script.. tem algumas dicas para mim criar scripts??

Obrigado

Jeferson Roseira


Contribuir com comentário