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:

BASH:
  1. 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:

BASH:
  1. pchovancik ALL=(root) NOPASSWD: /bin/umount, /bin/mount

Což ve výsledku znamená, že pokud ve skriptu použité sudo se neptá na heslo: :-)

BASH:
  1. #!/bin/bash
  2.  
  3. # Mount-or-Umount
  4. # V.0.1: Pavel Chovančík / GPL / www.chovancik.cz
  5.  
  6. MOUNT_POINT=$1
  7. MOUNT_DEV=$2
  8. MOUNT_TYPE=$3
  9. MOUNT_OPT=$4
  10. ZENITY_INSTALLED=FALSE
  11.  
  12. MOUNT_INFO=$(mount | awk -v point=$MOUNT_POINT '{ if ($3 == point) print $0 }')
  13. [ "$MOUNT_OPT" != "" ] && MOUNT_OPT="-o "$MOUNT_OPT
  14. [ "$MOUNT_TYPE" != "" ] && MOUNT_TYPE="-t "$MOUNT_TYPE
  15.  
  16. LOG_DIR=/tmp/tmpdir-$RANDOM.$$
  17. HELP_FILE=$LOG_DIR/m-or-u.help
  18. OUT_FILE=$LOG_DIR/m-or-u.out
  19.  
  20. which zenity>/dev/null
  21. [ $? -eq 0 ] && ZENITY_INSTALLED=TRUE
  22.  
  23. (umask 077 && mkdir $LOG_DIR) || exit 2
  24.  
  25. if [ $# -lt 1 ]; then
  26.      echo -e "Automatické Připojení/Odpojení zařízení (u/mount)" | tee $HELP_FILE
  27.      echo -e "Výstup přesměrován do X-Windows/Gnome pomocí zenity (http://freshmeat.net/projects/zenity)
  28. " | tee -a $HELP_FILE
  29.  
  30.      echo -e "Použití: mount-or-umount [bod pro připojení] [zařízení] [typ souborového systému] [volby pro připojení]
  31. " | tee -a $HELP_FILE
  32.      echo -e "Příklad:
  33. mount-or-umount /media/sdileninaserveru /server/sdileni smbfs username=jmeno,password=heslo" | tee -a $HELP_FILE
  34.      echo "mount-or-umount /media/windows" | tee -a $HELP_FILE
  35.  
  36.      if [ "$DISPLAY" != "" ] && [ "$ZENITY_INSTALLED" == "TRUE" ]; then
  37.         zenity --title="Mount-or-Umount" --text-info --filename="$HELP_FILE" --width=700 --height=300
  38.      fi
  39.      
  40.      rm $HELP_FILE 2>/dev/null
  41.      rmdir $LOG_DIR 2>/dev/null     
  42.      exit 1
  43. fi
  44.  
  45. if [ "$MOUNT_INFO" == "" ]; then
  46.  
  47.    sudo mount $MOUNT_TYPE $MOUNT_DEV $MOUNT_POINT $MOUNT_OPT 2>$OUT_FILE
  48.  
  49.    case "$?" in
  50.     0 )
  51.      if [ "$DISPLAY" != "" ] && [ "$ZENITY_INSTALLED" == "TRUE" ]; then
  52.       zenity --title="Mount-or-Umount" --info --text="Připojení $MOUNT_POINT bylo úspěšné..."
  53.      else
  54.       echo Připojení $MOUNT_POINT bylo úspěšné...
  55.      fi 
  56.      
  57.     ;;
  58.     * )
  59.      if [ "$DISPLAY" != "" ] && [ "$ZENITY_INSTALLED" == "TRUE" ]; then
  60.       zenity --title="Mount-or-Umount" --text-info --filename="$OUT_FILE" --width=600 --height=100
  61.      else
  62.       echo Chyba při pokusu o připojení $MOUNT_POINT...
  63.       cat $OUT_FILE
  64.      fi 
  65.     ;;
  66.    esac   
  67.  
  68. else
  69.  
  70.  sudo umount $MOUNT_POINT 2>$OUT_FILE
  71.  
  72.    case "$?" in
  73.     0 )
  74.      if [ "$DISPLAY" != "" ]; then
  75.       zenity --title="Mount-or-Umount" --info --text="Odpojení $MOUNT_POINT bylo úspěšné..."
  76.      else
  77.       echo Odpojení $MOUNT_POINT bylo úspěšné...
  78.      fi 
  79.      
  80.     ;;
  81.     * )
  82.      if [ "$DISPLAY" != "" ]; then
  83.       zenity --title="Mount-or-Umount" --text-info --filename="$OUT_FILE" --width=600 --height=100
  84.      else
  85.       echo Chyba při pokusu o odpojení $MOUNT_POINT...
  86.       cat $OUT_FILE
  87.      fi 
  88.     ;;
  89.    esac   
  90.  
  91. fi
  92.  
  93. rm $OUT_FILE 2>/dev/null
  94. rmdir $LOG_DIR 2>/dev/null
  95.  
  96. exit 0

A výsledek je snadný, stačí například spustit:

BASH:
  1. mount-or-umount /media/uzivatel@sambaserver //sambaserver/uzivatel smbfs username=jmeno%heslo

a nebo pokud je již definováno ve fstab:

BASH:
  1. mount-or-umount /media/windows

Výstupy jsou opravdu pěkné :-)

Mount-or-Umount a výstup do X-Windows/Gnome ze skriptu (zenity)

Mount-or-Umount a výstup do X-Windows/Gnome ze skriptu (zenity)

Mount-or-Umount a výstup do X-Windows/Gnome ze skriptu (zenity)

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í. ;-)

Slabé...Jde to...Pěkné...Perfektní...Excelentní... (hlasováno 3x, průměr: 3,33 z max. 5)
Loading ... Loading ...
Obdobné články:

Zanechte, prosím, komentář

XHTML: Můžete použít tyto značky: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Mount-or-Umount a výstup do X-Windows/Gnome ze skriptu (zenity)

Slabé...Jde to...Pěkné...Perfektní...Excelentní... (Nebylo zatím hodnoceno.)
Loading ... Loading ...
Obdobné články:

Zanechte, prosím, komentář

XHTML: Můžete použít tyto značky: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Mount-or-Umount a výstup do X-Windows/Gnome ze skriptu (zenity)

Slabé...Jde to...Pěkné...Perfektní...Excelentní... (Nebylo zatím hodnoceno.)
Loading ... Loading ...
Obdobné články:

Zanechte, prosím, komentář

XHTML: Můžete použít tyto značky: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Mount-or-Umount a výstup do X-Windows/Gnome ze skriptu (zenity)

Slabé...Jde to...Pěkné...Perfektní...Excelentní... (Nebylo zatím hodnoceno.)
Loading ... Loading ...
Obdobné články:

Zanechte, prosím, komentář

XHTML: Můžete použít tyto značky: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>