Automatyczne montowanie pendrive na USB

Czyli jak najefektywniej (lub efektowniej) skonfigurować Slackware'a w komputerze domowym

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
KLAPEK
Użytkownik
Posty: 843
Rejestracja: 2004-06-13, 21:00

Automatyczne montowanie pendrive na USB

Post autor: KLAPEK »

No właśnie mam taki problemik.
W pracy ludziska podłączają coraz to inne pendrivy i mam problem z montowaniem.
Do tej pory był firmowy > miał ikonkę na pulpicie z okresleniem /dev/sda1, później doszedł aparat firmowy > /dev/sdb1.
Te urzadzenia maja to ustawione na sztywno + odpowiednie wpisy w fstab.

Ale ostatnio chcą podłączać własne pendrivy i mam problem ;)

Chodziło by mi [chyba] o skrypt, który sprawdzi w /var/log/messages jaka literka i cyferka została przypisana danemu penowi i po kliknięciu na ikonę pena na pulpicie zamontuje go.

Chodzi mi o coś w stylu:

Kod: Zaznacz cały

mount /dev/sd* /mnt/usb
Jak coś takiego można rozwiązać?
Nie chodzi mi nawet o pełną automatykę - czyli podłączenie pena=zamontowanie.
Wystarczy by udało mi się stworzyć skrót na pulpicie, po kliknięciu którego zostanie zamontowany aktualnie podłaczony pendrive z dowolną literką i cyferką sda1, sab1, sda4...

Z góry dziękuję za wszelkie wskazówki :)

PS na google, forum, faq, propozycje do faq szukałem, ale niestety nic nie znalazłem.
Państwowa dziwka, flądra w jedwabiu i złocie. || Chcą za nią tren nieść, duszę włócząc w błocie. || Cyril Tourneur (1575-1625) ||
#318805 @ Slackware GNU/Linux
Lone_wolf

Re: Automatyczne montowanie pendrive na USB

Post autor: Lone_wolf »

Odczyt z /proc/partitions?? . Np cat /proc/partitions > plik.Później odczyt ostatniej linijki w pliku bo tam będzie na 100% litera podłączonego pendriva i np warunek by pobrał ostatnią linijkę z pliku i jeżeli to jest np sda1 to ma wykonać mount /mnt/punkt montowania.Ale nawet jak to wypali to user musi tego pena odmontować, tylko jak?.

Kod: Zaznacz cały

3     0   78150744 hda
   3     1   11261533 hda1
   3     2   21013020 hda2
   3     3          1 hda3
   3     4   13823932 hda4
   3     5     530113 hda5
   3     6   31519498 hda6
   8     0     125952 sda
   8     1     125936 sda1
Tu masz wynik cat /proc/artitions > plik.Tu widać włożony, niepodmontowany pendrive.Skrypt musiałby odczytać ostatnią linijkę i na tej podstawie wykonać mount.
Ostatnio zmieniony 2007-01-12, 11:00 przez Lone_wolf, łącznie zmieniany 1 raz.
Awatar użytkownika
dawidmo
Użytkownik
Posty: 307
Rejestracja: 2006-08-24, 16:16
Lokalizacja: Pszczyna
Kontakt:

Re: Automatyczne montowanie pendrive na USB

Post autor: dawidmo »

Jak masz jajko 2.6 to możesz wykorzystać do tego celu udev-a :arrow: http://www.reactivated.net/writing_udev_rules.html
Aby chciało mi się tak bardzo, jak mi się nie chce ;]
Awatar użytkownika
KLAPEK
Użytkownik
Posty: 843
Rejestracja: 2004-06-13, 21:00

Re: Automatyczne montowanie pendrive na USB

Post autor: KLAPEK »

Czy w S11 coś się zmieniło w tym temacie?
Widzę że pojawił się w drzewie katalog /media.
Mam standardowego kernela 2.4.33-3.
Chodziło by mi o coś jak najmniej inwazyjnego ;) jako że jest to komp w pracy i nie chiałoby mi się kilkakrotnie kompilować kernela i tym samym zajmować kompa uniemożliwiając innym pracę...
Państwowa dziwka, flądra w jedwabiu i złocie. || Chcą za nią tren nieść, duszę włócząc w błocie. || Cyril Tourneur (1575-1625) ||
#318805 @ Slackware GNU/Linux
Awatar użytkownika
Lashlo
Użytkownik
Posty: 108
Rejestracja: 2006-02-26, 12:13

