J'ai un partage Samba dans mon réseau local afin de pouvoir écouter ma musique tranquillement depuis mon ordinateur dans le bureau alors que les fichiers sont sur mon serveur dans le salon.
Je peux accéder à mes fichiers sur le partage avec mon navigateur de fichier mais cela me pose un problème avec VLC (que j'utilise comme lecteur de musique) : il n'arrive pas à jouer les fichiers s'ils sont dans un sous-répertoire du répertoire que j'ai glissé depuis Dolphin. Si j'ai bien compris, c'est la faute à KIO, la bibliothèque qui permet à Dolphin d'accéder au partage Samba. En clair, VLC est capable de lire les fichiers directement contenus dans Album/
, mais pas d'aller lire ce qu'il y a dans Artiste/Album/
si je lui glisse le dossier Artiste
.
OSEF, faisons un montage à l'ancienne, en ligne de commande !
sudo mount -t cifs //XXX/anonymous/ /media/XXX -o guest
Oui, ça fonctionne… sauf quand je ne suis plus sur le réseau (coupure du réseau, j'embarque mon pc pour aller donner un cours, etc). Et là, c'est le drame : plus moyen d'enlever ce montage. Ça bloque.
Il suffit donc de démonter le partage samba avant. Mais je ne peux anticiper les coupures réseau, et je sais que je ne penserais pas toujours à ça en débranchant mon pc.
Je vais donc, en bon adminSys fainéant que je suis, automatiser tout ça.
Pré-requis : utiliser NetworkManager.
Il faut créer des scripts qui vont monter et démonter le partage après la connexion au réseau et avant sa déconnexion.
Mettez ceci dans /etc/NetworkManager/dispatcher.d/99-mount-samba
:
#!/bin/sh
IFACE=$1
ACTION=$2
case $CONNECTION_ID in
Votre_reseau)
case ${ACTION} in
up)
mount -t cifs //XXX/anonymous/ /media/XXX -o guest
;;
esac
;;
esac
Votre_reseau
est évidemment à modifier selon le nom que vous avez donné à votre connexion dans NetworkManager. Si vous voulez utiliser ça pour plusieurs réseaux (comme par exemple votre connexion filaire et votre connexion Wifi, vous pouvez mettre Votre_reseau1|Votre_reseau2)
.
Mettez ceci dans /etc/NetworkManager/dispatcher.d/pre-down.d/99-umount-samba
:
#!/bin/sh
IFACE=$1
ACTION=$2
case $CONNECTION_ID in
Votre_reseau)
case ${ACTION} in
pre-down)
#lsof -t /media/XXX | xargs kill
umount -l /media/XXX
;;
esac
;;
esac
Vous noterez le lsof -t /media/XXX | xargs kill
avant l'appel d'umount
. En effet, vous ne pourrez pas démonter le partage s'il est utilisé.
Faites donc attention ! Autant ce n'est pas grave si mon script coupe VLC (ça empêche même VLC de s'emballer en crachant un nombre infini d'erreurs), autant si vous travaillez sur votre partage samba avec, disons, LibreOffice, cela risquerait de vous faire perdre votre travail. Ce n'est donc pas pour tous les usages.
EDIT : plus besoin du lsof -t /media/XXX | xargs kill
, Olivier M. vient de porter à ma connaissance, en commentaire, l'option -l
d'umount
:
-l, --lazy
Démontage paresseux. Détacher maintenant le système de fichiers de la hiérarchie de fichiers et effacer toutes les références vers ce système de fichiers dès qu'il n'estplus occupé (nécessite un noyau 2.4.11 ou ultérieur).
N'oublions pas de rendre exécutable ces scripts :
chmod +x /etc/NetworkManager/dispatcher.d/99-mount-samba \
/etc/NetworkManager/dispatcher.d/pre-down.d/99-umount-samba
Et voilà ! Un petit systemctl restart NetworkManager
et ça devrait tourner comme une horloge.
Crédits : Photo par Thomas Kvistholt sur Unsplash
Sinon, un umount -l pourrait être plus sympa qu’un kill suivi d’un umount, non?
Ouh, je connaissais pas ! Merci, je vais tester 🙂
Ah oui, c’est mieux, je vais modifier l’article, merci beaucoup !
Salut,
Je me posais justement la question de savoir si on pouvait scripter des choses avec network-manager. Dans mon cas, je voudrais lancer des services en fonction du réseau auquel je suis connecté en DHCP (J’utiliserai le même nom de connexion dans Network-manager). C’est à dire:
si je suis connecté à 192.168.0.x on ne fait rien, si je suis connecté à 10.42.0.x on lance Apache et Samba.
Est ce que c’est possible?
A priori oui, mais je dirais qu’il va falloir détecter ton IP manuellement : http://sysadminsjourney.com/content/2008/12/18/use-networkmanager-launch-scripts-based-network-location/
EDIT : J’ai trouvé les variables d’environnement disponibles dans le contexte d’un tel script (https://people.freedesktop.org/~lkundrak/nm-docs/NetworkManager.html). `IP4_ADDRESS_0` devrait faire ton affaire.
Super, il faudra que j’essaie ça!
Vu que tu n’habites relativement pas trop loin, j’en profite pour te faire part de la Journée Du Libre qu’on organise à Sarrebourg:
http://jdl-sarrebourg.fr/doku.php
Au cas où tu voudrais nous donner un coup de main, on fait une réunion sur Mumble ce dimanche, tu peux me contacter par mail si tu veux plus d’infos.
PS: On a des gens de Nancy qui viennent nous aider
Désolé, j’aurai fait une semaine de JRES la semaine d’avant, je profiterai du weekend du 25 pour me reposer. Mais merci de la proposition 🙂
Dear Luc, any news on when lut.im will be up again?
I didn’t knew it was down until this morning, I reloaded it. It’s now up and running.
salut,
à mon avis, tu peux faire pareil avec wicd (que je préfère à NetworkManager).