Je suppose que cette question est à peu près la même chose que Comment configurer dbus pour permettre à ssh-user de suspendre le serveur? ; sauf que je voulais mieux le formuler.
Supposons que j'ai un serveur Ubuntu fonctionnant sans escale, appelons-le MyServer
. Disons, alors, j'ai un autre PC sur le même réseau local que MyServer
, appelons-le MyLocalPC
.
MyLocalPC
est alors maintenu en suspension, sauf s'il est activé via wakeonlan
par MyServer
. Cette partie du processus fonctionne parfaitement pour moi: je peux me connecter via ssh
à MyServer
, et sur l'invite MyServer
ssh, je peux émettre wakeonlan
et MyLocalPC
se réveille - génial.
Cependant, dès que je finis de travailler avec MyLocalPC
, j'aimerais le remettre en suspension. Le problème est le suivant: je peux mettre la machine en suspension facilement, si je ssh dans MyLocalPC
d’abord 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
Cela suspendra MyLocalPC
- mais bloquera également la sortie correcte de ssh
, et finalement, la ssh
à MyServer
finira par se figer. J'essaie d'être délicat et publie quelque chose comme ceci:
[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.
Ensuite, j'ai lu quelque part la variable DISPLAY
devrait être définie - mais cela échoue aussi:
[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
Alors, est-ce que quelqu'un sait comment puis-je émettre une suspension pour MyLocalPC
, sans la connexion ssh
à MyServer
en gel?
Il suffit de taper <enter>~&
(c'est-à-dire trois frappes: entrée, squggle, esperluette) et ssh ira à l'arrière-plan, et éventuellement en timeout. C'est bien si vous voulez simplement abandonner une session interactive dans un cas comme celui-ci.
Ou, alternativement, insérez cela dans un script Shell sur MyLocalPC et connectez-vous de manière à mettre en arrière-plan la connexion:
ssh -f MyLocalPC go-to-sleep
Vous devez activer le transfert X11 avec ssh -Y
. Vous pouvez également utiliser at now + 2 minutes
pour exécuter la commande une seule fois (voir man at
pour plus d'informations).
Pour moi, le plus simple consiste à utiliser la commande at
:
echo 'pm-suspend' | Sudo at now + 2 minutes
Puis déconnectez-vous de la session SSH.
définir un travail cron pour 2 minutes dans le futur et déconnecter
Comment puis-je sortir de ssh quand il se verrouille? Il existe de nombreuses solutions valables. L'un d'eux a été mentionné par poolie; J'ai configuré un délai de maintien en vie sur mon système qui suspendra automatiquement les sessions SSH suspendues en ajoutant les éléments suivants à ~/.ssh/config
:
Host *
ServerAliveInterval 5
ServerAliveCountMax 4
Fonctionne également après avoir suspendu la machine distante.