6

I guess this question is pretty much the same as How to configure dbus to allow ssh-user to suspend server?; except I wanted to formulate it better.

Assume I have an Ubuntu server running nonstop, let's call it MyServer. Let's say then, I have another PC on the same local network as MyServer, let's call it MyLocalPC.

MyLocalPC is then kept in suspend, unless it is turned on via wakeonlan by MyServer. This part of the process works perfectly for me: I can log in via ssh to MyServer, and on the MyServer ssh prompt I can issue wakeonlan, and MyLocalPC wakes up - great.

Then, however, as soon as I'm done working with MyLocalPC, I'd like to put it into suspend again. The problem is as follows - I can put the machine in suspend easy, if I ssh into MyLocalPC first via ssh:

[MyServer]$ ssh MyLocalPC
[MyLocalPC]$ dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend

This will suspend MyLocalPC - but will also block the ssh exiting properly, and eventually the ssh to MyServer ends up frozen. I try to get tricky and issue something like this:

[MyServer]$ ssh MyLocalPC "dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend"
Failed to open connection to "session" message bus: /bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.

Then I read somewhere DISPLAY variable should be defined - but that fails too:

[MyServer]$ ssh MyLocalPC "DISPLAY=:0 dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement  org.freedesktop.PowerManagement.Suspend"
Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.PowerManagement was not provided by any .service files

So does anyone know how can I issue a suspend to MyLocalPC, without the ssh connection to MyServer freezing?

6 Answers 6

3

Just type <enter>~& (that's three keystrokes: enter, squggle, ampersand) and ssh will go into the background, and eventually timeout by itself. That's good if you want to just abandon an interactive session in a case like this.

Or, alternatively, put that into a shell script on MyLocalPC and connect in a way that will background the connection:

ssh -f MyLocalPC go-to-sleep
1
  • Thanks @poolie for the answer - will have to report back with what I ended up choosing, I just wanted to +1 for now :) Cheers!
    – sdaau
    Apr 18, 2011 at 10:52
3

For me the simplest is to use the at command:

echo 'pm-suspend' | sudo at now + 2 minutes

Then disconnect from SSH session.

2

You need to enable the X11 forwarding using ssh -Y. Alternatively, use at now + 2 minutes to run the command only once (see man at for more information).

1
  • Thanks for the answer, @Adam Byrtek - good info on X11 forwarding..
    – sdaau
    Apr 18, 2011 at 10:53
2

I know this is a very old question, but on Ubuntu 22.04, I've been using

sudo systemctl suspend && exit

to suspend the machine and immediately exit the SSH connection.

1
  • It may have been a new answer to an old question, but it really is the best way for a modern system.
    – emk2203
    Dec 15, 2023 at 7:13
1

set a cron job for 2 minutes in the future and disconnect

3
  • Hi @aking1012 - thanks for that, I'll give it a try and report back.... Cheers!
    – sdaau
    Apr 18, 2011 at 7:02
  • 4
    at would be a better choice than cron if you just need a single job to run a bit later, or even better just sleep 2m && blah.
    – poolie
    Apr 18, 2011 at 9:08
  • @poolie - good point Apr 18, 2011 at 9:25
0

How can I break out of ssh when it locks? There are many valid solutions. One has been mentioned by poolie; I have set up a keep-alive timeout on my system that will auto-suspend hanging SSH sessions by adding the following to ~/.ssh/config:

Host *
ServerAliveInterval 5
ServerAliveCountMax 4

Works also after suspending the remote machine.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .