ConsoleKit

From ArchWiki
Jump to: navigation, search

Related articles

Warning: Arch Linux only has official support for logind [1] and systemd. When using ConsoleKit, please mention so in support requests.
Note: While Consolekit is no longer maintained upstream, the fork ConsoleKit2 is under development. [2]

ConsoleKit2 is a framework for defining and tracking users, login sessions, and seats.

Installation

Install consolekit and policykit-consolekit[broken link: package not found] from the AUR.

Display manager usage

Tango-emblem-important.png

Tango-emblem-important.png

The factual accuracy of this article or section is disputed.

Reason: Content must be revised for ConsoleKit2 and other developments (Discuss)

ck-launch-session

To launch an X session with ConsoleKit, append the following to the exec statement in ~/.xinitrc e.g.:

exec ck-launch-session openbox-session

This starts Openbox with proper environment variables so it and its children are able to use ConsoleKit.

Display managers like KDM, GDM, LXDM and SLiM start ConsoleKit automatically with each X session.

Note:
  • 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.

Running several applications from ~/.xinitrc

If several applications are to be executed from ~/.xinitrc, not all of these will have ConsoleKit environment variables set. In the following example, only children of Compiz will be able to properly use ConsoleKit, but children of xterm will not.

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

Typically, this can be an issue when for example using Compiz standalone and some other application launchers, (gnome-do, kupfer, gmrun, xbindkeys, etc.) since children of the application launcher will not be able to use ConsoleKit. A dirty workaround is to have the entire session started by a second script, e.g. ~/.xstart. Do not forget dbus-launch, it is likely that you will need it too:

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

Do not forget to make ~/.xstart executable:

$ chmod +x ~/.xstart

To see whether everything is started correctly:

$ ck-list-sessions

It should show at least one session like this one:

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'

No display manager

If you are not using a display manager, but starting your window manager via the startx command, or from inittab.

If ConsoleKit is not working (ck-list-sessions command showing active = FALSE), you should start your window manager using the bash_profile method: Start_X_at_Login#bash_profile.

Use D-Bus for power operations

  • shut down:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
  • restart:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
  • suspend:
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
  • hibernate (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.

Note: Using D-Bus for suspend and hibernate requires upower.

Replacing ConsoleKit with systemd-logind

Note: Starting with polkit 0.107-4, ConsoleKit must be completely replaced by systemd-logind[3], even when using a display manager. The system must be booted with systemd to be fully functional.

An easy method to be able to remove ConsoleKit is to automatically log in to a virtual console and start X from there. It is important that, as mentioned in the latter article, the X server is started on the same virtual console that you log in to, otherwise logind can not keep track of the user session. You can then simply remove ck-launch-session from your ~/.xinitrc.

In order to check the status of your user session, you can use loginctl. To see if your user session is properly set up, check if the following command contains Active=yes. All PolicyKit actions like suspending the system or mounting external drives with Udisks should then work automatically.

$ loginctl show-session $XDG_SESSION_ID

See also