chiark / gitweb /
Re-add logind man pages from upstream systemd
authorAndy Wingo <wingo@pobox.com>
Sun, 19 Apr 2015 15:46:51 +0000 (17:46 +0200)
committerAndy Wingo <wingo@pobox.com>
Sun, 19 Apr 2015 15:53:02 +0000 (17:53 +0200)
man/pam_elogind.xml [new file with mode: 0644]
man/sd_get_seats.xml [new file with mode: 0644]
man/sd_pid_get_session.xml [new file with mode: 0644]
man/sd_seat_get_active.xml [new file with mode: 0644]
man/sd_session_is_active.xml [new file with mode: 0644]
man/sd_uid_get_state.xml [new file with mode: 0644]

diff --git a/man/pam_elogind.xml b/man/pam_elogind.xml
new file mode 100644 (file)
index 0000000..7c3690a
--- /dev/null
@@ -0,0 +1,292 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+  This file is part of systemd.
+
+  Copyright 2010 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="pam_elogind" conditional='HAVE_PAM'>
+
+  <refentryinfo>
+    <title>pam_elogind</title>
+    <productname>elogind</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>Developer</contrib>
+        <firstname>Lennart</firstname>
+        <surname>Poettering</surname>
+        <email>lennart@poettering.net</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>pam_elogind</refentrytitle>
+    <manvolnum>8</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>pam_elogind</refname>
+    <refpurpose>Register user sessions in the elogind login manager</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <para><filename>pam_elogind.so</filename></para>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><command>pam_elogind</command> registers user sessions with
+    the elogind login manager
+    <citerefentry><refentrytitle>logind</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+    and hence the elogind control group hierarchy.</para>
+
+    <para>On login, this module ensures the following:</para>
+
+    <orderedlist>
+      <listitem><para>If it does not exist yet, the user runtime
+      directory <filename>/run/user/$USER</filename> is created and
+      its ownership changed to the user that is logging
+      in.</para></listitem>
+
+      <listitem><para>The <varname>$XDG_SESSION_ID</varname>
+      environment variable is initialized. If auditing is available
+      and <command>pam_loginuid.so</command> was run before this
+      module (which is highly recommended), the variable is
+      initialized from the auditing session id
+      (<filename>/proc/self/sessionid</filename>). Otherwise, an
+      independent session counter is used.</para></listitem>
+
+      <listitem><para>A new elogind scope unit is created for the
+      session. If this is the first concurrent session of the user, an
+      implicit slice below <filename>user.slice</filename> is
+      automatically created and the scope placed into it. An instance
+      of the system service <filename>user@.service</filename>, which
+      runs the elogind user manager instance, is started.
+      </para></listitem>
+    </orderedlist>
+
+    <para>On logout, this module ensures the following:</para>
+
+    <orderedlist>
+      <listitem><para>If enabled in
+      <citerefentry><refentrytitle>logind.conf</refentrytitle>
+      <manvolnum>5</manvolnum></citerefentry>, all processes of the
+      session are terminated. If the last concurrent session of a user
+      ends, the user's elogind instance will be terminated too, and so
+      will the user's slice unit.</para></listitem>
+
+      <listitem><para>If the last concurrent session of a user ends,
+      the <varname>$XDG_RUNTIME_DIR</varname> directory and all its
+      contents are removed, too.</para></listitem>
+    </orderedlist>
+
+    <para>If the system was not booted up with elogind as init system,
+    this module does nothing and immediately returns
+    <constant>PAM_SUCCESS</constant>.</para>
+
+  </refsect1>
+
+  <refsect1>
+    <title>Options</title>
+
+    <para>The following options are understood:</para>
+
+    <variablelist class='pam-directives'>
+
+      <varlistentry>
+        <term><option>class=</option></term>
+
+        <listitem><para>Takes a string argument which sets the session
+        class. The XDG_SESSION_CLASS environmental variable takes
+        precedence. One of
+        <literal>user</literal>,
+        <literal>greeter</literal>,
+        <literal>lock-screen</literal> or
+        <literal>background</literal>. See
+        <citerefentry><refentrytitle>sd_session_get_class</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+        for details about the session class.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>type=</option></term>
+
+        <listitem><para>Takes a string argument which sets the session
+        type. The XDG_SESSION_TYPE environmental variable takes
+        precedence. One of
+        <literal>unspecified</literal>,
+        <literal>tty</literal>,
+        <literal>x11</literal>,
+        <literal>wayland</literal> or
+        <literal>mir</literal>. See
+        <citerefentry><refentrytitle>sd_session_get_type</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+        for details about the session type.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>debug<optional>=</optional></option></term>
+
+        <listitem><para>Takes an optional
+        boolean argument. If yes or without
+        the argument, the module will log
+        debugging information as it
+        operates.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Module Types Provided</title>
+
+    <para>Only <option>session</option> is provided.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Environment</title>
+
+    <para>The following environment variables are set for the
+    processes of the user's session:</para>
+
+    <variablelist class='environment-variables'>
+      <varlistentry>
+        <term><varname>$XDG_SESSION_ID</varname></term>
+
+        <listitem><para>A session identifier, suitable to be used in
+        filenames. The string itself should be considered opaque,
+        although often it is just the audit session ID as reported by
+        <filename>/proc/self/sessionid</filename>. Each ID will be
+        assigned only once during machine uptime. It may hence be used
+        to uniquely label files or other resources of this
+        session.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>$XDG_RUNTIME_DIR</varname></term>
+
+        <listitem><para>Path to a user-private user-writable directory
+        that is bound to the user login time on the machine. It is
+        automatically created the first time a user logs in and
+        removed on the user's final logout. If a user logs in twice at
+        the same time, both sessions will see the same
+        <varname>$XDG_RUNTIME_DIR</varname> and the same contents. If
+        a user logs in once, then logs out again, and logs in again,
+        the directory contents will have been lost in between, but
+        applications should not rely on this behavior and must be able
+        to deal with stale files. To store session-private data in
+        this directory, the user should include the value of
+        <varname>$XDG_SESSION_ID</varname> in the filename. This
+        directory shall be used for runtime file system objects such
+        as <constant>AF_UNIX</constant> sockets, FIFOs, PID files and
+        similar. It is guaranteed that this directory is local and
+        offers the greatest possible file system feature set the
+        operating system provides. For further details see the <ulink
+        url="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
+        Base Directory Specification</ulink>.</para></listitem>
+      </varlistentry>
+
+    </variablelist>
+
+    <para>The following environment variables are read by the module
+    and may be used by the PAM service to pass metadata to the
+    module:</para>
+
+    <variablelist class='environment-variables'>
+      <varlistentry>
+        <term><varname>$XDG_SESSION_TYPE</varname></term>
+
+        <listitem><para>The session type. This may be used instead of
+        <option>session=</option> on the module parameter line, and is
+        usually preferred.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>$XDG_SESSION_CLASS</varname></term>
+
+        <listitem><para>The session class. This may be used instead of
+        <option>class=</option> on the module parameter line, and is
+        usually preferred.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>$XDG_SESSION_DESKTOP</varname></term>
+
+        <listitem><para>A single, short identifier string for the
+        desktop environment. This may be used to indicate the session
+        desktop used, where this applies and if this information is
+        available. For example: <literal>GNOME</literal>, or
+        <literal>KDE</literal>. It is recommended to use the same
+        identifiers and capitalization as for
+        <varname>$XDG_CURRENT_DESKTOP</varname>, as defined by the
+        <ulink
+        url="http://standards.freedesktop.org/desktop-entry-spec/latest/">Desktop
+        Entry Specification</ulink>. (However, note that
+        <varname>$XDG_SESSION_DESKTOP</varname> only takes a single
+        item, and not a colon-separated list like
+        <varname>$XDG_CURRENT_DESKTOP</varname>.) See
+        <citerefentry><refentrytitle>sd_session_get_desktop</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+        for more details.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>$XDG_SEAT</varname></term>
+
+        <listitem><para>The seat name the session shall be registered
+        for, if any.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>$XDG_VTNR</varname></term>
+
+        <listitem><para>The VT number the session shall be registered
+        for, if any. (Only applies to seats with a VT available, such
+        as <literal>seat0</literal>)</para></listitem>
+      </varlistentry>
+
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Example</title>
+
+    <programlisting>#%PAM-1.0
+auth       required     pam_unix.so
+auth       required     pam_nologin.so
+account    required     pam_unix.so
+password   required     pam_unix.so
+session    required     pam_unix.so
+session    required     pam_loginuid.so
+session    required     pam_elogind.so</programlisting>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>logind</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>logind.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry project='man-pages'><refentrytitle>pam.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+      <citerefentry project='man-pages'><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+      <citerefentry project='man-pages'><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry project='man-pages'><refentrytitle>pam_loginuid</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/sd_get_seats.xml b/man/sd_get_seats.xml
new file mode 100644 (file)
index 0000000..4390d36
--- /dev/null
@@ -0,0 +1,141 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+  This file is part of systemd.
+
+  Copyright 2010 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="sd_get_seats" conditional='HAVE_PAM'>
+
+  <refentryinfo>
+    <title>sd_get_seats</title>
+    <productname>systemd</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>Developer</contrib>
+        <firstname>Lennart</firstname>
+        <surname>Poettering</surname>
+        <email>lennart@poettering.net</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_get_seats</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_get_seats</refname>
+    <refname>sd_get_sessions</refname>
+    <refname>sd_get_uids</refname>
+    <refname>sd_get_machine_names</refname>
+    <refpurpose>Determine available seats, sessions, logged in users and virtual machines/containers</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-login.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int <function>sd_get_seats</function></funcdef>
+        <paramdef>char ***<parameter>seats</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_get_sessions</function></funcdef>
+        <paramdef>char ***<parameter>sessions</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_get_uids</function></funcdef>
+        <paramdef>uid_t **<parameter>users</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_get_machine_names</function></funcdef>
+        <paramdef>char ***<parameter>machines</parameter></paramdef>
+      </funcprototype>
+
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><function>sd_get_seats()</function> may be used to determine
+    all currently available local seats. Returns a
+    <constant>NULL</constant> terminated array of seat identifiers.
+    The returned array and all strings it references need to be freed
+    with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use. Note that instead of an empty array
+    <constant>NULL</constant> may be returned and should be considered
+    equivalent to an empty array.</para>
+
+    <para>Similarly, <function>sd_get_sessions()</function> may be
+    used to determine all current login sessions.</para>
+
+    <para>Similarly, <function>sd_get_uids()</function> may be used to
+    determine all Unix users who currently have login sessions.</para>
+
+    <para>Similarly, <function>sd_get_machine_names()</function> may
+    be used to determine all current virtual machines and containers
+    on the system.</para>
+
+    <para>Note that the returned lists are not sorted and in an
+    undefined order.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para>On success, <function>sd_get_seats()</function>,
+    <function>sd_get_sessions()</function>,
+    <function>sd_get_uids()</function> and
+    <function>sd_get_machine_names()</function> return the number of
+    entries in the arrays. On failure, these calls return a negative
+    errno-style error code.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Notes</title>
+
+    <para>The <function>sd_get_seats()</function>,
+    <function>sd_get_sessions()</function>,
+    <function>sd_get_uids()</function> and
+    <function>sd_get_machine_names()</function> interfaces are
+    available as a shared library, which can be compiled and linked to
+    with the
+    <constant>libsystemd</constant> <citerefentry project='die-net'><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    file.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_session_get_seat</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_session.xml
new file mode 100644 (file)
index 0000000..f708d0d
--- /dev/null
@@ -0,0 +1,261 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+  This file is part of systemd.
+
+  Copyright 2010 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="sd_pid_get_session" conditional='HAVE_PAM'>
+
+  <refentryinfo>
+    <title>sd_pid_get_session</title>
+    <productname>systemd</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>Developer</contrib>
+        <firstname>Lennart</firstname>
+        <surname>Poettering</surname>
+        <email>lennart@poettering.net</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_pid_get_session</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_pid_get_session</refname>
+    <refname>sd_pid_get_unit</refname>
+    <refname>sd_pid_get_user_unit</refname>
+    <refname>sd_pid_get_owner_uid</refname>
+    <refname>sd_pid_get_machine_name</refname>
+    <refname>sd_pid_get_slice</refname>
+    <refname>sd_peer_get_session</refname>
+    <refname>sd_peer_get_unit</refname>
+    <refname>sd_peer_get_user_unit</refname>
+    <refname>sd_peer_get_owner_uid</refname>
+    <refname>sd_peer_get_machine_name</refname>
+    <refname>sd_peer_get_slice</refname>
+    <refpurpose>Determine session, service, owner of a
+    session, container/VM or slice of a specific
+    PID or socket peer</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-login.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pid_get_session</function></funcdef>
+        <paramdef>pid_t <parameter>pid</parameter></paramdef>
+        <paramdef>char **<parameter>session</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pid_get_unit</function></funcdef>
+        <paramdef>pid_t <parameter>pid</parameter></paramdef>
+        <paramdef>char **<parameter>unit</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pid_get_user_unit</function></funcdef>
+        <paramdef>pid_t <parameter>pid</parameter></paramdef>
+        <paramdef>char **<parameter>unit</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pid_get_owner_uid</function></funcdef>
+        <paramdef>pid_t <parameter>pid</parameter></paramdef>
+        <paramdef>uid_t *<parameter>uid</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pid_get_machine_name</function></funcdef>
+        <paramdef>pid_t <parameter>pid</parameter></paramdef>
+        <paramdef>char **<parameter>name</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_pid_get_slice</function></funcdef>
+        <paramdef>pid_t <parameter>pid</parameter></paramdef>
+        <paramdef>char **<parameter>slice</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_peer_get_session</function></funcdef>
+        <paramdef>int <parameter>fd</parameter></paramdef>
+        <paramdef>char **<parameter>session</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_peer_get_unit</function></funcdef>
+        <paramdef>int <parameter>fd</parameter></paramdef>
+        <paramdef>char **<parameter>unit</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_peer_get_user_unit</function></funcdef>
+        <paramdef>int <parameter>fd</parameter></paramdef>
+        <paramdef>char **<parameter>unit</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_peer_get_owner_uid</function></funcdef>
+        <paramdef>int <parameter>fd</parameter></paramdef>
+        <paramdef>uid_t *<parameter>uid</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_peer_get_machine_name</function></funcdef>
+        <paramdef>int <parameter>fd</parameter></paramdef>
+        <paramdef>char **<parameter>name</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_peer_get_slice</function></funcdef>
+        <paramdef>int <parameter>fd</parameter></paramdef>
+        <paramdef>char **<parameter>slice</parameter></paramdef>
+      </funcprototype>
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><function>sd_pid_get_session()</function> may be used to
+    determine the login session identifier of a process identified by
+    the specified process identifier. The session identifier is a
+    short string, suitable for usage in file system paths. Note that
+    not all processes are part of a login session (e.g. system service
+    processes, user processes that are shared between multiple
+    sessions of the same user, or kernel threads). For processes not
+    being part of a login session this function will fail. The
+    returned string needs to be freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_pid_get_unit()</function> may be used to
+    determine the systemd system unit (i.e. system service) identifier
+    of a process identified by the specified PID. The unit name is a
+    short string, suitable for usage in file system paths. Note that
+    not all processes are part of a system unit/service (e.g. user
+    processes, or kernel threads). For processes not being part of a
+    systemd system unit this function will fail. (More specifically:
+    this call will not work for processes that are part of user units,
+    use <function>sd_pid_get_user_unit()</function> for that.) The
+    returned string needs to be freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_pid_get_user_unit()</function> may be used to
+    determine the systemd user unit (i.e. user service) identifier of
+    a process identified by the specified PID. This is similar to
+    <function>sd_pid_get_unit()</function> but applies to user units
+    instead of system units.</para>
+
+    <para><function>sd_pid_get_owner_uid()</function> may be used to
+    determine the Unix user identifier of the owner of the session of
+    a process identified the specified PID. Note that this function
+    will succeed for user processes which are shared between multiple
+    login sessions of the same user, where
+    <function>sd_pid_get_session()</function> will fail. For processes
+    not being part of a login session and not being a shared process
+    of a user this function will fail.</para>
+
+    <para><function>sd_pid_get_machine_name()</function> may be used
+    to determine the name of the VM or container is a member of. The
+    machine name is a short string, suitable for usage in file system
+    paths. The returned string needs to be freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_pid_get_slice()</function> may be used to
+    determine the slice unit the process is a member of. See
+    <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+    for details about slices. The returned string needs to be freed
+    with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para>If the <varname>pid</varname> parameter of any of these
+    functions is passed as 0, the operation is executed for the
+    calling process.</para>
+
+    <para>The <function>sd_peer_get_session()</function>,
+    <function>sd_peer_get_unit()</function>,
+    <function>sd_peer_get_user_unit()</function>,
+    <function>sd_peer_get_owner_uid()</function>,
+    <function>sd_peer_get_machine_name()</function> and
+    <function>sd_peer_get_slice()</function> calls operate similar to
+    their PID counterparts, but operate on a connected AF_UNIX socket
+    and retrieve information about the connected peer process.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para>On success, these calls return 0 or a positive integer. On
+    failure, these calls return a negative errno-style error
+    code.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Notes</title>
+
+    <para>The <function>sd_pid_get_session()</function>,
+    <function>sd_pid_get_unit()</function>,
+    <function>sd_pid_get_user_unit()</function>,
+    <function>sd_pid_get_owner_uid()</function>,
+    <function>sd_pid_get_machine_name()</function>,
+    <function>sd_pid_get_slice()</function>,
+    <function>sd_peer_get_session()</function>,
+    <function>sd_peer_get_unit()</function>,
+    <function>sd_peer_get_user_unit()</function>,
+    <function>sd_peer_get_owner_uid()</function>,
+    <function>sd_peer_get_machine_name()</function> and
+    <function>sd_peer_get_slice()</function> interfaces are
+    available as a shared library, which can be compiled
+    and linked to with the
+    <constant>libsystemd</constant> <citerefentry project='die-net'><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    file.</para>
+
+    <para>Note that the login session identifier as
+    returned by <function>sd_pid_get_session()</function>
+    is completely unrelated to the process session
+    identifier as returned by
+    <citerefentry><refentrytitle>getsid</refentrytitle><manvolnum>2</manvolnum></citerefentry>.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_session_is_active</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>getsid</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml
new file mode 100644 (file)
index 0000000..3c57ec9
--- /dev/null
@@ -0,0 +1,175 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+  This file is part of systemd.
+
+  Copyright 2010 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="sd_seat_get_active" conditional='HAVE_PAM'>
+
+  <refentryinfo>
+    <title>sd_seat_get_active</title>
+    <productname>systemd</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>Developer</contrib>
+        <firstname>Lennart</firstname>
+        <surname>Poettering</surname>
+        <email>lennart@poettering.net</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_seat_get_active</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_seat_get_active</refname>
+    <refname>sd_seat_get_sessions</refname>
+    <refname>sd_seat_can_multi_session</refname>
+    <refname>sd_seat_can_tty</refname>
+    <refname>sd_seat_can_graphical</refname>
+    <refpurpose>Determine state of a specific seat</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-login.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int <function>sd_seat_get_active</function></funcdef>
+        <paramdef>const char *<parameter>seat</parameter></paramdef>
+        <paramdef>char **<parameter>session</parameter></paramdef>
+        <paramdef>uid_t *<parameter>uid</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_seat_get_sessions</function></funcdef>
+        <paramdef>const char *<parameter>seat</parameter></paramdef>
+        <paramdef>char ***<parameter>sessions</parameter></paramdef>
+        <paramdef>uid_t **<parameter>uid</parameter></paramdef>
+        <paramdef>unsigned int *<parameter>n_uids</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_seat_can_multi_session</function></funcdef>
+        <paramdef>const char *<parameter>seat</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_seat_can_tty</function></funcdef>
+        <paramdef>const char *<parameter>seat</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_seat_can_graphical</function></funcdef>
+        <paramdef>const char *<parameter>seat</parameter></paramdef>
+      </funcprototype>
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><function>sd_seat_get_active()</function> may be used to
+    determine which session is currently active on a seat, if there is
+    any. Returns the session identifier and the user identifier of the
+    Unix user the session is belonging to. Either the session or the
+    user identifier parameter can be passed <constant>NULL</constant>,
+    in case only one of the parameters shall be queried. The returned
+    string needs to be freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_seat_get_sessions()</function> may be used to
+    determine all sessions on the specified seat. Returns two arrays,
+    one (<constant>NULL</constant> terminated) with the session
+    identifiers of the sessions and one with the user identifiers of
+    the Unix users the sessions belong to. An additional parameter may
+    be used to return the number of entries in the latter array. The
+    two arrays and the latter parameter may be passed as
+    <constant>NULL</constant> in case these values need not to be
+    determined. The arrays and the strings referenced by them need to
+    be freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use. Note that instead of an empty array
+    <constant>NULL</constant> may be returned and should be considered
+    equivalent to an empty array.</para>
+
+    <para><function>sd_seat_can_multi_session()</function> may be used
+    to determine whether a specific seat is capable of multi-session,
+    i.e. allows multiple login sessions in parallel (with only one
+    being active at a time).</para>
+
+    <para><function>sd_seat_can_tty()</function> may be used to
+    determine whether a specific seat provides TTY functionality, i.e.
+    is useful as a text console.</para>
+
+    <para><function>sd_seat_can_graphical()</function> may be used to
+    determine whether a specific seat provides graphics functionality,
+    i.e. is useful as a graphics display.</para>
+
+    <para>If the <varname>seat</varname> parameter of any of these
+    functions is passed as <constant>NULL</constant>, the operation is
+    executed for the seat of the session of the calling process, if
+    there is any.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para> On success, <function>sd_seat_get_active()</function>
+    returns 0 or a positive integer. On success,
+    <function>sd_seat_get_sessions()</function> returns the number of
+    entries in the session identifier array. If the test succeeds,
+    <function>sd_seat_can_multi_session</function>,
+    <function>sd_seat_can_tty</function> and
+    <function>sd_seat_can_graphical</function> return a positive
+    integer, if it fails 0. On failure, these calls return a negative
+    errno-style error code.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Notes</title>
+
+    <para>The <function>sd_seat_get_active()</function>,
+    <function>sd_seat_get_sessions()</function>,
+    <function>sd_seat_can_multi_session()</function>,
+    <function>sd_seat_can_tty()</function> and
+    <function>sd_seat_can_grapical()</function> interfaces are
+    available as a shared library, which can be compiled and linked to
+    with the
+    <constant>libsystemd</constant> <citerefentry project='die-net'><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    file.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_session_get_seat</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/sd_session_is_active.xml b/man/sd_session_is_active.xml
new file mode 100644 (file)
index 0000000..4ca3a6c
--- /dev/null
@@ -0,0 +1,322 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+  This file is part of systemd.
+
+  Copyright 2010 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="sd_session_is_active" conditional='HAVE_PAM'>
+
+  <refentryinfo>
+    <title>sd_session_is_active</title>
+    <productname>systemd</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>Developer</contrib>
+        <firstname>Lennart</firstname>
+        <surname>Poettering</surname>
+        <email>lennart@poettering.net</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_session_is_active</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_session_is_active</refname>
+    <refname>sd_session_is_remote</refname>
+    <refname>sd_session_get_state</refname>
+    <refname>sd_session_get_uid</refname>
+    <refname>sd_session_get_seat</refname>
+    <refname>sd_session_get_service</refname>
+    <refname>sd_session_get_type</refname>
+    <refname>sd_session_get_class</refname>
+    <refname>sd_session_get_desktop</refname>
+    <refname>sd_session_get_display</refname>
+    <refname>sd_session_get_tty</refname>
+    <refname>sd_session_get_vt</refname>
+    <refname>sd_session_get_remote_host</refname>
+    <refname>sd_session_get_remote_user</refname>
+    <refpurpose>Determine state of a specific session</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-login.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_is_active</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_is_remote</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_state</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>char **<parameter>state</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_uid</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>uid_t *<parameter>uid</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_seat</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>char **<parameter>seat</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_service</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>char **<parameter>service</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_type</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>char **<parameter>type</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_class</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>char **<parameter>class</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_desktop</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>char **<parameter>desktop</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_display</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>char **<parameter>display</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_remote_host</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>char **<parameter>remote_host</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_remote_user</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>char **<parameter>remote_user</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_tty</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>char **<parameter>tty</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_session_get_vt</function></funcdef>
+        <paramdef>const char *<parameter>session</parameter></paramdef>
+        <paramdef>unsigned int *<parameter>vt</parameter></paramdef>
+      </funcprototype>
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><function>sd_session_is_active()</function> may be used to
+    determine whether the session identified by the specified session
+    identifier is currently active (i.e. currently in the foreground
+    and available for user input) or not.</para>
+
+    <para><function>sd_session_is_remote()</function> may be used to
+    determine whether the session identified by the specified session
+    identifier is a remote session (i.e. its remote host is known) or
+    not.</para>
+
+    <para><function>sd_session_get_state()</function> may be used to
+    determine the state of the session identified by the specified
+    session identifier. The following states are currently known:
+    <literal>online</literal> (session logged in, but session not
+    active, i.e. not in the foreground), <literal>active</literal>
+    (session logged in and active, i.e. in the foreground),
+    <literal>closing</literal> (session nominally logged out, but some
+    processes belonging to it are still around). In the future
+    additional states might be defined, client code should be written
+    to be robust in regards to additional state strings being
+    returned. This function is a more generic version of
+    <function>sd_session_is_active()</function>. The returned string
+    needs to be freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_session_get_uid()</function> may be used to
+    determine the user identifier of the Unix user the session
+    identified by the specified session identifier belongs to.</para>
+
+    <para><function>sd_session_get_seat()</function> may be used to
+    determine the seat identifier of the seat the session identified
+    by the specified session identifier belongs to. Note that not all
+    sessions are attached to a seat, this call will fail for them. The
+    returned string needs to be freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_session_get_service()</function> may be used to
+    determine the name of the service (as passed during PAM session
+    setup) that registered the session identified by the specified
+    session identifier. The returned string needs to be freed with the
+    libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_session_get_type()</function> may be used to
+    determine the type of the session identified by the specified
+    session identifier. The returned string is one of
+    <literal>x11</literal>, <literal>wayland</literal>,
+    <literal>tty</literal>, <literal>mir</literal> or
+    <literal>unspecified</literal> and needs to be freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_session_get_class()</function> may be used to
+    determine the class of the session identified by the specified
+    session identifier. The returned string is one of
+    <literal>user</literal>, <literal>greeter</literal>,
+    <literal>lock-screen</literal>, or <literal>background</literal>
+    and needs to be freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_session_get_desktop()</function> may be used to
+    determine the brand of the desktop running on the session
+    identified by the specified session identifier. This field can be
+    set freely by desktop environments and does not follow any special
+    formatting. However, desktops are strongly recommended to use the
+    same identifiers and capitalization as for
+    <varname>$XDG_CURRENT_DESKTOP</varname>, as defined by the <ulink
+    url="http://standards.freedesktop.org/desktop-entry-spec/latest/">Desktop
+    Entry Specification</ulink>. The returned string needs to be freed
+    with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_session_get_display()</function> may be used to
+    determine the X11 display of the session identified by the
+    specified session identifier. The returned string needs to be
+    freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_session_get_remote_host()</function> may be
+    used to determine the remote hostname of the session identified by
+    the specified session identifier. The returned string needs to be
+    freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_session_get_remote_user()</function> may be
+    used to determine the remote username of the session identified by
+    the specified session identifier. The returned string needs to be
+    freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use. Note that this value is rarely known to the
+    system, and even then should not be relied on.</para>
+
+    <para><function>sd_session_get_tty()</function> may be used to
+    determine the TTY device of the session identified by the
+    specified session identifier. The returned string needs to be
+    freed with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_session_get_vt()</function> may be used to
+    determine the VT number of the session identified by the specified
+    session identifier. This function will return an error if the seat
+    does not support VTs.</para>
+
+    <para>If the <varname>session</varname> parameter of any of these
+    functions is passed as <constant>NULL</constant>, the operation is
+    executed for the session the calling process is a member of, if
+    there is any.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para>If the test succeeds,
+    <function>sd_session_is_active()</function> and
+    <function>sd_session_is_remote()</function> return a
+    positive integer; if it fails, 0.  On success,
+    <function>sd_session_get_state()</function>,
+    <function>sd_session_get_uid()</function>,
+    <function>sd_session_get_seat()</function>,
+    <function>sd_session_get_service()</function>,
+    <function>sd_session_get_type()</function>,
+    <function>sd_session_get_class()</function>,
+    <function>sd_session_get_display()</function>,
+    <function>sd_session_get_remote_user()</function>,
+    <function>sd_session_get_remote_host()</function> and
+    <function>sd_session_get_tty()</function> return 0 or
+    a positive integer. On failure, these calls return a
+    negative errno-style error code.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Notes</title>
+
+    <para>The <function>sd_session_is_active()</function>,
+    <function>sd_session_get_state()</function>,
+    <function>sd_session_get_uid()</function>,
+    <function>sd_session_get_seat()</function>,
+    <function>sd_session_get_service()</function>,
+    <function>sd_session_get_type()</function>,
+    <function>sd_session_get_class()</function>,
+    <function>sd_session_get_display()</function>,
+    <function>sd_session_get_remote_host()</function>,
+    <function>sd_session_get_remote_user()</function> and
+    <function>sd_session_get_tty()</function>
+    interfaces are available as a shared library, which can
+    be compiled and linked to with the
+    <constant>libsystemd</constant> <citerefentry project='die-net'><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    file.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_pid_get_session</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/sd_uid_get_state.xml b/man/sd_uid_get_state.xml
new file mode 100644 (file)
index 0000000..b158f35
--- /dev/null
@@ -0,0 +1,204 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+  This file is part of systemd.
+
+  Copyright 2010 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="sd_uid_get_state" conditional='HAVE_PAM'>
+
+  <refentryinfo>
+    <title>sd_uid_get_state</title>
+    <productname>systemd</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>Developer</contrib>
+        <firstname>Lennart</firstname>
+        <surname>Poettering</surname>
+        <email>lennart@poettering.net</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_uid_get_state</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_uid_get_state</refname>
+    <refname>sd_uid_is_on_seat</refname>
+    <refname>sd_uid_get_sessions</refname>
+    <refname>sd_uid_get_seats</refname>
+    <refname>sd_uid_get_display</refname>
+    <refpurpose>Determine login state of a specific Unix user ID</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-login.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int <function>sd_uid_get_state</function></funcdef>
+        <paramdef>uid_t <parameter>uid</parameter></paramdef>
+        <paramdef>char **<parameter>state</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_uid_is_on_seat</function></funcdef>
+        <paramdef>uid_t <parameter>uid</parameter></paramdef>
+        <paramdef>int <parameter>require_active</parameter></paramdef>
+        <paramdef>const char *<parameter>seat</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_uid_get_sessions</function></funcdef>
+        <paramdef>uid_t <parameter>uid</parameter></paramdef>
+        <paramdef>int <parameter>require_active</parameter></paramdef>
+        <paramdef>char ***<parameter>sessions</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_uid_get_seats</function></funcdef>
+        <paramdef>uid_t <parameter>uid</parameter></paramdef>
+        <paramdef>int <parameter>require_active</parameter></paramdef>
+        <paramdef>char ***<parameter>seats</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_uid_get_display</function></funcdef>
+        <paramdef>uid_t <parameter>uid</parameter></paramdef>
+        <paramdef>char **<parameter>session</parameter></paramdef>
+      </funcprototype>
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><function>sd_uid_get_state()</function> may be used to
+    determine the login state of a specific Unix user identifier. The
+    following states are currently known: <literal>offline</literal>
+    (user not logged in at all), <literal>lingering</literal> (user
+    not logged in, but some user services running),
+    <literal>online</literal> (user logged in, but not active, i.e.
+    has no session in the foreground), <literal>active</literal> (user
+    logged in, and has at least one active session, i.e. one session
+    in the foreground), <literal>closing</literal> (user not logged
+    in, and not lingering, but some processes are still around). In
+    the future additional states might be defined, client code should
+    be written to be robust in regards to additional state strings
+    being returned. The returned string needs to be freed with the
+    libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use.</para>
+
+    <para><function>sd_uid_is_on_seat()</function> may be used to
+    determine whether a specific user is logged in or active on a
+    specific seat. Accepts a Unix user identifier and a seat
+    identifier string as parameters. The
+    <parameter>require_active</parameter> parameter is a boolean
+    value. If non-zero (true), this function will test if the user is
+    active (i.e. has a session that is in the foreground and accepting
+    user input) on the specified seat, otherwise (false) only if the
+    user is logged in (and possibly inactive) on the specified
+    seat.</para>
+
+    <para><function>sd_uid_get_sessions()</function> may be used to
+    determine the current sessions of the specified user. Accepts a
+    Unix user identifier as parameter. The
+    <parameter>require_active</parameter> parameter controls whether
+    the returned list shall consist of only those sessions where the
+    user is currently active (&gt; 0), where the user is currently
+    online but possibly inactive (= 0), or logged in at all but
+    possibly closing the session (&lt; 0). The call returns a
+    <constant>NULL</constant> terminated string array of session
+    identifiers in <parameter>sessions</parameter> which needs to be
+    freed by the caller with the libc
+    <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    call after use, including all the strings referenced. If the
+    string array parameter is passed as <constant>NULL</constant>, the
+    array will not be filled in, but the return code still indicates
+    the number of current sessions. Note that instead of an empty
+    array <constant>NULL</constant> may be returned and should be
+    considered equivalent to an empty array.</para>
+
+    <para>Similarly, <function>sd_uid_get_seats()</function> may be
+    used to determine the list of seats on which the user currently
+    has sessions. Similar semantics apply, however note that the user
+    may have multiple sessions on the same seat as well as sessions
+    with no attached seat and hence the number of entries in the
+    returned array may differ from the one returned by
+    <function>sd_uid_get_sessions()</function>.</para>
+
+    <para><function>sd_uid_get_display()</function> returns the name
+    of the "primary" session of a user. If the user has graphical
+    sessions, it will be the oldest graphical session. Otherwise, it
+    will be the oldest open session.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para>On success, <function>sd_uid_get_state()</function> returns
+    0 or a positive integer. If the test succeeds,
+    <function>sd_uid_is_on_seat()</function> returns a positive
+    integer; if it fails, 0.
+    <function>sd_uid_get_sessions()</function> and
+    <function>sd_uid_get_seats()</function> return the number of
+    entries in the returned arrays.
+    <function>sd_uid_get_display()</function> returns a non-negative
+    code on success. On failure, these calls return a negative
+    errno-style error code.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Notes</title>
+
+    <para>Functions described here are available as a shared library,
+    and can be compiled and linked to using the
+    <constant>libsystemd</constant> <citerefentry project='die-net'><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    entry.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>History</title>
+
+    <para><function>sd_uid_get_state()</function>,
+    <function>sd_uid_is_on_seat()</function>,
+    <function>sd_uid_get_sessions()</function>, and
+    <function>sd_uid_get_seats()</function> functions were added in
+    systemd-31.</para>
+
+    <para><function>sd_uid_get_display()</function> was added in
+    systemd-213.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_pid_get_owner_uid</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>