ConsoleKit

提供: ArchWiki
2015年2月18日 (水) 00:34時点におけるKusakata (トーク | 投稿記録)による版 (ページの作成:「Category:セキュリティ en:ConsoleKit it:ConsoleKit {{Related articles start}} {{Related2|Polkit|PolicyKit}} {{Related|init}} {{Related articles end}} {{W...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

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

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

インストール

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

設定

ck-launch-session

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

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

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

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

ノート:
  • Do not nest ConsoleKit sessions by calling one from another, or you will break ConsoleKit.
  • In particular, since SLiM reads ~/.xinitrc, you should make sure not to run ck-launch-session there.

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

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

Tips and tricks

電源操作に D-Bus を使う

ノート: D-Bus を使ってサスペンド・ハイバネートをするには upower が必要です。

シャットダウン:

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.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

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

dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate

This method assumes that you are given permission to shut the system down via PolicyKit. The default group for this is wheel. To change this, edit /etc/polkit-1/localauthority.conf.d/50-localauthority.conf as 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

参照