Re: Automatyczne montowanie pendrive na USB

Post autor: Lashlo »

Ja mam "odtwarzacz mp4" który nigdy nie wiadomo pod jaką literką się kryje a więc używam czegoś takiego:

Kod: Zaznacz cały

#!/bin/bash
echo "Automount started"
if [ -e /dev/sdb ]
then
	echo "Jest co montowac"
	umount /mnt/mp4 2>/dev/null
	mount /dev/sdb /mnt/mp4
	exit 0
fi
if [ -e /dev/sda ]
then
	echo "jest co montowac"
	umount /mnt/mp4 2>/dev/null
	mount /dev/sda /mnt/mp4
	exit 0
fi

if [ -e /dev/sdc ] 
then
	echo "Jest co montowac"
	umount /mnt/mp4 2>/dev/null
	mount /dev/sdc /mnt/mp4
	exit 0
fi
exit 1
Można by było też stworzyć do każdego urządenia zrobić inny skrypt i umieścić go np. /usr/local/bin
Ostatnio zmieniony 2007-04-03, 21:25 przez Lashlo, łącznie zmieniany 1 raz.
Awatar użytkownika
KLAPEK
Użytkownik
Posty: 843
Rejestracja: 2004-06-13, 21:00

Re: Automatyczne montowanie pendrive na USB

Post autor: KLAPEK »

Niestety nie działa ;/
Jak próbowałem wg Twojego opisu to dostawałem komunikat iż nie ma urządzenia sdb.
Jak zmieniłem na sdb1, sda1 etc, to jako że pierwszy jest sdb, a potem sda to próbuje podłączyć pierwszy i kończy komunikatem iż nie znaleziono urządzenia.
Przydałby się taki skrypt co sprawdza wszystkie i podłącza właściwy.
W Twoim skrypcie zatrzymuje się na pierwszym i kończy.
Państwowa dziwka, flądra w jedwabiu i złocie. || Chcą za nią tren nieść, duszę włócząc w błocie. || Cyril Tourneur (1575-1625) ||
#318805 @ Slackware GNU/Linux
mpier
Użytkownik
Posty: 1002
Rejestracja: 2005-10-01, 13:24
Lokalizacja: Blachownia||Cz-wa

Re: Automatyczne montowanie pendrive na USB

Post autor: mpier »

Na 2.4 można hotpluga wykorzystać. Poszukaj na googlach, o konfiguracji hotpluga, kiedyś w linux+ było, albo w linux magazine.
Awatar użytkownika
KLAPEK
Użytkownik
Posty: 843
Rejestracja: 2004-06-13, 21:00

Re: Automatyczne montowanie pendrive na USB

Post autor: KLAPEK »

Wstukałem w google, ale niestety nie znalazłem nic konkretnego.
Przeszukałem też archiwum lm i l+ i nadal nic ;/
Jakby Ci wpadł w oczy numer - napisz :)
Państwowa dziwka, flądra w jedwabiu i złocie. || Chcą za nią tren nieść, duszę włócząc w błocie. || Cyril Tourneur (1575-1625) ||
#318805 @ Slackware GNU/Linux
Awatar użytkownika
KLAPEK
Użytkownik
Posty: 843
Rejestracja: 2004-06-13, 21:00

Re: Automatyczne montowanie pendrive na USB

Post autor: KLAPEK »

Raport z placu boju ;)

1. wyszukałem coś takiego jak autofs.
NIE DZIAŁA ;/
http://www.linuxquestions.org/questions ... id=1149234
- odpaliłem demona - /etc/rc.d/rc.autofs

Kod: Zaznacz cały

 ps -ef |grep auto
root      7244     1  0 15:29 pts/3    00:00:00 /usr/sbin/automount --timeout=1 /media/usbpen file /etc/autofs.map

Kod: Zaznacz cały

cat /etc/autofs.conf
# For details of the format look at autofs(8).
# mountpoint      map   options  # see also: man 8 autofs
/media/usbpen     /etc/autofs.map  --timeout=1

Kod: Zaznacz cały

cat /etc/autofs.map
# /etc/auto.map
# mountpoint_key options location_device # man 5 autofs
#cdrom0   -fstype=auto,ro,nosuid,nodev,user :/dev/cdrom
#floppy0  -fstype=auto,sync,dirsync,nosuid,nodev,noexec,user,gid=100,umask=000 :/dev/fd0
usb0     -fstype=auto,sync,dirsync,nosuid,nodev,noexec,user,gid=100,umask=000 :/dev/sda1
usb1     -fstype=auto,sync,dirsync,nosuid,nodev,noexec,user,gid=100,umask=000 :/dev/sdb1
usb2     -fstype=auto,sync,dirsync,nosuid,nodev,noexec,user,gid=100,umask=000 :/dev/sdc1
I po włożeniu pendrive nie dzieje się nic ;/
/var/log/messages

