以下を使ってラップトップを一時停止したいと思います。at
:
echo "systemctl suspend" | at now + 5 minutes
at
一時停止は発生せず、代わりに次のメールが見つかりました/var/spool/mail/me
。
Failed to set wall message, ignoring: Interactive authentication required.
Failed to suspend system via logind: Interactive authentication required.
Failed to start suspend.target: Interactive authentication required.
See system logs and 'systemctl status suspend.target' for details.
わかりました。logind
実行時に認証が必要です。直接実行すると、認証を必要とせず、コンピュータが一時停止状態になるため、これは面白いです。at
systemctl suspend
systemctl suspend
at
at
を使用して、直接実行するコマンドと同じ非ルートユーザーが実行を使用するコマンドを実行していることを確認しましたecho "echo $(who) > who.txt" | at now
。
at
起動後に実行したコマンド(bashのエイリアス)を介してコマンドを実行するため、疑わしい認証が必要です。停止は認証なしですぐに発生し、入れ子になったシェルが停止失敗の原因ではないことを示します。/bin/sh
systemctl suspend
/bin/sh
at
echo "reboot" | at now
実行すると、同じ動作と非常によく似たメッセージが表示されますecho "shutdown now" | at now
。
私の質問は:コンピュータを一時停止、再起動、またはシャットダウンしようとしていることをどのように知り、logind
認証なしでそのコマンドを実行できるかをどうやって知ることができますか?at
logind
at
私はArch Linux 4.18.1、at
バージョン3.1.19を使用しています。
答え1
おそらく実行中のコマンドはat
他の環境にあり、ttyデバイスやdbus設定などにアクセスできません。
Systemdには独自のat
バージョンのコマンドがあります。これを使用して、他のシステムコマンドが実行されているように見える環境でコマンドを実行できます。したがって、同等のコマンドを使用してください。
systemd-run --user --on-active=5min /bin/systemctl suspend
5分の待ち時間を完全かつ正確に実装するには、オプションを追加する必要があります--timer-property=AccuracySec=1
。