Думаю, этот вопрос почти такой же, как . Как настроить dbus, чтобы ssh-user мог приостановить работу сервера? ; кроме того, что я хотел сформулировать это лучше.
Предположим, у меня сервер Ubuntu работает без остановок, назовем его MyServer
. Скажем так, у меня есть другой ПК в той же локальной сети, что и MyServer
, назовем его MyLocalPC
.
MyLocalPC
затем остается в режиме ожидания, если он не включен через wakeonlan
в MyServer
. Эта часть процесса отлично работает для меня: я могу войти через ssh
- MyServer
, а по приглашению MyServer
ssh могу выдать wakeonlan
, и MyLocalPC
просыпается - отлично.
Затем, однако, как только я закончу работать с MyLocalPC
, я бы хотел снова приостановить его. Проблема заключается в следующем - я могу легко перевести машину в режим ожидания, если сначала введу ssh в MyLocalPC
через 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
Это приостановит MyLocalPC
- но также заблокирует [ 1118], выходя должным образом, и в конечном итоге от ssh
до MyServer
оказываются замороженными. Я пытаюсь запутаться и выдать что-то вроде этого:
[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.
Затем я читаю где-то DISPLAY
переменная должна быть определена - но это тоже не получается:
[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
Так кто-нибудь знает как я могу выдать приостановку на MyLocalPC
, без подключения ssh
к MyServer
заморозке?
Просто введите <enter>~&
(это три нажатия клавиш: ввод, нажатие, амперсанд) и ssh уйдет на задний план, и, в конечном итоге, само время ожидания. Это хорошо, если вы хотите просто отказаться от интерактивного сеанса в таком случае.
Или, в качестве альтернативы, поместите это в сценарий оболочки на MyLocalPC и подключите таким образом, чтобы фоновое соединение было:
ssh -f MyLocalPC go-to-sleep
Для меня самое простое - использовать команду at
:
echo 'pm-suspend' | sudo at now + 2 minutes
Затем отключиться от сеанса SSH.
установите задачу cron на 2 минуты в будущем и отключите
Необходимо включить переадресацию X11 с помощью ssh -Y
. В качестве альтернативы используйте at now + 2 minutes
для запуска команды только один раз (см. man at
для получения дополнительной информации).
Как я могу выйти из ssh, когда он блокируется? Есть много правильных решений. Один из них был упомянут Poolie; Я установил тайм-аут активности в моей системе, который будет автоматически приостанавливать зависания сеансов SSH, добавив следующее в ~/.ssh/config
:
Host *
ServerAliveInterval 5
ServerAliveCountMax 4
Работает также после приостановки удаленного машина.