Arch Linuxでは、systemdを使用すると、次のコマンドはすべてsystemctl
へのシンボリックリンクです。
/usr/bin/telinit
/usr/bin/poweroff
/usr/bin/runlevel
/usr/bin/reboot
/usr/bin/halt
/usr/bin/shutdown
承認に関する彼らの行動は混乱していると思います。
$ shutdown
Must be root.
$ halt
Must be root.
$ telinit 3
# Asks for Polkit authorization
poweroff
もreboot
も承認を要求しません。 poweroff
は実際にはシステムの電源をオフにしません。ラップトップはオンのままで、画面に電源がオフになっていることを示すテキストが表示されます-無期限に。
私はPolkitのルールをいじったことがないので、なぜその動作がそうなのか疑問に思います。
wheel
のメンバーである私の非root管理者ユーザーで試されました。/etc/polkit-1/rules.d
には、デフォルトのルールセットのみが含まれているようです。
# tail /etc/polkit-1/rules.d/*
// DO NOT EDIT THIS FILE, it will be overwritten on update
//
// Default rules for polkit
//
// See the polkit(8) man page for more information
// about configuring polkit.
polkit.addAdminRule(function(action, subject) {
return ["unix-group:wheel"];
});
よく調べてみると、/usr/share/polkit-1/actions/org.freedesktop.login1.policy
には、poweroff
、reboot
、suspend
、およびhibernate
のセクションがあり、allow_active
はいに設定します。ただし、shutdown
のセクションはありません。これが原因である場合、なぜそうなのですか?
これはかなり複雑です。コマンドを列挙した順に説明しましょう。
telinit
telinit
に対するさまざまな引数は、systemctl
のさまざまな(異なる)サブコマンドに直接変換されます。 telinit(8) (systemdパッケージからのドキュメント)によると:
2、3、4、5
SysVランレベルを変更します。これは、
runlevel2.target
、runlevel3.target
、...のアクティベーション要求に変換され、systemctl isolate runlevel2.target
、systemctl isolate runlevel3.target
、..と同等です。
したがって、これらのコマンドはsystemctl isolate
に変換され、それ自体がpolkitアクションorg.freedesktop.systemd1.manage-units
によって制御されます。そのアクションの特権は、デフォルトで管理者認証を必要とします—アクティブなセッション、非アクティブなセッション、および任意のセッション外のプロセスの両方に対して。
(BTW、デフォルトでは、polkitはwheel
グループ内のすべてのユーザーを管理者として扱うように構成されています。したがって、自分で認証するように求められました。)
halt
、poweroff
、reboot
コマンドpoweroff
とreboot
は2つのステップで機能します。
logind
が使用可能な場合、logind
は、polkitアクションorg.freedesktop.login1.*
を使用してアクションを実行するように求められます。systemctl poweroff
またはsystemctl reboot
とほぼ同等のものが実行されますが、polkitを参照せずに実行されます。halt
も同様ですが、常に2番目のルートになります(systemctl halt
とほぼ同等)。 logindを介して停止する方法はありません。
「ほぼ同等」に注意してください。あなたがする場合
poweroff
、reboot
、halt
非ルートの下で、「ルートでなければならない」というメッセージが表示されます。 polkitを介してorg.freedesktop.systemd1.manage-units
を認証する代わりに。同時に、systemctl poweroff
、systemctl reboot
、またはsystemctl halt
を使用すると、polkitを介して認証する機会が与えられます。これはおそらくバグです。
shutdown
このツールを使用して、遅延電源オフ、停止、または再起動をスケジュールできます。引数なしで呼び出された場合、1分の遅延が意味されます。デフォルトのアクションは電源オフです。から shutdown(8) :
時間文字列は、24時間形式で指定された、シャットダウンを実行する時間を指定する時間/分の「hh:mm」の形式のいずれかです。または、構文「+ m」で、mから指定された分数を参照することもできます。 「now」は「+0」のエイリアスです。つまり、即時シャットダウンをトリガーします。時間引数が指定されていない場合、「+ 1」が暗黙指定されます。
タイムアウトとウォールメッセージが指定されていない場合、shutdown
はpoweroff
、halt
、またはreboot
のいずれかと同等です(#2を参照)。
タイムアウトまたはウォールメッセージのいずれかが指定されている場合、shutdown
にはroot権限が必要です。
poweroff
の電源がオフにならない
それは本当にすべきです。これはおそらくカーネルのバグです。