Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/11/2006, à 13:43

Shivan

Monter des repertoires, en meme temps qu'un volume.

Hello, j'ai une question un peu technique pour mon niveau, mais je pense que les magiciens ici presents sauront m'aider.

J'ai un disque dur usb avec un repertoire que j'aimerais partager, mais ca me gave de monter a la main a chaque fois, je voudrais donc savoir comment lancer une ligne de commande a la connexion de mon disque. Je sais que ce genre de chose est possible au branchement sur le secteur pour un portable, mais la, ca doit faire appel a HAL et je sais pas comment m'y prendre.

si quelqu'un a une idee, je suis preneur

Hors ligne

#2 Le 07/11/2006, à 15:05

bertrand0

Re : Monter des repertoires, en meme temps qu'un volume.

Tu crées un fichier mapreference.fdi dans /etc/hal/fdi/policy
Qui contient une variation sur le thème qui suit:

<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
<!-- 
  Sélection unique d'un périphérique et ajout d'un script qui sera exécuté
  pour tout changement de l'état HAL du périphérique
  avec HALD_ACTION=add ou HALD_ACTION=remove dans l'environnement du démon hald.
-->
  <device>
    <match key="volume.uuid" string="XXXX-XXXX">
      <match key="@block.storage_device:storage.serial" string="YYYYYYYYYY">
        <append key="info.callout.add" type="strlist">/usr/local/bin/monscript</append>
        <append key="info.callout.remove" type="strlist">/usr/local/bin/monscript</append>
      </match>
    </match>
  </device>
</deviceinfo>

Tu peux déterminer XXXX et YYYY à l'aide du gestionnaire de périphérique dans le menu Système/Administration.
Et un script dans /usr/local/bin, nommé monscript

#!/bin/sh
# ces commandes seront exécutées en tant qu'utilisateur hal ou root selon 
# la config du démon
case "$HALD_ACTION" in
  add)
    #éventuellement avec un sudo -u monutilisateur
    #à condition de supprimer l'exigence de password dans sudoers pour hal
    #sauf si hal est déjà root
    mes_commandes_pour_partager
    ;;
  remove)
    #éventuellement avec un sudo -u monutilisateur
    #à condition de supprimer l'exigence de password dans sudoers pour hal
    #suaf si hal est déjà root
    mes_commandes_pour_arreter_le_partage
    ;;
  *)
    echo Erreur dans $0!!
    exit 0
    ;;
esac

Voilà l'idée. La sélection la clé du périphérique peux se fair avec seulement XXXX ou YYYY au besoin, mais garder les deux diminue les risque d'erreur dans la mesure où les serials des periph usb ne sont pas toujours uniques. Tu peux aussi faire la sélection avec l'udi au lieu de l'uuid. Ce serait d'ailleurs peut-être plus judicieux.
Les commandes de monscript sont exécutées en tant que hal ou root selon la config de hal, donc s'il y a des commandes privilégiées à lancer il peut être utile de faire appel à sudo, en modifiant /etc/sudoers de façon adéquate. Ou bien on peut utiliser le bit setuid (maisil y a des restrictions pour les scripts).

Dernière modification par bertrand0 (Le 07/11/2006, à 15:07)


Ceux qui écrivent comme ils parlent, quoiqu'ils parlent très bien, écrivent mal.
                                                            Buffon, Discours sur le style

Hors ligne

#3 Le 07/11/2006, à 15:27

Shivan

Re : Monter des repertoires, en meme temps qu'un volume.

wahou, merci, je vais essayer ca

juste une quesion, YYYY c'est l'udi ?

Hors ligne

#4 Le 07/11/2006, à 16:07

mitaSk

Re : Monter des repertoires, en meme temps qu'un volume.

J'ai peut etre mal compris ton sujet, mais je ne vois pas pourquoi tu dois monter ton DDexterne ainsi que ton repertoire à chaque fois pour le partage. J'ai deux disques durs externes en usb un qui est totalement partagé en reseau Ubuntu/ubuntu et Ubuntu/windows  et l'autre ou il y a juste mon dossier 'ziks' qui est partagé avec les deux pc l'un sous ubuntu l'autre sous windows et je n'ai pas besoin de monter mon Disque dur ni mes dossiers à chaque fois (demarrage par exemple).

Oo je cherche à comprendre désoler si jsuis peut etre à coté de se que tu demandes.


-¤ ooOOoo ¤ - pOm pOm Galli UniVersitY -¤ ooOOoo ¤ -
                            - SheRaF nUmber oNe -

Hors ligne

#5 Le 07/11/2006, à 16:49

bertrand0

Re : Monter des repertoires, en meme temps qu'un volume.

Ah oui, c'est vrai ! Quand le disque n'est pas monté on partage un répertoire vide et puis c'est tout, pourquoi vouloir annuler le partage à chaque fois ?

XXXX c'est l'uuid du volume monté
YYYY c'est le serial number du périphérique usb, (voir la clef storage.serial dans le gestionnaire de périphérique), mais tu peux éventuellement retirer le match correspondant s'il ne t'intéresse pas.

Dernière modification par bertrand0 (Le 07/11/2006, à 16:51)


Ceux qui écrivent comme ils parlent, quoiqu'ils parlent très bien, écrivent mal.
                                                            Buffon, Discours sur le style

Hors ligne

#6 Le 07/11/2006, à 17:38

