ConsoleKit

提供: ArchWiki
2017年11月4日 (土) 14:31時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

関連記事

警告: Arch Linux が公式にサポートしているのは logind [1]systemd だけです。ConsoleKit を使用する場合は、サポートリクエストにそのことを書いておいてください。
ノート: Consolekit はもはや上流ではメンテナンスされていませんが、フォークの ConsoleKit2 は開発が続いています [2]

ConsoleKit2 はユーザーやログインセッション、シートを定義・追跡するためのフレームワークです。ConsoleKit の機能はマルチユーザー環境をサポートすることです。シングルユーザーでも動作しますが、既存の方法に比べてメリットは存在しません [3]

インストール

AUR から consolekit-gitAURpolkit-consolekitAUR をインストールしてください。

設定

ck-launch-session

ConsoleKit で X セッションを起動するには、~/.xinitrcexec ステートメントに以下を追加します、例:

exec ck-launch-session dbus-launch --sh-syntax --exit-with-session openbox-session

上のコマンドは適切な環境変数で Openbox を起動し、Openbox やその子プロセスが ConsoleKit を使えるようにします。

GDM, LXDM, SLiM などのディスプレイマネージャは X セッションごとに ConsoleKit を勝手に起動します。

ノート:
  • ConsoleKit セッションから別の ConsoleKit セッションを呼び出してネストしてはいけません。ConsoleKit が破壊されます。
  • 特に SLiM~/.xinitrc を読み込むため、~/.xinitrc から ck-launch-session を実行してはいけません。

ディスプレイマネージャを使用しない

ディスプレイマネージャを使わずに、startx コマンドや inittab からウィンドウマネージャを起動している場合で、ConsoleKit が動作しない時は (ck-list-sessions コマンドで active = FALSE と表示される)、bash_profile の方法でウィンドウマネージャを起動してください: ログイン時に X を起動

デスクトップ環境

Xfce

ログインマネージャを使用する場合、AURlxdm-consolekitAURLightDM を使うことができます。

Mate

mate-session-manager-upowerAURmate-power-manager-upowerAURインストールしてください。

ログインマネージャとして mdm-display-managerAUR を使用してログインに問題が発生する場合、/etc/pam.d/mdm を編集して session required pam_systemd.so をコメントアウトしてから mdm を再起動してください。さらに、consolekitAUR をインストールしている場合は session optional pam_ck_connector.so nox11 を追加してください。

ヒントとテクニック

電源操作に D-Bus を使う

ノート: ConsoleKit2 の D-Bus を使ってサスペンド・ハイバネート・ハイブリッドスリープをするには pm-utilsAUR が必要です。

シャットダウン:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

再起動:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

サスペンド:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Suspend  boolean:true

ハイバネート (suspend to disk):

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Hibernate  boolean:true

ハイブリッドスリープ (サスペンド + ハイバネート):

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.HybridSleep  boolean:true

上記の方法では PolicyKit を使ってシステムのシャットダウンをする権限を得ている必要があります。権限を得るためのデフォルトのグループは wheel です。変更するには、/etc/polkit-1/localauthority.conf.d/50-localauthority.conf を root で変更してください。

トラブルシューティング

~/.xinitrc から複数のアプリケーションを実行

~/.xinitrc から複数のアプリケーションを起動する場合、ConsoleKit 環境変数が設定されないアプリケーションが出てきます。以下の例では、Compiz の子プロセスは ConsoleKit を適切に使うことができますが、xterm の子プロセスは使えません。

~/.xinitrc
xterm &
exec ck-launch-session compiz ccp

Compiz を単独で使用して、他のアプリケーションランチャー (gnome-do, kupfer, gmrun, xbindkeys, etc.) を使うなどの場合に、アプリケーションランチャーの子プロセスが ConsoleKit を使えなくなるので問題になります。行儀の良くない解決方法としてはセッション全体を別のスクリプト (例: ~/.xstart) で起動する方法があります。dbus-launch も必要になるので忘れないでください:

~/.xinitrc
exec ck-launch-session dbus-launch ~/.xstart
~/.xstart
xterm &
thunar &
compiz ccp

~/.xstart を実行可能にするのを忘れないでください:

$ chmod +x ~/.xstart

全てが正しく起動しているか確認するには:

$ ck-list-sessions

以下のように少なくとも一つのセッションが表示される必要があります:

Session18:
       unix-user = '1000'
       realname = 'Your Name'
       seat = 'Seat1'
       session-type = 
       active = TRUE
       x11-display = ':0'
       x11-display-device = '/dev/tty2'
       display-device = '/dev/tty1'
       remote-host-name = 
       is-local = TRUE
       on-since = '2011-11-16T12:01:50.104764Z'
       login-session-id = '7'

Consolekit がアクティブな TTY をブロックする

使用していない TTY で ConsoleKit が起動するように init を設定してください、例:

/usr/bin/openvt -c 63 -f -- /usr/sbin/console-kit-daemon --no-daemon &

詳しくは [4] を参照。

同一の TTY で X を起動した時にセッションが有効にならない

keeptty フラグを startx または xinit に指定してください [5]、例えば:

startx -- -keeptty

Xorg#リダイレクトが機能しないも参照。

ConsoleKit を systemd-logind で置き換える

ノート: systemd-logind を使うには systemd で起動する必要があります。

ConsoleKit を削除する簡単な方法は仮想端末に自動ログインしてそこから X を起動することです。後者の記事で触れられているように、X サーバーが起動する仮想端末はログインする端末と同一であることが重要です。そうしないと logind がユーザーセッションを追跡できなくなります。後は ~/.xinitrc から ck-launch-session を削除するだけです。

ユーザーセッションの状態を確認するには、loginctl を使います。ユーザーセッションが正しく設定されているか確認したいときは、以下のコマンドで Active=yes が返ってくるか見てください。システムのサスペンドや Udisks による外付けドライブのマウントなどといった PolicyKit のアクションは自動的に動作するはずです。

$ loginctl show-session $XDG_SESSION_ID

参照