Pendetect
Publicado por Victor Guimarães Nunes 15/07/2008
[ Hits: 6.405 ]
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).
#!/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 ;
Backup da base de dados PostgreSQL
Automatizando autenticação do Speedy Business
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
ERRO: LAZARUS 4.2 64 no Linux MINT não entra mais apos ajustar desktop... (0)
Pergunta: Meu teclado não está respondendo direito como e consertar? (2)
Secure boot, artigo interessante, nada técnico. (6)
SQLITE não quer funcionar no LINUX LMDE6 64 com Lazaruz 4.2 64bit (n... (0)









