Kiedy zawieszam komputer, NetworkManager
wyłącza sieć bezprzewodową (w nm-manager.c:do_sleep_wake
).
Chciałbym jednak nadal używać sieci przez bardzo krótki czas (do odmontowywania cifs
montowań, które w przeciwnym razie uniemożliwiłyby mój system po wznowieniu).
Jak mogę NetworkManager
nie wyłączać mojej sieci? Czy można poczekać kilka sekund (lub dopóki coś się nie uruchomi lub zamek zostanie zwolniony)?
Powiązane: pm-utils: Brak sieci w zawieszonych skryptach?
dziennik debugowania:
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
EDYCJA: Aby to wyjaśnić, posiadanie skryptów /etc/pm/sleep.d
nie pomaga, ponieważ sieć jest już wyłączona, gdy tylko skrypt zostanie wykonany.
networkmanager
power-management
C-Otto
źródło
źródło
gnome-control-center
.Odpowiedzi:
Nie wiem, czy jest to standard, ale w Ubuntu istnieją skrypty, które są uruchamiane przed zawieszeniem / po wznowieniu do
/etc/pm/sleep.d
i od/usr/lib/pm-utils/sleep.d
. W moim systemie wydaje się, że sieć jest zamknięta przez/usr/lib/pm-utils/sleep.d/60_wpa_supplicant
.Możesz napisać skrypt na przykład,
/etc/pm/sleep.d/10-umount
aby odmontować swoje udziały przed zawieszeniem. Struktura tych skryptów jest taka:Zauważ, że jeśli skrypt zwróci ogólny błąd, zawieszenie zostanie przerwane, więc zadbaj o to (zwłaszcza, że ty, podobnie jak ja, używasz do zamykania pokrywy i przechowywania laptopa z dala ...). Aby napisać scenariusz do bardziej złożonych rzeczy, dziękuję Samuelowi Peterowi za jego komentarz:
Możesz nawet zamontować je ponownie po wznowieniu automatycznie; od tutaj znalazłem, że:
Więc umieszczenie tego samego skryptu
umount
imount command
powinno działać (w trybie zawieszenia jest wykonywane przed zamknięciem sieci, a następnie wznowione).Ogniwo w swoim pytaniu jest jednoznaczne; z mojej interpretacji wynika, że jeśli NetworkManager wyłączy sieć przed uruchomieniem skryptów na poziomie 00-50, jest to błąd --- przynajmniej jeśli połączenie jest oznaczone jako połączenie systemowe (w Ustawieniach sieci -> Opcje -> Tożsamość - > Udostępnij innym użytkownikom).
źródło
pm-utils
powinien być dostępny we wszystkich dystrybucjach głównego nurtu i prawdopodobnie jest domyślnie instalowany.$NA
jest „nie dotyczy”,$DX
jest „wyłączony” i$NX
„nie jest wykonywalny” . Zobaczhook_exit_status
funkcję w skrypcie funkcji pmsystem connection
nieruchomość. EDYCJA: To już byłosystem connection
.Opierając się na tym, co powiedział @ensc, możesz zamiast tego samodzielnie nasłuchiwać tego sygnału D-Bus (sesji systemowej). Ogólny przepływ pracy z
org.freedesktop.login1.Manager
interfejsem byłby następujący:Inhibit(what, who, why, mode)
what
:sleep
lubshutdown:sleep
who
:unmount_cifs
lub jakkolwiek nazwiesz swój skryptwhy
:unmounting cifs X before suspend ...
lub równoważnymode
:delay
wstrzymać na maks. 5s (domyślnie) lubblock
do blokowania na czas nieokreślony (polecam pierwszy. Jeśli twój skrypt się zatrzyma, twój notebook nigdy nie położy się spać.)PrepareForSleep
, która powraca,True
gdy ma się zawiesić lub hibernować, a takżeFalse
wznowić i rozmrozićPrepareForShutdown
, który powraca,True
gdy ma się zamknąć i powinien powrócićFalse
po ponownym włączeniu (zamiast tego powraca równieżFalse
w tym samym czasie, co wraca,True
co nie ma dla mnie sensu, więc zignorowałbym tęFalse
część tutaj; prawdopodobnie masz już jakiś skrypt automatyczny) i tak przy starcie systemu, prawda?)True
sygnału (tj. odmontowaniem), zwalniasz blokadę, zamykając deskryptor pliku (zwracany przezInhibit(...)
), aby maszyna mogła przejść w tryb uśpienia lub zamknięcia tak szybko, jak to możliwe, bez oczekiwania na całe 5 sekund ( lub nawet na czas nieokreślony wblock
trybie)False
sygnałem (wznawianie / rozmrażanie) przez ponowne zamontowanie (być może najpierw czekanie na powrót sieci), a następnie utworzenie nowej blokady za pomocąInhibit(...)
(na następny sen lub wyłączenie)W Pythonie (2.7) może to wyglądać następująco:
W tej Gist znajdziesz moje opakowanie wokół Pidgin, aby rozłączyć konta IM podczas uśpienia i zamknięcia, stosując dokładnie to samo podejście.
Zobacz także oficjalną dokumentację freedesktop na temat Blokad Inhibitorów i
logind
API D-Bus .źródło
Możesz spróbować dowiedzieć się, dlaczego
nm
wyłącza się urządzenia:Kiedy (jak w moim przypadku (Fedora 20))
systemd
wyzwala sygnał, możesz odmówić jego dostarczenia w konfiguracji dbus:Niestety, zasady te nie są zbyt szczegółowe i będą blokować
PrepareForSleep
sygnał również dla innych procesów.źródło
Spróbuj zamknąć usługę przed zawieszeniem i uruchom ponownie po wznowieniu. Tak:
http://oleeekchoff.blogspot.ie/2012/05/restart-modulesservices-after.html
źródło