View previous topic :: View next topic |
Author |
Message |
GothicKnight Tux's lil' helper
Joined: 02 Aug 2004 Posts: 123 Location: Santa Maria da Feira/Portugal
|
Posted: Fri Sep 02, 2005 7:29 pm Post subject: Problemas com vol_id [RESOLVIDO] |
|
|
Eu à uns tempos atrás andei à procura de um script que me fizesse o automount dos dispositivos USB.
Que era o seguinte tirando algumas modificações que eu fiz:
Code: |
#!/bin/bash
base=$(basename $DEVNAME)
#Send info to logger
#logger -t automount_dev "`env`"
echo " " >> /var/log/messages
echo " >> Automounter Script on $DEVNAME" >> /var/log/messages
#Check to see if the device is a sdX1 device
if [[ $base != sd[a-h][1-9] ]]
#if [ ! -b /dev/$base ]
then
echo " > Rejecting device..." >> /var/log/messages
exit
fi
#Do this when adding the plugged device
if [ "$ACTION" == "add" ]
then
echo " > Action: $ACTION device: /dev/$base" >> /var/log/messages
#Retrieve info about the added device and store into variables
#product=$(udevinfo -a -p $DEVPATH | grep SYSFS{product} -m 1 | cut --delim='"' -f2)
#vendor=$(udevinfo -a -p $DEVPATH | grep SYSFS{vendor} -m 1 | cut --delim='"' -f2)
#serial=$(udevinfo -a -p $DEVPATH | grep SYSFS{serial} -m 1 | cut --delim='"' -f2)
#volumeID=`udev_volume_id -l /dev/$base`
#echo " > Product: $product, Vendo: $vendor, Serial: $serial" >> /var/log/messages
#echo "$base+$DEVPATH+$vendor+$product+$serial" >> /tmp/$base
#Create mount point and mount the device to it with proper access
mkdir /mnt/USB/$base
FS=`vol_id -t /dev/$base`
echo " > Volume Filesystem is: $FS" >> /var/log/messages
if [ $FS = "reiserfs" ]
then
mount -t $FS -o sync /dev/$base /mnt/USB/$base
echo " > Mounted /dev/$base in /mnt/USB/$base with code $?" >> /var/log/messages
fi
if [ $FS = "vfat" ]
then
mount -t $FS -o sync,defaults,umask=0 /dev/$base /mnt/USB/$base
echo " > Mounted /dev/$base in /mnt/USB/$base with code $?" >> /var/log/messages
fi
if [ $FS = "ntfs" ]
then
mount -t $FS -o sync,umask=0 /dev/$base /mnt/USB/$base
echo " > Mounted /dev/$base in /mnt/USB/$base with code $?" >> /var/log/messages
fi
#Create a KDE link file for use on the desktop (used for KDE 3.4)
#--Link name is generated from the devices' vendor, product, serial and $base
#echo "[Desktop Entry]" >> /tmp/link2$base
#echo "Dev=/dev/$base" >> /tmp/link2$base
#echo "Encoding=UTF-8" >> /tmp/link2$base
#echo "Icon=usbpendrive_mount" >> /tmp/link2$base
#echo "MountPoint=/mnt/usb/$base" >> /tmp/link2$base
#echo "Name=$vendor $product [$serial] on $base" >> /tmp/link2$base
#echo "Name[en_US]=$vendor $product [$serial] on $base" >> /tmp/link2$base
#echo "ReadOnly=False" >> /tmp/link2$base
#echo "Type=FSDevice" >> /tmp/link2$base
#echo "UnmountIcon=usbpendrive_unmount" >> /tmp/link2$base
#echo "Encoding=UTF-8" >> /tmp/link2$base
#Copy the link file to all users' Desktops and to the root's
#for x in /home/*; do cp /tmp/link2$base $x/Desktop/link2$base; done
#cp /tmp/link2$base /root/Desktop/link2$base
fi
#Do this when the device is unplugged
if [ "$ACTION" == "remove" ]
then
echo " > ACTION: $ACTION DEVICE: /dev/$base" >> /var/log/messages
#Retrieve the serial number of the device from the /tmp/$base file
#--only needed for checking for specific devices
#serial=$(cat /tmp/$base | cut --delim='+' -f5)
#Unmount the device and cleanup references
#fuser -m -k /mnt/USB/$base
umount -l /mnt/USB/$base
rm -rf /mnt/USB/$base
#rm -f /tmp/link2$base
#rm -f /tmp/$base
#Remove KDE Desktop links created
#for x in /home/*; do rm -f $x/Desktop/link2$base; done
#rm -f /tmp/$base /root/Desktop/$base
fi
|
O problema que tenho agora é que o FS=`vol_id -t /dev/$base` não me devolve qualquer valor quando executado no script. Executando à parte não tenho qualquer problema. O script está no local /etc/dev.d/ e tem como nome new.script.dev.
Tirando do /var/log/messages tenho...
Code: |
>> Automounter Script on /dev/sdf1
> Action: add device: /dev/sdf1
> Volume Filesystem is:
|
Copiando só a linha aparece-me
Code: |
DarkStar log # FS=`vol_id -t /dev/sdf1`
DarkStar log # echo $FS
ntfs
|
Já tentei por um sleep acima para que o programa tivesse tempo para averiguar o FS do dispositivo, mas sem sucesso.
Dado que sou um bocado novo nas andanças de programação de bash script gostava de saber opiniões de possiveis razões. _________________ Se a vida não te sorri... Faz-lhe cocegas.
Last edited by GothicKnight on Sat Sep 03, 2005 1:56 pm; edited 1 time in total |
|
Back to top |
|
|
MetalGod Bodhisattva
Joined: 10 Mar 2003 Posts: 816 Location: Portugal
|
Posted: Sat Sep 03, 2005 3:12 am Post subject: |
|
|
para fazer isso sem trabalho nenhum basta usares
udev+dbus+hal e por exemplo o gnome-volume-manger que e' o que uso
ao que parece o KDE 3.4.x ja traz tb um deamon que faz o mesmo _________________ ex: Gentoo Linux Developer: amd64 media-optical sound gnome
ex: Portuguese Moderator
------------------------------------------------------------------------------
God Doesn't Play Dice |
|
Back to top |
|
|
GothicKnight Tux's lil' helper
Joined: 02 Aug 2004 Posts: 123 Location: Santa Maria da Feira/Portugal
|
Posted: Sat Sep 03, 2005 7:33 am Post subject: |
|
|
Não o KDE tem um pseudo mounter que monta dispositivos que estejam no fstab e com os devidas permissões.
Ok instalei o gnome-volume-manager e está a montar os dispositivos mas não consigo aceder aos NTFS usando um utilizador normal. Já andei a procurar nos forums, mas nada em concreto ou que consiga perceber. _________________ Se a vida não te sorri... Faz-lhe cocegas. |
|
Back to top |
|
|
MetalGod Bodhisattva
Joined: 10 Mar 2003 Posts: 816 Location: Portugal
|
Posted: Sat Sep 03, 2005 12:52 pm Post subject: |
|
|
de volta ao velho topico das permissoes.
Nao sei bem ao certo (pq ha anos que nao uso dualboot) mas sei que se adicionares uma linha no /etc/fstab consegues ler e escrever em partiçoes fat32/ntfs como user.
Nao sei se dara mas tenta adiconar a linha user ao /etc/fstab
/dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro,users
por exemplo. _________________ ex: Gentoo Linux Developer: amd64 media-optical sound gnome
ex: Portuguese Moderator
------------------------------------------------------------------------------
God Doesn't Play Dice |
|
Back to top |
|
|
GothicKnight Tux's lil' helper
Joined: 02 Aug 2004 Posts: 123 Location: Santa Maria da Feira/Portugal
|
Posted: Sat Sep 03, 2005 1:10 pm Post subject: |
|
|
lol, parece que sim... Neste caso não se pode fazer nada com o fstab pois este é modificado quando o dispositivo é desligado e/ou ligado.
Eu neste portatil tenho que ter dualboot para trabalhos de escola (Borland C++,....) e o disco em questão é um externo de 200GB que infelismente tem que estar em NTFS porque FAT32 só suporta partições até cerca de 30GB.
Já agora a questão das permissões ainda não foi resolvida e quando tento enviar algo atravez do KDE usando o menu copyto->Root-> crash dai que precisava de saber também como ler a pasta / _________________ Se a vida não te sorri... Faz-lhe cocegas. |
|
Back to top |
|
|
GothicKnight Tux's lil' helper
Joined: 02 Aug 2004 Posts: 123 Location: Santa Maria da Feira/Portugal
|
Posted: Sat Sep 03, 2005 1:55 pm Post subject: |
|
|
Eu nunca gostei de resolver problemas simplesmente mudando para outros problemas. Daí que me apercebi de uma coisa muito simples e desde já obrigado em lembrar-me das permissões. O problema era, quando chamava o programa vol_id o udev (não sei se tem utilizador próprio ou executa como root) não o encontrava e tive que trocar simplesmente para /sbin/vol_id fossem todos os meus problemas assim...
Script completo caso alguem queira experimentar
Code: |
#!/bin/bash
base=$(basename $DEVNAME)
#Send info to logger
#logger -t automount_dev "`env`"
echo " " >> /var/log/messages
echo " >> Automounter Script on $DEVNAME" >> /var/log/messages
#Check to see if the device is a sdX1 device
if [[ $base != sd[a-h][1-9] ]]
#if [ ! -b /dev/$base ]
then
echo " > Rejecting device..." >> /var/log/messages
exit
fi
#Do this when adding the plugged device
if [ "$ACTION" == "add" ]
then
echo " > Action: $ACTION device: /dev/$base" >> /var/log/messages
#Retrieve info about the added device and store into variables
#product=$(udevinfo -a -p $DEVPATH | grep SYSFS{product} -m 1 | cut --delim='"' -f2)
#vendor=$(udevinfo -a -p $DEVPATH | grep SYSFS{vendor} -m 1 | cut --delim='"' -f2)
#serial=$(udevinfo -a -p $DEVPATH | grep SYSFS{serial} -m 1 | cut --delim='"' -f2)
#volumeID=`udev_volume_id -l /dev/$base`
#echo " > Product: $product, Vendo: $vendor, Serial: $serial" >> /var/log/messages
#echo "$base+$DEVPATH+$vendor+$product+$serial" >> /tmp/$base
#Create mount point and mount the device to it with proper access
mkdir /mnt/USB/$base
FS=`/sbin/vol_id -t /dev/$base`
if [ $FS = "reiserfs" ]
then
mount -t $FS -o sync /dev/$base /mnt/USB/$base
echo " > Mounted /dev/$base in /mnt/USB/$base with code $?" >> /var/log/messages
fi
if [ $FS = "vfat" ]
then
mount -t $FS -o sync,defaults,umask=0 /dev/$base /mnt/USB/$base
echo " > Mounted /dev/$base in /mnt/USB/$base with code $?" >> /var/log/messages
fi
if [ $FS = "ntfs" ]
then
mount -t $FS -o sync,umask=0 /dev/$base /mnt/USB/$base
echo " > Mounted /dev/$base in /mnt/USB/$base with code $?" >> /var/log/messages
fi
#Create a KDE link file for use on the desktop (used for KDE 3.4)
#--Link name is generated from the devices' vendor, product, serial and $base
#echo "[Desktop Entry]" >> /tmp/link2$base
#echo "Dev=/dev/$base" >> /tmp/link2$base
#echo "Encoding=UTF-8" >> /tmp/link2$base
#echo "Icon=usbpendrive_mount" >> /tmp/link2$base
#echo "MountPoint=/mnt/usb/$base" >> /tmp/link2$base
#echo "Name=$vendor $product [$serial] on $base" >> /tmp/link2$base
#echo "Name[en_US]=$vendor $product [$serial] on $base" >> /tmp/link2$base
#echo "ReadOnly=False" >> /tmp/link2$base
#echo "Type=FSDevice" >> /tmp/link2$base
#echo "UnmountIcon=usbpendrive_unmount" >> /tmp/link2$base
#echo "Encoding=UTF-8" >> /tmp/link2$base
#Copy the link file to all users' Desktops and to the root's
#for x in /home/*; do cp /tmp/link2$base $x/Desktop/link2$base; done
#cp /tmp/link2$base /root/Desktop/link2$base
fi
#Do this when the device is unplugged
if [ "$ACTION" == "remove" ]
then
echo " > ACTION: $ACTION DEVICE: /dev/$base" >> /var/log/messages
#Retrieve the serial number of the device from the /tmp/$base file
#--only needed for checking for specific devices
#serial=$(cat /tmp/$base | cut --delim='+' -f5)
#Unmount the device and cleanup references
#fuser -m -k /mnt/USB/$base
umount -l /mnt/USB/$base
rm -rf /mnt/USB/$base
#rm -f /tmp/link2$base
#rm -f /tmp/$base
#Remove KDE Desktop links created
#for x in /home/*; do rm -f $x/Desktop/link2$base; done
#rm -f /tmp/$base /root/Desktop/$base
fi
|
_________________ Se a vida não te sorri... Faz-lhe cocegas. |
|
Back to top |
|
|
|