この質問は ssh-userがサーバーをサスペンドできるようにdbusを設定する方法? ;とほぼ同じだと思います。私はそれをより良く定式化したかったのを除いて。
Ubuntuサーバーがノンストップで実行されていると仮定して、MyServer
と呼びましょう。それでは、MyServer
と同じローカルネットワーク上に別のPCがあり、それをMyLocalPC
と呼びましょう。
MyLocalPC
は、wakeonlan
によってMyServer
を介してオンにされない限り、サスペンド状態のままになります。プロセスのこの部分は完璧に機能します。ssh
を介してMyServer
にログインし、MyServer
sshプロンプトでwakeonlan
を発行して、MyLocalPC
を起動できます。
ただし、MyLocalPC
の処理が完了したらすぐに、サスペンドに戻したいと思います。問題は次のとおりです。最初にMyLocalPC
を介してssh
に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
を一時停止しますが、適切に終了するssh
もブロックし、最終的に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>~&
(3つのキーストローク:enter、squggle、ampersand)と入力するだけで、sshはバックグラウンドに移動し、最終的には自動的にタイムアウトします。このような場合に対話型セッションを放棄したい場合は、これで十分です。
または、代わりに、それをMyLocalPCのシェルスクリプトに入れて、接続をバックグラウンドにする方法で接続します。
ssh -f MyLocalPC go-to-sleep
ssh -Y
を使用してX11転送を有効にする必要があります。または、at now + 2 minutes
を使用してコマンドを1回だけ実行します(詳細については、man at
を参照してください)。
私にとって最も簡単なのは、at
コマンドを使用することです。
echo 'pm-suspend' | Sudo at now + 2 minutes
次に、SSHセッションから切断します。
将来2分間のcronジョブを設定し、切断します
ロックされたときにsshから抜け出すにはどうすればよいですか? 多くの有効な解決策があります。 1つはpoolieによって言及されています。システムに keep-alive timeout を設定しました。これは、~/.ssh/config
に次を追加することにより、SSHセッションのハングを自動中断します。
Host *
ServerAliveInterval 5
ServerAliveCountMax 4
リモートマシンをサスペンドした後でも機能します。