On Monday 24. January 2022, 18:56:59 (+01:00), Andrei Borzenkov wrote:

> On 24.01.2022 17:37, Tomáš Hnyk wrote:
> >
> >
> > On Monday 24. January 2022, 13:50:48 (+01:00), Andrei Borzenkov wrote:
> >
>
> I posted it in response to the list and you sent personal reply. Please use
> reply to all.
Sorry about that, my mistake!

> >> On Mon, Jan 24, 2022 at 1:14 AM Tomáš Hnyk <[email protected]> wrote:
> >>>
> >>> Hello,
> >>> I have my computer hooked up to an AVR that runs my home cinema and 
> >>> ideally I would like the computer to turn off the AVR when I turn it off 
> >>> or suspend it. The only way to do this is over network and I wrote a 
> >>> simple script that does just that. Hooking it to shutdown was quite easy 
> >>> using network.target that is defined when shutting down.
> >>>
> >>> I am struggling to make it work with suspend though. When I look at the 
> >>> logs, terminating network seems to be the first thing that happens when 
> >>> suspend is invoked. I tried putting the script to 
> >>> /usr/lib/systemd/system-sleep/ and it runs, but only after network si 
> >>> down, so it fails. Running the script with systemd-inhibit 
> >>> (ExecStart=/usr/bin/systemd-inhibit --what=sleep my_script) tells me that 
> >>> "Failed to inhibit: The operation inhibition has been requested for is 
> >>> already running".
> >>>
> >>
> >> What network management program are you using?
> > Network Manager. I tried putting "systemctl start NetworkManager.service" 
> > into the /usr/lib/systemd/system-sleep/ hook but even though the log says 
> > network is reestablished, the script still fails.
>
> NetworkManager has own hooks. Unfortunately there is no hook that runs on
> suspend/resume - only on interface up/down. You may want to post to NM list
> asking whether something like this could be implemented (but it will take
> a long time).
>
> Is performing your action on interface down acceptable? If interface stays
> up all the time except during suspend or shutdown it looks like workaround.

Indeed this works for my setup, wifi is always up. Putting a script to
/etc/NetworkManager/dispatcher.d/pre-down.d executes the script succesfully 
before suspend. Thank you for the hint!


>
> >
> >>
> >>> Is there a way to make this work with service files by specifying that 
> >>> the script needs to be run before network is shut down or would I need to 
> >>> run a daemon listening for PrepareForSleep as here: 
> >>> https://github.com/davidn/av/blob/master/av ?
> >>>
> >>
> >> Yes, this is probably the only generic solution.
> >>
> > I tried the script I linked and it does not work either (there seems to be 
> > a race condition that I am losing). What I am not clear about inhibiting is 
> > this: when PrepareForSleep is called and I have a script hooked into it 
> > that inhibits sleep, does it inhibit sleep from finishing or from running 
> > everything that is triggered by it? To me it seems it will just delay going 
> > to sleep, but shutting the network down is not inhibited.
>
> NetworkManage takes sleep lock and subscribes to PrepareForSleep()
> signal, so your daemon races with NetworkManager. There is no way
> to change it - various programs subscribed to PrepareForSleep() are
> not aware of each other at all.
>
> These programs run outside of systemd unit management so you cannot
> use "normal" systemd dependencies to order them.
I see. I assumed systemd ruled it all by now:-). I raised it in their gitlab 
issue tracker: 
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/910

Thanks again for the assistence!
Tomas

Reply via email to