Kod: Zaznacz cały

Apr  4 15:39:09 hannah kernel: hub.c: new USB device 00:10.4-1, assigned address 35
Zawartość /media/usbpen jest pusta.

Paczka autofs standardowa z S11

Kod: Zaznacz cały

autofs-3.1.7-i386-1
Plik rc.autofs jak i autofs.conf i map pochodzą z linuxpackages.
rc.autofs:

Kod: Zaznacz cały

cat /etc/rc.d/rc.autofs
#!/bin/bash
#
# Slackware rc file for automount (file type maps only)
# Severely handicapped rc.autofs.in from autofs-3.1.7 package
# Andrei Osin <osin@izmiran.ru>
#
# Adapted by Wanderson Santiago dos Reis <wandersonsreis (at) gmail dot com>
# for package autofs-config
#
# In Slackware, this file should be called:
# /etc/rc.d/rc.autofs

if [ ! -f /etc/slackware-version ]; then
echo "This is not a Slackware system" 1>&2
exit 1
fi

#
# Location of the automount daemon
#

DAEMON=`which automount`
test -e $DAEMON || exit 1

# Additional map options
localoptions=''

# This function will build a list of automount commands to execute in
# order to activate all the mount points.

function getmounts()
{
   # Check for local maps to be loaded
   if [ -f /etc/autofs.conf ]; then
      cat /etc/autofs.conf | sed -e '/^#/d' -e '/^$/d'| (
         # These are automount options
         while read dir map options
         do
            if [ -f $map ]; then
               echo "$DAEMON $options $dir file $map $localoptions"
            fi
         done
      )
   fi
}

#
# Status lister.
#
function status()
{
   test `ps ax|grep -c automount` -eq 0 &&
   echo "Automount is not running..." &&
   exit
   echo "Configured Mount Points:"
   echo "------------------------"
   getmounts | cut -d' ' -f3
   echo ""
   echo "Active Mount Points:"
   echo "--------------------"
   getmounts | cut -d' ' -f3 | while read dir
   do
      mount | grep -v automount | grep $dir | cut -d' ' -f3
   done
}

function autofs_reload()
{
   if [ ! -f /var/lock/subsys/autofs ]; then
      echo "Automounter not running..."
      exit 1
   fi
   echo "Checking for changes to /etc/autofs.conf ..."
   TMP1=`mktemp /tmp/autofs.XXXXXX` || { echo "could not make temp file" >& 2; exit 1; }
   TMP2=`mktemp /tmp/autofs.XXXXXX` || { echo "could not make temp file" >& 2; exit 1; }
   getmounts > $TMP1
   ps ax | grep "[0-9]:[0-9][0-9] $DAEMON " | (
      while read pid tt stat time command; do
         echo "$command" >> $TMP2
         if ! grep -q "^$command" $TMP2; then
            kill -USR2 $pid
            echo "Stop $command"
         fi
      done
   )
   cat $TMP1 | (
      while read x; do
         if ! grep -q "^$x" $TMP2; then
            $x
            echo "Start $x"
         fi
      done
   )
   rm -f $TMP1 $TMP2
}

function autofs_start()
{
   # Check if the automounter is already running?
   if [ ! -f /var/lock/subsys/autofs ]; then
      echo -n 'Starting automounter: '
      echo -n
      getmounts | cut -d' ' -f3
      getmounts | sh
      touch /var/lock/subsys/autofs
   fi

   autofs_reload
}

function autofs_stop()
{
   if [ -f /var/lock/subsys/autofs ]; then
      echo -n 'Stopping automounter: '
      echo -n
      getmounts | cut -d' ' -f3

      kill -TERM $(/sbin/pidof $DAEMON) 1> /dev/null 2>&1
      rm -f /var/lock/subsys/autofs 1> /dev/null 2>&1
   else
      echo "Automounter not running..."
   fi
}

case "$1" in
   start)
      autofs_start
   ;;
   stop)
      autofs_stop
   ;;
   reload)
      autofs_reload
   ;;
   status)
      status
   ;;
   *)
echo "Usage: $0 {start|stop|reload|status}"
exit 1
esac