Shivan

Re : Monter des repertoires, en meme temps qu'un volume.

hmm merde, suis con, c'est bien fait linux quand meme. big_smile

Hors ligne

#7 Le 07/11/2006, à 23:23

paulmillot

Re : Monter des repertoires, en meme temps qu'un volume.

Bon, je post même si je comprend pas bien pourquoi HAL (quoi HAL d'ailleurs, je ne sais point), une chose est sûre en tout cas : pas besoin de HAL pour partager des répertoires au démarage, il suffit, dans Système, Préférences, Cessions d'ajouter dans l'onglet "programmes au démarage" la commande :

sudo  /etc/init.d/nfs-kernel-server start

pas besoin d'éditer sudoers, non plus...

... Et pas besoin de défaire le réseau / le désactiver pour démonter les volumes... même usb, même firewire

pour le réseau Ubuntu/Ubuntu : nfs (de quel type de réseau parle-t-on déjà ?), la doc est ici :
http://doc.ubuntu-fr.org/applications/nfs
pour le réseau Ubuntu/Windows : samba - là il faut avoir un réseau configuré sous Windows, la doc est ici :
http://doc.ubuntu-fr.org/applications/samba

Voilà... Si ça se trouve je suis à côté de la plaque, il y a tant de chose que je ne connais pas... mais à la lecture de la description du problème je suis quand même étonné de la solution apportée... a moins en fait que le réseau n'ai rien à voir là dedans et qu'il s'agisse d'un problème Hardware... (tous les disques dur et clé usb se sont toujours montées automatiquement chez moi... et ailleurs).
Bref, si lapin compris expliquez moi, je suis curieux de comprendre...


OSx86 iATKOS / Ubuntu 6.10 / Windows XP PRO - Intel Q6600 / GA-P35-DS3 / Nvidia GeForce 7300GT 256Mo  / 3 Go pc6400 800Mhz

Hors ligne

#8 Le 08/11/2006, à 01:58

bertrand0

Re : Monter des repertoires, en meme temps qu'un volume.

Le pb ce n'est pas au démarrage, mais à la connection du disque.

Petite précision sur le fonctionnement du système quand un périph. apparaît:
1) un périphérique usb est branché sur l'ordinateur
2) le noyau génère un évènement pour udev, histoire de lui dire qu'il doit faire qq chose.
3) udev réfléchit un peu, et s'arrange pour charger les modules nécessaires, créer les fichiers nodes, entreprendre n'importe quelle action supplémentaire prévue dans sa config, notamment informer hal qu'un nouveau périph vient d'apparaître.
4) hal (Hardware Abstraction Layer, en gros une couche intermédiaire destinée à fournir une interface uniformisée d'accès à des matériels variés) est informé par udev, et donc s'en va recueillir toutes les infos nécessaires pour publier ce nouveau périph.  Publier signifie entre autres informer les applis qui l'ont demandé de l'apparition de ce périph., via dbus
4) gnome-volume-manager est informé via gnome-vfs via dbus de l'apparition du disque usb, et décide tout naturellement de le monter, via pmount.
5) c'est fini, la machine se repose.

La modif que je proposais n'est pas parfaite ni idéale mais elle devrait marcher: le fichier mapreference.fdi fait en sorte que lorsque le periph apparaît, avant que hal ne le publie, le script monscript est appelé. Ceci dit, ça me fait remarquer que la série de commandes à ajouter que je n'ai pas mise pour le partage doit rendre la main à hal, puis attendre que le volume soit effectivement monté avant d'effectuer le partage, dans le cas add. Par exemple en utilisant dbus-monitor pour qu'il attende le signal envoyé à gnomevfs lorsque le volume est monté (ne serait-ce que pour connaître le point de montage). A la limite, si on est près à laisser tourner un dbus-monitor dès le début de chaque session, on peut laisser tomber mapreference.fdi et monscript puisque dans ce cas on monitore en permanence les messages de l'interface org.gnome.GnomeVFS.Daemon dans l'attente des signaux VolumeMountedSignal et VolumePreUnmountSignal. L'avantage dans ce cas est que toutes les modifs se font côté utilisateur au lieu d'aller dans /etc, et plus besoin de sudo.

Pour finir, la remarque de mitask est à mon avis toujours valable, il serait bcp plus simple de mettre un répertoire vide en partage, et de faire en sorte que le périph usb soit systématiquement monté dans ce répertoire. (Par exemple en ajoutant dans fstab une ligne avec l'uuid du volume et le nom dudit répertoire). Dans ce cas plus besoin de s'embêter avec tout le bazar que j'ai mis plus haut.


Ceux qui écrivent comme ils parlent, quoiqu'ils parlent très bien, écrivent mal.
                                                            Buffon, Discours sur le style

Hors ligne

#9 Le 08/11/2006, à 11:18

paulmillot

Re : Monter des repertoires, en meme temps qu'un volume.

Waou ! bertrand0 t'en connais un rayon !
J'espère tomber sur toi si j'ai un jour un gros problème !
En tout cas merci pour toutes ces explication. On en apprend tous les jours sur ce forum. C'est tout simplement génial !
Paul


OSx86 iATKOS / Ubuntu 6.10 / Windows XP PRO - Intel Q6600 / GA-P35-DS3 / Nvidia GeForce 7300GT 256Mo  / 3 Go pc6400 800Mhz

Hors ligne