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?
Best Answer
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: