Pendetect
Publicado por Victor Guimarães Nunes 15/07/2008
[ Hits: 6.391 ]
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 ;
Shell Script para instalação do ePSXe no Ubuntu
Menu no terminal usando Shell Script
Backup de bases de dados individuais do PostgreSQL
Shell scrip de monitoramento de rede
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









