Когда я приостанавливаю свой ноутбук, NetworkManager
отключает беспроводную сеть (в nm-manager.c:do_sleep_wake
).
Тем не менее, я хотел бы по-прежнему использовать сеть в течение очень короткого времени (для размонтирования cifs
монтировок, которые в противном случае делают мою систему непригодной к использованию при возобновлении работы).
Как я могу сделать так, чтобы NetworkManager
не отключить мою сеть? Можно ли подождать несколько секунд (или пока что-то не сработает или не будет снята блокировка)?
Связанный: pm-utils: Нет сети в сценариях приостановки?
журнал отладки:
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
РЕДАКТИРОВАТЬ: чтобы прояснить, наличие сценариев /etc/pm/sleep.d
не помогает, так как сеть уже отключена, как только сценарий выполняется.
gnome-control-center
.Ответы:
Я не знаю , если это стандарт, но в Ubuntu есть сценарий, выполняется до приостановки / после возобновления в
/etc/pm/sleep.d
и в/usr/lib/pm-utils/sleep.d
. В моей системе кажется, что сеть закрыта/usr/lib/pm-utils/sleep.d/60_wpa_supplicant
.Например, вы можете написать скрипт для
/etc/pm/sleep.d/10-umount
размонтирования ваших акций перед приостановкой. Структура этих скриптов такая:Обратите внимание, что если скрипт возвращает общую ошибку, приостановка прерывается, поэтому позаботьтесь об этом (особенно если вы, как и я, используете, чтобы закрыть крышку и убрать ноутбук ...). Чтобы написать более сложные вещи, спасибо Сэмюэлю Питеру за его комментарий:
Вы можете даже перемонтировать их после возобновления автоматически; из здесь я обнаружил , что:
Таким образом, вставка в тот же сценарий
umount
иmount command
должна работать (в режиме ожидания он выполняется до выключения сети, а в резюме после этого).Ссылка на ваш вопрос показательна; я понимаю, что если NetworkManager завершает работу сети перед запуском сценариев уровня 00-50, это ошибка - по крайней мере, если подключение помечено как системное подключение (в «Параметры сети» -> «Параметры» -> «Идентификация» - > Сделать доступным для другого пользователя).
источник
pm-utils
должен быть доступен на всех основных дистрибутивах и, вероятно, установлен по умолчанию.$NA
это «не применимо»,$DX
«отключено» и$NX
«не выполнимо» , Смотритеhook_exit_status
функцию в скрипте pm-functionssystem connection
собственность. РЕДАКТИРОВАТЬ: Это уже былоsystem connection
.Основываясь на том, что сказал @ensc, вы могли бы вместо этого прослушивать сигнал D-Bus (системный сеанс) самостоятельно. Общий рабочий процесс с
org.freedesktop.login1.Manager
интерфейсом будет:Inhibit(what, who, why, mode)
what
:sleep
илиshutdown:sleep
who
:unmount_cifs
или как ты назовешь свой сценарийwhy
:unmounting cifs X before suspend ...
или эквивалентmode
:delay
для торможения макс. 5s (по умолчанию) илиblock
блокировать на неопределенный срок (я бы порекомендовал первый. Если ваш скрипт остановится, ваш ноутбук просто никогда не заснет.)PrepareForSleep
, который возвращается,True
когда собирается приостановить или в спящем режиме иFalse
при возобновлении и оттаивании)PrepareForShutdown
, который возвращает,True
когда собирается завершить работу, и должен возвращатьсяFalse
при включении питания (вместо этого он также возвращаетFalse
в то же время, что и возврат,True
что не имеет смысла для меня, так что я просто проигнорировал бы этуFalse
часть здесь; у вас, вероятно, уже есть какой-то скрипт автоподключения в любом случае, на старте системы?)True
сигнала (то есть отключением), вы снимаете блокировку, закрывая файловый дескриптор (возвращаемыйInhibit(...)
), чтобы машина могла перейти в спящий режим или выключиться как можно быстрее, не дожидаясь целых 5 секунд ( или даже на неопределенный срок вblock
режиме)False
сигнал (возобновить / разморозить), перемонтировав (возможно, сначала дождавшись, пока сеть снова включится), а затем создав новую блокировку с помощьюInhibit(...)
(для следующего спящего режима или выключения)В Python (2.7) это может выглядеть так:
В этом Gist вы найдете мою оболочку вокруг Pidgin для отключения учетных записей IM в спящем и выключенном состоянии, используя точно такой же подход.
Смотрите также официальную документацию freedesktop о блокировках ингибиторов и
logind
D-Bus API .источник
Вы можете попытаться выяснить, почему
nm
происходит отключение устройств:Когда (как в моем случае (Fedora 20))
systemd
запускается сигнал, вы можете запретить его доставку в конфигурации dbus:К сожалению, эти правила не очень детализированы, и это будет блокировать
PrepareForSleep
сигнал и для других процессов.источник
Попробуйте отключить службу, прежде чем приостановить и запустить снова после возобновления. Как это:
http://oleeekchoff.blogspot.ie/2012/05/restart-modulesservices-after.html
источник