exit 0
Co robię nie tak?
Czy ktoś z Was ma doświadczenie z autofs?


----

2. Znalazłem też coś takiego z regułkami udev.
http://archlinux.org/pipermail/arch/200 ... 06162.html

Czy mogę to zastosować?
/etc/rc.d/rc.udev mam +x, kernel 2.4.33-3
Jeśli tak, to gdzie należy je wpisać?
Państwowa dziwka, flądra w jedwabiu i złocie. || Chcą za nią tren nieść, duszę włócząc w błocie. || Cyril Tourneur (1575-1625) ||
#318805 @ Slackware GNU/Linux
Awatar użytkownika
tad
Użytkownik
Posty: 349
Rejestracja: 2005-08-02, 11:07
Lokalizacja: Kraków

Re: Automatyczne montowanie pendrive na USB

Post autor: tad »

Warto by podglądnąć jak to działa na ".Mandrive 2007". A działa bez zarzutu.
* Tad *
Awatar użytkownika
k-men
Użytkownik
Posty: 49
Rejestracja: 2005-09-10, 19:50
Lokalizacja: ~/

Re: Automatyczne montowanie pendrive na USB

Post autor: k-men »

A może supermount? Albo jeśli korzystasz z kde możesz użyć hala.
Kto był na morzu, ten nie będzie się bał kałuż.
mpier
Użytkownik
Posty: 1002
Rejestracja: 2005-10-01, 13:24
Lokalizacja: Blachownia||Cz-wa

Re: Automatyczne montowanie pendrive na USB

Post autor: mpier »

O autofs jest już chyba na forum, poszukaj.
Udev jest dla 2.6.
Nie pamiętam co to było o hotplugu, o ile kojarzę to coś o aparatach, albo skanerach... Format pliku znajdziesz na googlach np tak z brzegu: http://www.qsl.net/n0nb/linux/debianhotplug.html
Awatar użytkownika
Lashlo
Użytkownik
Posty: 108
Rejestracja: 2006-02-26, 12:13

Re: Automatyczne montowanie pendrive na USB

Post autor: Lashlo »

Ja bym jeszcze spróbował napisać skrypt który przetwarza /proc/partitions. Np. jeśli cat /proc/partitions | grep sda zwróci że się wykonał to wtedy montujemy /dev/sda jeśli nie to sprawdzamy to dla sdb, sdd itp.
Awatar użytkownika
KLAPEK
Użytkownik
Posty: 843
Rejestracja: 2004-06-13, 21:00

Re: Automatyczne montowanie pendrive na USB

Post autor: KLAPEK »

No właśnie o coś takiego mi chodzi, tylko niestety ja sam ni eznam się na pisaniu skryptów i nie zrobię tego ;/
Może ktoś z Was byłby tak miły... :)
PS jak podpiąć później taki skrypcik pod ikonkę pendrive na pulpicie KDE by było widać zamontowanie i możliwość odmontowania urządzenia?
Bo tam tylko można sztywno podpiąć pod /dev/sdxx.
Państwowa dziwka, flądra w jedwabiu i złocie. || Chcą za nią tren nieść, duszę włócząc w błocie. || Cyril Tourneur (1575-1625) ||
#318805 @ Slackware GNU/Linux
Awatar użytkownika
Lashlo
Użytkownik
Posty: 108
Rejestracja: 2006-02-26, 12:13

Re: Automatyczne montowanie pendrive na USB

Post autor: Lashlo »

Coś takiego naskrobałem:

Kod: Zaznacz cały

#!/bin/bash
if  grep -qw "sda" /proc/partitions
then
	umount /mnt/sda 2>/dev/null
	mount /dev/sda /mnt/sda
	echo "montuje sda"
fi

if grep -qw "sdb" /proc/partitions
then
	umount /mnt/sdb 2>/dev/null
	mount /dev/sdb /mnt/sdb
	echo "montuje sdb"
fi

if grep -qw "sdc" /proc/partitions
then
	umount /mnt/sdc 2>/dev/null
	mount /dev/sdc /mnt/sdc
	echo "montuje sdc"
fi

if grep -qw "sdd" /proc/partitions
then
	umount /mnt/sdd >/dev/null
	mount /dev/sdd /mnt/sdc
	echo "montuje sdd"
fi
exit 1
Oczywiście katalogi /mnt/* i urządzenia /dev/sd* powinieneś zmienić sobie na takie z jakimi masz do czynienia.
ODPOWIEDZ