Lorsque je suspends mon ordinateur portable, NetworkManager
désactive le réseau sans fil (in nm-manager.c:do_sleep_wake
).
Cependant, j'aimerais toujours utiliser le réseau pendant très peu de temps (pour démonter les cifs
supports, ce qui rendrait mon système inutilisable lors de la reprise).
Comment puis-je faire pour NetworkManager
ne pas désactiver mon réseau? Est-il possible d'attendre quelques secondes (ou jusqu'à ce que quelque chose se déclenche ou qu'un verrou soit libéré)?
Connexes: pm-utils: aucun réseau dans les scripts de suspension?
journal de débogage:
Feb 8 10:03:23 zenbook NetworkManager[3606]: <debug> [1360314203.373226] [nm-manager.c:3391] upower_sleeping_cb(): Received UPower sleeping signal
Feb 8 10:03:23 zenbook NetworkManager[3606]: <info> sleep requested (sleeping: no enabled: yes)
Feb 8 10:03:23 zenbook NetworkManager[3606]: <info> sleeping or disabling...
Feb 8 10:03:23 zenbook NetworkManager[3606]: <info> (wlan0): now unmanaged
EDIT: Pour être clair, avoir des scripts /etc/pm/sleep.d
n'aide pas car le réseau est déjà désactivé dès qu'un script est exécuté.
gnome-control-center
.Réponses:
Je ne sais pas si c'est standard, mais dans Ubuntu il y a des scripts qui sont exécutés avant la suspension / après la reprise dans
/etc/pm/sleep.d
et en/usr/lib/pm-utils/sleep.d
. Dans mon système semble que le réseau est arrêté par/usr/lib/pm-utils/sleep.d/60_wpa_supplicant
.Vous pouvez par exemple écrire un script pour
/etc/pm/sleep.d/10-umount
démonter vos partages avant de suspendre. La structure de ces scripts est la suivante:Notez que si le script retourne une erreur générique, la suspension est abandonnée, alors faites attention à cela (surtout vous, comme moi, utilisez pour fermer le couvercle et ranger l'ordinateur portable ...). Pour écrire des choses plus complexes, merci à Samuel Peter pour son commentaire:
Vous pouvez même les remonter automatiquement après la reprise; à partir d' ici j'ai trouvé que:
Donc, mettre le même script le
umount
etmount command
devrait fonctionner (en suspension, il est exécuté avant la fermeture du réseau, et en reprise après cela).Le lien dans votre question est révélateur; c'est mon interprétation que si NetworkManager arrête le réseau avant que les scripts au niveau 00-50 soient exécutés, c'est un bug --- au moins si la connexion est marquée comme connexion système (dans Paramètres réseau -> Options -> Identité - > Rendre disponible à un autre utilisateur).
la source
pm-utils
devrait être disponible sur toutes les distributions traditionnelles et est probablement installé par défaut.$NA
est "non applicable",$DX
est "désactivée" et$NX
"n'est pas exécutable" . Voir lahook_exit_status
fonction dans le script pm-functionssystem connection
propriété. EDIT: C'était déjà unsystem connection
.En vous basant sur ce que @ensc a dit, vous pouvez plutôt écouter ce signal D-Bus (session système) vous-même. Le flux de travail général avec l'
org.freedesktop.login1.Manager
interface serait:Inhibit(what, who, why, mode)
what
:sleep
oushutdown:sleep
who
:unmount_cifs
ou ce que vous appellerez votre scriptwhy
:unmounting cifs X before suspend ...
ou équivalentmode
:delay
inhiber pendant max. de 5 s (par défaut) oublock
à bloquer indéfiniment (je recommanderais le premier. Si votre script se bloque, votre ordinateur portable ne se mettra jamais en veille.)PrepareForSleep
, qui revientTrue
quand sur le point de suspendre ou d'hiberner etFalse
lors de la reprise et de la décongélation)PrepareForShutdown
, qui revient auTrue
moment de l'arrêt et devrait revenirFalse
lors de la remise sous tension (à la place, il revient égalementFalse
en même temps qu'il revient,True
ce qui n'a aucun sens pour moi, donc je voudrais simplement ignorer laFalse
partie ici; vous avez probablement déjà une sorte de script de montage automatique sur le démarrage du système de toute façon, non?)True
signal (c'est-à-dire le démontage), vous libérez le verrou en fermant le descripteur de fichier (renvoyé parInhibit(...)
), afin que la machine puisse se mettre en veille ou s'arrêter le plus rapidement possible sans attendre les 5 secondes entières ( ou même indéfiniment enblock
mode)False
signal (reprise / décongélation) en remontant (peut-être en attendant d'abord que le réseau se remette en marche) puis en créant un nouveau verrou avecInhibit(...)
(pour la prochaine mise en veille ou l'arrêt)En Python (2.7), cela pourrait ressembler à:
Dans ce Gist, vous trouverez mon enveloppe autour de Pidgin pour déconnecter les comptes de messagerie instantanée en veille et à l'arrêt, en utilisant exactement la même approche.
Voir également la documentation officielle de freedesktop sur les verrous inhibiteurs et l'
logind
API D-Bus .la source
Vous pouvez essayer de découvrir pourquoi l'
nm
arrêt des appareils:Lorsque (comme dans mon cas (Fedora 20)),
systemd
déclenche le signal, vous pouvez refuser sa livraison dans la configuration dbus:Malheureusement, ces règles ne sont pas très fines et elles bloqueront également le
PrepareForSleep
signal pour d'autres processus.la source
Essayez d'arrêter le service avant de suspendre et de recommencer après la reprise. Comme ça:
http://oleeekchoff.blogspot.ie/2012/05/restart-modulesservices-after.html
la source