Cette question est similaire, mais un peu à l’opposé de ce que je veux. Je veux que les lecteurs USB externes soient montés automatiquement au démarrage, sans que personne ne soit connecté, à des emplacements tels que /media/<label>
.
Je ne veux pas avoir à entrer toutes les données dans fstab, en partie parce que c'est fastidieux et ennuyeux, mais surtout parce que je ne peux pas prédire ce que je vais y brancher ni comment les partitions vont changer à l'avenir.
Je veux que les lecteurs soient accessibles à des éléments tels que MPD et disponibles lorsque je me connecte avec SSH. gnome-mount
semble ne monter que lorsque vous êtes connecté localement à une session graphique Gnome.
linux
ubuntu
usb-flash-drive
external-hard-drive
mount
endolithe
la source
la source
/usr/local/sbin/udev-automounter.sh mount %k
devrait être/usr/local/sbin/udev-automounter.sh %k
. Pardon.\x20
. donc ce n'est pas joli, mais ça va marcher. udev ne gère pas bien les étiquettes avec espaces, mais il existe une autre option qui utilise des traits de soulignement au lieu de\x20
's (donc au moins, ça a l'air sympa). semble que la gestion de l'espace doit aller dans les scripts de shell.Réponses:
vol_id
commande obsolète .vol_id
a été remplacé parblkid
. Pour corriger le script, remplacez "vol_id" par "blkid -o udev" dans leudev-auto-mount.sh
script.Cela fait un moment que je me cogne la tête et je pense avoir trouvé une solution efficace. Ceci est développé et testé sur un système basé sur Debian, il devrait donc fonctionner sur Ubuntu. Je ferai remarquer les hypothèses sur lesquelles il repose afin que celui-ci puisse également être adapté à d'autres systèmes.
/media/LABEL
répertoire sur lequel monter le périphérique.gksudo
ou similaire.Je n'ai pas testé cela au démarrage du système, mais la seule raison pour laquelle je vois que cela pourrait ne pas fonctionner est si le système essaie de monter le lecteur USB avant que le système ne soit prêt pour le montage. Si tel est le cas, vous aurez probablement besoin d'un ajustement supplémentaire pour le script de montage. (Je vérifie avec ServerFault pour voir s'il y a un conseil, mais cela ne suscite pas beaucoup d'intérêt.)
Sur, alors.
Références UDEV:
Contexte (UDEV? Whuzzat?)
UDEV est le système hotplug du noyau. C'est ce qui configure automatiquement les périphériques et les liens symboliques de périphérique appropriés (par exemple
/dev/disk/by-label/<LABEL>
), à la fois au moment du démarrage et pour les périphériques ajoutés lorsque le système est en cours d'exécution.D-Bus et HAL sont utilisés pour envoyer des événements matériels à des écouteurs tels que Desktop Environments. Ainsi, lorsque vous vous connectez à GNOME et insérez un CD ou branchez une clé USB, cet événement suit cette chaîne:
Et hop, votre disque est monté. Mais dans un système sans tête, nous ne voulons pas avoir à nous connecter pour profiter des avantages du montage automatique.
Règles d'Udev
Puisque UDEV nous permet d’écrire des règles et d’exécuter des programmes lors de l’insertion de périphériques, c’est un choix idéal. Nous allons tirer parti des règles existantes de Debian / Ubuntu, leur laisser configurer le
/dev/disk/by-label/<LABEL>
lien symbolique pour nous et ajouter une autre règle qui montera le périphérique pour nous.Les règles de UDEV sont conservées dans
/etc/udev/rules.d
(et/lib/udev/rules.d
sur le karmique) et sont traitées dans l'ordre numérique. Tout fichier ne commençant pas par un numéro est traité après les fichiers numérotés. Sur mon système, les règles HAL se trouvent dans un fichier appelé90-hal.rules
. J'ai donc inséré mes règles89-local.rules
pour qu'elles soient traitées avant d'arriver à HAL. Avant tout, vous devez vous assurer que ces règles se produisent après la60-persistent-storage.rules
.local.rules
peut être assez bon.Mettez ceci dans votre nouveau fichier de règles:
Assurez-vous qu'il n'y a pas d'espace après le
\
, juste unnewline
(\n
).Passez
SUBSYSTEMS=="usb"
à l'SUBSYSTEMS=="usb|ieee1394"
assistance Firewire.Si vous souhaitez que le périphérique appartienne toujours à un utilisateur particulier, ajoutez une
OWNER="username"
clause. Si vous avez juste besoin des fichiers appartenant à un utilisateur particulier, modifiez le script de montage à la place.Lire la règle
Cela ajoute un programme à exécuter à la liste des programmes à exécuter du périphérique. Il identifie les périphériques de partition USB par
<LABEL>
, puis transmet ces informations à un script qui effectue le montage. Plus précisément, cette règle correspond:ENV{ID_FS_LABEL_ENC}=="?*"
- une variable d'environnement définie par une règle système antérieure. N'existe pas pour les systèmes non-fichiers, c'est pourquoi nous le vérifions. Nous voulons en fait utiliserID_FS_LABEL
le point de montage, mais je n’ai pas convaincu UDEV de le lui échapper, nous allons donc laisser le script de montage le gérer.Cette variable, ainsi que d’autres, est obtenue par udev à l’aide de la
vol_id
commande ( obsolète ). C’est un outil pratique pour voir de jolis détails rapides sur une partition:ACTION=="add"
- seulement lesadd
événements de match ...SUBSYSTEMS=="usb"
- correspond uniquement aux périphériques présents sur le bus USB. Nous utilisonsSUBSYSTEMS
ici parce que cela correspond aux parents de notre appareil; le dispositif qui nous intéresse sera en réalité SOUS-SYSTÈME == "scsi". La correspondance avec un périphérique USB parent évite d’ajouter notre programme aux lecteurs internes.RUN+="..."
- pas une correspondance, mais une action: ajoutez ce programme à la liste des programmes à exécuter. Dans les arguments du programme,%k
est étendu au nom de périphérique (par exemplesdc1
, not/dev/sdc1
) et$env{FOO}
obtient le contenu de la variable d'environnement FOO.Tester la règle
Le premier lien de référence (ci-dessus) est un excellent tutoriel UDEV, mais il est légèrement obsolète. Les programmes qu'il exécute pour tester vos règles (
udevtest
en particulier) ont été remplacés par l'udevadm
utilitaire catch-all .Après avoir ajouté la règle, branchez votre appareil. Donnez-lui quelques secondes, puis vérifiez le périphérique auquel il est affecté:
Si votre lecteur amovible contient
label_Baz
, c'est sur le périphériquesdc1
. Exécutez ceci et regardez le résultat vers la fin:Recherchez le nom de script de notre
RUN+=
règle dans les dernières lignes (3ème à partir du bas dans cet exemple). Vous pouvez voir les arguments qui seraient utilisés pour ce périphérique. Vous pouvez exécuter cette commande maintenant pour vérifier que les arguments sont corrects. si cela fonctionne sur votre ligne de commande, il devrait fonctionner automatiquement lorsqu'un périphérique est inséré.Vous pouvez également surveiller les événements UDEV en temps réel: exécutez
sudo udevadm monitor
(voirman udevadm
pour plus de détails sur les commutateurs). Ensuite, branchez simplement un nouvel appareil et regardez les événements défiler. (Probablement exagéré sauf si vous êtes dans les détails vraiment bas ...)Recharger les règles
Une fois que vous avez vérifié que la règle est lue correctement, vous devez dire à UDEV de recharger ses règles pour que la nouvelle prenne effet. Utilisez l’une de ces méthodes (si la première ne fonctionne pas, la seconde devrait ... mais essayez la première):
courir
sudo udevadm control --reload-rules
courir
sudo /etc/init.d/udev reload
redémarrer
Scénario! En fait, 2 scripts ...
Voici le premier script. Comme le programme que nous exécutons doit être terminé rapidement, le second script est alors lancé en arrière-plan. Mettez ceci dans
/usr/local/sbin/udev-automounter.sh
:Voici le deuxième script. Cela fait un peu plus de vérification d'entrée. Mettez ceci dans
/usr/local/sbin/udev-auto-mount.sh
. Vous voudrez peut-être modifier les options de montage ci-dessous. Ce script gère maintenant la recherche de la partition LABEL par elle-même; UDEV n'envoie que le nom DEVICE.En cas de problème lors du montage des lecteurs au démarrage , vous pouvez en ajouter un long
sleep 60
dans ce script, afin de laisser le temps système de se dérouler avant que le script ne tente de monter le lecteur.J'ai donné dans les commentaires une suggestion sur la façon de vérifier (exécuter
ps
pour voir si un serveur Web est en cours d'exécution), mais vous voudrez modifier cela pour votre système. Je pense que la plupart des serveurs de réseau que vous utiliseriez suffiraient - nfsd, smbd, apache, etc. Le risque, bien sûr, est que le script de montage échoue si le service ne fonctionne pas L'existence d'un fichier particulier serait une meilleure solution.Script de nettoyage super bonus!
Un autre script. Tout cela consiste à démonter le périphérique et à supprimer les répertoires du point de montage. Il suppose qu'il a des privilèges pour le faire, vous devrez donc l'exécuter avec
sudo
. Ce script prend maintenant le point de montage complet sur la ligne de commande, par exemple:Mettez ceci dans
/usr/local/sbin/udev-unmounter.sh
:la source
Une dernière option suggérée par d’autres sur le réseau est
ivman
, mais cela semble dépendre depmount
ce que vous avez déjà dit ne fonctionne pas.pmount
est abandonné etivman
est presque le même.Le remplacement pour
ivman
ishalevt
est disponible en karmique. C'est une réimplémentation deivman
(lire: "maintenu" et "ne dépend pas de pmount"). Le paquet n'est pas disponible sur Jaunty, mais vous pourrez peut-être le construire vous-même si vous ne prévoyez pas de mise à niveau.Ces deux outils sont situés au-dessus des couches DBus et HAL et répondent aux événements qui en découlent. Apparemment, les deux peuvent s’exécuter en tant que démon système ou en tant que gestionnaire de montage de session utilisateur (à la manière de Gnome-VFS) - les
/etc/defaults/{ivman,halevt}
fichiers sont chargés des paramètres système.Voici quelques instructions pour peaufinage
ivman
d'utiliser les/media/<LABEL>
points de montage. Il est probable que lahalevt
solution soit plus simple, mais peut-être qu’ils vous aideront à trouver une réponse.Travailler avec HALEVT
Mise à jour : Dans l’intérêt d’obtenir des montages de CD automagiques, ce que ma réponse UDEV ne fournit pas, j’ai jeté un œil plus profond
halevt
. J'ai trouvé cet article de blog qui a permis d'expliquer beaucoup de choses sur le processus. J'ai dû compiler mon proprehalevt
paquet pour Debian Lenny (heureusement, toutes les dépendances se trouvaient dans la section lenny-backports). Une fois installé, le processus était généralement pas-horrible:/etc/default/halevt
/etc/PolicyKit/PolicyKit.conf
(voir ci-dessous; source )/etc/hal/fdi/policy/preferences.fdi
(voir ci-dessous)eject.hal
scénario du blogpost ci - dessus, modifier et enregistrer en/usr/local/bin
./etc/halevt/halevt.xml
Si vous devez redémarrer les démons HAL et HALEVT pour vérifier vos nouvelles configurations, utilisez ceci pour les obtenir dans le bon ordre:
Étape 1
Vérifiez que
START_DAEMON=yes
dans/etc/default/halevt
.Étape 2
Dans
/etc/PolicyKit/PolicyKit.conf
, ajoutez ceci à l' intérieur de la<config></config>
section:Étape 3
Dans
/etc/hal/fdi/policy/preferences.fdi
, ajoutez ceci à l' intérieur de la section `:Étape 4
Le script est bon mais doit être exécuté
/bin/bash
; certains systèmes peuvent réellement utiliser/bin/dash
quand/bin/sh
est appelé. Changez donc la première ligne du script pour vous assurer d’obtenir la bonne:Étape 5
C'est la partie amusante. Votre système peut
/etc/halevt/halevt.xml
déjà fournir une base , vous devrez donc l’adapter à votre usage personnel. Dans mon cas, mon système offrait déjà un montage amovible de base, mais je devais ajouter un support pour le montage sur CD-ROM et le bouton d’éjection.Le billet de blog que j'ai mentionné présente un bon exemple de configuration XML à consulter pour vos propres modifications. Il s'agit principalement de mettre en place un remplacement gnome-mount pour l'
fluxbox
environnement de l'auteur . Son exemple XML en fait plus que vous ne le souhaitez, mais constitue un excellent moyen de vous faire une idée de ce que vous pouvez faire. Il y a aussi de bons exemples dans/usr/share/doc/halevt/examples
.Je devais aussi courir
sudo sh -c "mkdir /var/halevt ; chown halevt:plugdev /var/halevt"
avant que tout fonctionne.Voici mes ajouts pour faire fonctionner le montage automatique de CD / DVD:
Étape 6
Une fois que le démon halevt-system fonctionne, vous devez le désactiver lorsque vous vous connectez à GNOME et le redémarrer à nouveau lorsque vous vous déconnectez. (Voir ma réponse à cette question pour les gestionnaires de connexion non-GDM.) Ceci est théorique puisque je ne l'utilise pas, mais cela devrait fonctionner.
Dans
/etc/gdm/PreSession/Default
, ajoutez ceci pour arrêter le système halevt-daemon:Dans
/etc/gdm/PostSession/Default
, ajoutez ceci pour redémarrer le système halevt-daemon:la source
Au fil du temps, des solutions plus faciles apparaissent.
Cette solution repose sur le progiciel udevil qui a été écrit à cette fin et ne nécessite aucun bricolage avec les règles udev. C'est probablement préférable (aux nouveaux et anciens utilisateurs) comme solution simple.
Le
devmon
script de udevil fait toute la magie en ne dépendant que de udev et de glib. Fonctionne presque hors de la boîte sans avoir besoin de configuration initiale.Tout ce que j'ai fait sur mon poste de travail a été d'appeler devmon de la manière
rc.local
suivante:devmon 2>&1 >> /var/log/devmon &
pour votre confort, vous pouvez l'intégrer à un script d'init au lieu d'
rc.local
utiliser un outil automatisé permettantpleaserun
de le créer: https://unix.stackexchange.com/ a / 124609/42673Après l'avoir exécuté, le stockage que je connecte est inspecté (il recherche les partitions et, le cas échéant, examine leurs étiquettes de système de fichiers), puis monté dans
/media/FILESYSTEM_LABEL
.Vous ne pouvez imaginer rien de plus simple que cela, si ce n’est peut-être le fameux système (in) célèbre d’incorporer cette fonctionnalité à un moment donné dans l’avenir.
Udevil At A Glance ( github.io/udevil )
Script: devmon ( igurublog / script-devmon )
la source
La réponse de quack quixote ne fonctionne pas sous Ubuntu Lucid Lynx (10.04) - il n'y a pas de
/sbin/vol_id
commande.Plutôt que d’être chic et d’utiliser udev, mettez ceci dans votre /etc/rc.local et faites-le:
la source
Pour les systèmes basés sur Debian (p. Ex. Ubuntu, etc.), le paquet usbmount monte automatiquement les clés USB pour vous. Comme il a déjà été expliqué, il utilise une approche basée sur udev, à la différence qu’il s’agit simplement d’une installation de paquet. Il semble que l' auteur original du paquet soit à bout de souffle, mais Ubuntu / Debian semble toujours le maintenir (je suppose que ce n'est pas si complexe) - il est donc toujours disponible dans les dernières versions.
Les scripts installés peuvent être configurés (/etc/usbmount/usbmount.conf) pour fournir les points de montage appropriés.
la source
Pour éliminer les excellentes instructions de retrait de quack quixote:
Ajoutez la ligne suivante au fichier de règles udev que vous avez créé précédemment (/etc/udev/rules.d) "
Créez ensuite le script suivant et exécutez-le (/usr/local/sbin/udev-autounmounter.sh) avec le contenu suivant:
Enfin, le script Unmount lui-même (udev-auto-unmount.sh):
Donc, avec les autres instructions, le répertoire apparaîtra automatiquement et disparaîtra sur les événements udev.
la source
if [ -n "$device_is_mounted" ]; then
devrait êtreif [ -z "${MOUNTPT}" ]; then
, ne devrait pas?Vous voudrez peut-être essayer Pysdm
la source
Vous pouvez essayer de mettre
su username -c gnome-volume-manager
/etc/rc.local. Il suffirait peut-être simplement de lancer gnome-volume-manager.Edit: Il semble que gnome-volume-manager ne fait plus partie de la distribution par défaut, même sur le bureau Ubuntu.
Cependant, peut-être que si vous l'installez, cela fonctionnera toujours. Ça vaut la peine d'essayer. Si cela ne fonctionne pas, supprimez-le à nouveau.
Il y a aussi le
usbmount
paquet, qui fait ce que vous voulez, mais peut éventuellement interférer avec le montage automatique.la source
Mes addenda modifiés pour la solution basée sur udev de quack quixote ont été rejetés, je vais donc les mettre ici. S'il vous plaît se référer à son poste en premier.
Tout, si vous voulez d' abord votre règle udev d'agir lorsque tout appareil est connecté via le sous - système SCSI (qui inclut à la fois USB, FireWire et eSATA), changer le match de la règle dans SUBSYSTEMS udev à
SUBSYSTEMS=="scsi"
.Cependant, gardez à l’esprit que cela montera automatiquement à peu près tout, y compris les lecteurs internes, si vous les branchez à chaud pendant que le système est en cours d’exécution, il est donc possible que ce ne soit pas ce que vous voulez.
Deuxièmement, voici le script que j'utilise, qui remplace tous les scripts de ce post. Il nettoie également automatiquement les points de montage créés dans / media / dès que le périphérique de bloc monté est supprimé - aucune intervention manuelle n'est nécessaire. En outre, plutôt que d’appeler un autre script à exécuter en arrière-plan, il se met en arrière-plan s’il n’est pas exécuté à partir d’un terminal (par exemple, s’il est exécuté via udev).
Il utilise inotifywait pour attendre que le périphérique monté disparaisse, puis supprime le répertoire créé. Par conséquent, vous devez avoir installé inotify-tools sur votre système. Sur les distributions basées sur Debian (y compris Ubuntu), cela
sudo apt-get install inotify-tools
devrait suffire.Vous noterez que je monte des périphériques sans synchronisation et en lecture seule. C’est parce que, dans 99% des cas, mon cas d’utilisation est la lecture d’un lecteur externe, et chaque fois que j’ai besoin d’écrire sur celui-ci, je vais quand même être actif sur le serveur et pouvoir facilement passer une
mount -o remount,rw <mountpoint>
commande. Modifier pour répondre à vos besoins :)la source
halevt
ne semble pas être unapt-get
paquet capable actuel pour les versions modernes.Essayez de configurer via mountmanager pour ne pas avoir à saisir les données manuellement.
Cela devrait faire partie du dépôt ubuntu.
la source
Si vous n'avez qu'un seul lecteur monté à la fois, vous pouvez simplement le modifier dans votre
/etc/fstab
fichier. Quelque chose dans le genre de:Cela devrait le monter au démarrage et le rendre accessible à toute personne ayant une permanente. Si vous avez plusieurs lecteurs, vous pouvez toujours le faire avec:
la source