「ConsoleKit」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「http://wiki.gentoo.org/」を「https://wiki.gentoo.org/」に置換) |
Kusakata.bot (トーク | 投稿記録) 細 (文字列「http://www.linuxquestions.org/」を「https://www.linuxquestions.org/」に置換) |
||
132行目: | 132行目: | ||
=== 同一の TTY で X を起動した時にセッションが有効にならない === |
=== 同一の TTY で X を起動した時にセッションが有効にならない === |
||
− | {{ic|keeptty}} フラグを ''startx'' または ''xinit'' に指定してください [ |
+ | {{ic|keeptty}} フラグを ''startx'' または ''xinit'' に指定してください [https://www.linuxquestions.org/questions/slackware-14/starting-xorg-on-same-vt-as-login-vt-while-keeping-active-consolekit-session-4175533711/]、例えば: |
startx -- -keeptty |
startx -- -keeptty |
2018年2月7日 (水) 00:24時点における版
ConsoleKit2 はユーザーやログインセッション、シートを定義・追跡するためのフレームワークです。ConsoleKit の機能はマルチユーザー環境をサポートすることです。シングルユーザーでも動作しますが、既存の方法に比べてメリットは存在しません [3]。
目次
インストール
AUR から consolekit-gitAUR と polkit-consolekitAUR をインストールしてください。
設定
ck-launch-session
ConsoleKit で X セッションを起動するには、~/.xinitrc
の exec
ステートメントに以下を追加します、例:
exec ck-launch-session dbus-launch --sh-syntax --exit-with-session openbox-session
上のコマンドは適切な環境変数で Openbox を起動し、Openbox やその子プロセスが ConsoleKit を使えるようにします。
GDM, LXDM, SLiM などのディスプレイマネージャは X セッションごとに ConsoleKit を勝手に起動します。
ディスプレイマネージャを使用しない
ディスプレイマネージャを使わずに、startx
コマンドや inittab からウィンドウマネージャを起動している場合で、ConsoleKit が動作しない時は (ck-list-sessions
コマンドで active = FALSE と表示される)、bash_profile の方法でウィンドウマネージャを起動してください: ログイン時に X を起動。
デスクトップ環境
Xfce
ログインマネージャを使用する場合、AUR の lxdm-consolekitAUR や LightDM を使うことができます。
Mate
mate-session-manager-upowerAUR と mate-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 を使う
シャットダウン:
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
ConsoleKit を systemd-logind で置き換える
ConsoleKit を削除する簡単な方法は仮想端末に自動ログインしてそこから X を起動することです。後者の記事で触れられているように、X サーバーが起動する仮想端末はログインする端末と同一であることが重要です。そうしないと logind がユーザーセッションを追跡できなくなります。後は ~/.xinitrc
から ck-launch-session
を削除するだけです。
ユーザーセッションの状態を確認するには、loginctl
を使います。ユーザーセッションが正しく設定されているか確認したいときは、以下のコマンドで Active=yes
が返ってくるか見てください。システムのサスペンドや Udisks による外付けドライブのマウントなどといった PolicyKit のアクションは自動的に動作するはずです。
$ loginctl show-session $XDG_SESSION_ID