Mount-or-Umount a výstup do X-Windows/Gnome ze skriptu (zenity)
Používání příkažů mount a umount je sice fajn, ale když už periodicky připojuji stále stejné disky i zařízení několikrát denně v notebooku, tak je to pro mne osobně už trošku pakárna. Hledal jsem pohodlnější řešení, které by dokázalo automaticky rozpoznat, zda je jednotka připojená a pokud je, tak ji odpojit. To vše v jednom skriptu a nejlépe jak s testovým výstupem na stdout, tak i s výstupem do X-Windows/Gnome, pokud je k dispozici.
Nic, co by se mi opravdu líbílo a bylo naprosto jendoduché jsem nenašel a tak jsem si připravil vlastní řešení. Je to skutečně jednoduchá skript, kterému se předávají argumenty stejné jako pro mount a plní vše, co jsem od něj očekával.
Pro výstup do X-Windows/Gnome jsem použil zenity, což je remake gdialog určený pro GTK 1, který dokáže vytvářet pěkné dialogy ze shell skriptů.
Pokud se mají zobrazovat tyto grafická dialogová okna, je nutné mít tedy zenity nainstalované. V Ubunt 6.06 stačí zadat jednoduchý příkaz:
-
sudo apt-get install zenity
Skript Mount-or-Umount
Skript jsem se snažil udělat co nejjednodušší a je v něm krásně vidět, jak snadno se zenity používá.
Já osobně jsem si nastavil do /etc/sudoers přes visudo ještě řádek:
-
pchovancik ALL=(root) NOPASSWD: /bin/umount, /bin/mount
Což ve výsledku znamená, že pokud ve skriptu použité sudo se neptá na heslo:
-
#!/bin/bash
-
-
# Mount-or-Umount
-
# V.0.1: Pavel Chovančík / GPL / www.chovancik.cz
-
-
MOUNT_POINT=$1
-
MOUNT_DEV=$2
-
MOUNT_TYPE=$3
-
MOUNT_OPT=$4
-
ZENITY_INSTALLED=FALSE
-
-
MOUNT_INFO=$(mount | awk -v point=$MOUNT_POINT '{ if ($3 == point) print $0 }')
-
[ "$MOUNT_OPT" != "" ] && MOUNT_OPT="-o "$MOUNT_OPT
-
[ "$MOUNT_TYPE" != "" ] && MOUNT_TYPE="-t "$MOUNT_TYPE
-
-
LOG_DIR=/tmp/tmpdir-$RANDOM.$$
-
HELP_FILE=$LOG_DIR/m-or-u.help
-
OUT_FILE=$LOG_DIR/m-or-u.out
-
-
which zenity>/dev/null
-
[ $? -eq 0 ] && ZENITY_INSTALLED=TRUE
-
-
(umask 077 && mkdir $LOG_DIR) || exit 2
-
-
if [ $# -lt 1 ]; then
-
echo -e "Automatické Připojení/Odpojení zařízení (u/mount)" | tee $HELP_FILE
-
echo -e "Výstup přesměrován do X-Windows/Gnome pomocí zenity (http://freshmeat.net/projects/zenity)
-
" | tee -a $HELP_FILE
-
-
echo -e "Použití: mount-or-umount [bod pro připojení] [zařízení] [typ souborového systému] [volby pro připojení]
-
" | tee -a $HELP_FILE
-
echo -e "Příklad:
-
mount-or-umount /media/sdileninaserveru /server/sdileni smbfs username=jmeno,password=heslo" | tee -a $HELP_FILE
-
echo "mount-or-umount /media/windows" | tee -a $HELP_FILE
-
-
if [ "$DISPLAY" != "" ] && [ "$ZENITY_INSTALLED" == "TRUE" ]; then
-
zenity --title="Mount-or-Umount" --text-info --filename="$HELP_FILE" --width=700 --height=300
-
fi
-
-
rm $HELP_FILE 2>/dev/null
-
rmdir $LOG_DIR 2>/dev/null
-
exit 1
-
fi
-
-
if [ "$MOUNT_INFO" == "" ]; then
-
-
sudo mount $MOUNT_TYPE $MOUNT_DEV $MOUNT_POINT $MOUNT_OPT 2>$OUT_FILE
-
-
case "$?" in
-
0 )
-
if [ "$DISPLAY" != "" ] && [ "$ZENITY_INSTALLED" == "TRUE" ]; then
-
zenity --title="Mount-or-Umount" --info --text="Připojení $MOUNT_POINT bylo úspěšné..."
-
else
-
echo Připojení $MOUNT_POINT bylo úspěšné...
-
fi
-
-
;;
-
* )
-
if [ "$DISPLAY" != "" ] && [ "$ZENITY_INSTALLED" == "TRUE" ]; then
-
zenity --title="Mount-or-Umount" --text-info --filename="$OUT_FILE" --width=600 --height=100
-
else
-
echo Chyba při pokusu o připojení $MOUNT_POINT...
-
cat $OUT_FILE
-
fi
-
;;
-
esac
-
-
else
-
-
sudo umount $MOUNT_POINT 2>$OUT_FILE
-
-
case "$?" in
-
0 )
-
if [ "$DISPLAY" != "" ]; then
-
zenity --title="Mount-or-Umount" --info --text="Odpojení $MOUNT_POINT bylo úspěšné..."
-
else
-
echo Odpojení $MOUNT_POINT bylo úspěšné...
-
fi
-
-
;;
-
* )
-
if [ "$DISPLAY" != "" ]; then
-
zenity --title="Mount-or-Umount" --text-info --filename="$OUT_FILE" --width=600 --height=100
-
else
-
echo Chyba při pokusu o odpojení $MOUNT_POINT...
-
cat $OUT_FILE
-
fi
-
;;
-
esac
-
-
fi
-
-
rm $OUT_FILE 2>/dev/null
-
rmdir $LOG_DIR 2>/dev/null
-
-
exit 0
A výsledek je snadný, stačí například spustit:
-
mount-or-umount /media/uzivatel@sambaserver //sambaserver/uzivatel smbfs username=jmeno%heslo
a nebo pokud je již definováno ve fstab:
-
mount-or-umount /media/windows
Výstupy jsou opravdu pěkné



Nastavení kávesových zkratek v Gnome
Perfektně to funguje zejména na klávesové zkratky v Gnome, které se nastavují následovně:
- spustíme
gconf-editor - přejdeme na Apps → Metacity → Keybinding Commands
- vybereme si například položku command_1 a do ní zapíšeme příkaz
- přejdeme na Apps → Metacity → Global keybindings
- vybereme si položku run_command_1 a do ní zapíšeme klávesovou zkratku, např. <Control><Shift>F1
- Zavřeme a hotovo
To je celé, pro mně je to hodně příjemné, mám vše pod dohledem a přitom pro rychlou práci naprosto efektivní.
- Automatický restart služby při jejím pádu (Debian, Ubuntu, pidof, cron)
- Automatické připojování obrazů disků ISO, IMG, BIN, MDF a NRG v Ubuntu optimalizované pro Gnome (Linux, Furius ISO Mount, fuseiso)
- EncFS – šifrováný souborový systém v uživatelském prostoru (user-space) v Ubuntu (Linux)
- Sdílené složky ve VirtualBoxu s hostujícím (guest) Ubuntu 8.04 (VBoxGuestAdditions, Shared Folders, uid)




(hlasováno 3x, průměr: 3,33 z max. 5)



