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?
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:
For me the simplest is to use the
at
command:Then disconnect from SSH session.
You need to enable the X11 forwarding using
ssh -Y
. Alternatively, useat now + 2 minutes
to run the command only once (seeman at
for more information).set a cron job for 2 minutes in the future and disconnect
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.
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
:Works also after suspending the remote machine.