web-dev-qa-db-ja.com

sysvinitなしで(ただしsystemdを使用して)consolekitでシャットダウンする方法

Arch Linuxボックスにsystemdをインストールしました(sysvinitはインストールしていません)。ただし、consolekit(dbusインターフェイス)でシャットダウン/再起動できません。 # systemctl {shutdown,reboot}は問題なく動作するので、consolekitがpid 1プロセスへの接続方法を知らないためだと思います。

8
yuyichao

ソースコードを確認したところ、consolekit(ck)が短いスクリプトを使用してシャットダウンと再起動を行っているようです。これらの2つのスクリプトは次のようにインストールされます

/usr/lib/ConsoleKit/scripts/ck-system-{stop,restart}

arch Linuxでは、それを行うために{,/usr}/sbin/shutdownを見つけて実行するだけです。

したがって、今それを行うようにckを構成する方法はないようです(通常、私は単に/etc内のいくつかのファイルを編集することを意味します)、回避策は簡単です。

  1. これらの2つのスクリプトを編集してsystemctl {shutdown,reboot}を実行するだけです。 (ただし、少なくともArch Linuxでは、アップグレードするたびに上書きされる可能性があります。)

  2. /sbin/shutdownで、正しいことを行うラッパースクリプトを作成するだけです。 (後でsysvinitをインストールする場合、これにより競合が発生しますが、問題がないことを願っています。)

また、問題に関するバグレポートを探します(そして、バグレポートがない場合は作成します)。将来、より良い方法でそれを実行できることを願っています(/etcの外部で構成を行うのは本当に好きではありません)。

注:Arch Linuxには、これら(init/halt/shutdownなど)をsystemctl/systemdへのシンボリックリンクとして提供するsystemd-sysvcompatパッケージが含まれるようになりました。

3
yuyichao