2011-12-19 06:02:17 +04:00
<?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
2012-04-12 02:20:58 +04:00
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
2011-12-19 06:02:17 +04:00
(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
2012-04-12 02:20:58 +04:00
Lesser General Public License for more details.
2011-12-19 06:02:17 +04:00
2012-04-12 02:20:58 +04:00
You should have received a copy of the GNU Lesser General Public License
2011-12-19 06:02:17 +04:00
along with systemd; If not, see <http: / / w w w . g n u . o r g / l i c e n s e s /> .
-->
2013-02-03 07:47:47 +04:00
<refentry id= "sd_login_monitor_new" conditional= 'HAVE_PAM' >
2011-12-19 06:02:17 +04:00
<refentryinfo >
<title > sd_login_monitor_new</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_login_monitor_new</refentrytitle>
<manvolnum > 3</manvolnum>
</refmeta>
<refnamediv >
<refname > sd_login_monitor_new</refname>
<refname > sd_login_monitor_unref</refname>
<refname > sd_login_monitor_flush</refname>
<refname > sd_login_monitor_get_fd</refname>
2013-04-04 19:38:08 +04:00
<refname > sd_login_monitor_get_events</refname>
2013-04-04 20:31:22 +04:00
<refname > sd_login_monitor_get_timeout</refname>
2012-07-14 01:10:23 +04:00
<refname > sd_login_monitor</refname>
2013-04-25 00:54:55 +04:00
<refpurpose > Monitor login sessions, seats, users and virtual machines/containers</refpurpose>
2011-12-19 06:02:17 +04:00
</refnamediv>
<refsynopsisdiv >
<funcsynopsis >
<funcsynopsisinfo > #include < systemd/sd-login.h> </funcsynopsisinfo>
<funcprototype >
<funcdef > int <function > sd_login_monitor_new</function> </funcdef>
2014-05-08 03:28:46 +04:00
<paramdef > const char *<parameter > category</parameter> </paramdef>
<paramdef > sd_login_monitor **<parameter > ret</parameter> </paramdef>
2011-12-19 06:02:17 +04:00
</funcprototype>
<funcprototype >
2014-05-08 03:28:46 +04:00
<funcdef > sd_login_monitor *<function > sd_login_monitor_unref</function> </funcdef>
<paramdef > sd_login_monitor *<parameter > m</parameter> </paramdef>
2011-12-19 06:02:17 +04:00
</funcprototype>
<funcprototype >
<funcdef > int <function > sd_login_monitor_flush</function> </funcdef>
2014-05-08 03:28:46 +04:00
<paramdef > sd_login_monitor *<parameter > m</parameter> </paramdef>
2011-12-19 06:02:17 +04:00
</funcprototype>
<funcprototype >
<funcdef > int <function > sd_login_monitor_get_fd</function> </funcdef>
2014-05-08 03:28:46 +04:00
<paramdef > sd_login_monitor *<parameter > m</parameter> </paramdef>
2011-12-19 06:02:17 +04:00
</funcprototype>
2013-04-04 19:38:08 +04:00
<funcprototype >
<funcdef > int <function > sd_login_monitor_get_events</function> </funcdef>
2014-05-08 03:28:46 +04:00
<paramdef > sd_login_monitor *<parameter > m</parameter> </paramdef>
2013-04-04 19:38:08 +04:00
</funcprototype>
2013-04-04 20:31:22 +04:00
<funcprototype >
<funcdef > int <function > sd_login_monitor_get_timeout</function> </funcdef>
2014-05-08 03:28:46 +04:00
<paramdef > sd_login_monitor *<parameter > m</parameter> </paramdef>
<paramdef > uint64_t *<parameter > timeout_usec</parameter> </paramdef>
2013-04-04 20:31:22 +04:00
</funcprototype>
2011-12-19 06:02:17 +04:00
</funcsynopsis>
</refsynopsisdiv>
<refsect1 >
<title > Description</title>
<para > <function > sd_login_monitor_new()</function> may
2013-05-10 02:10:30 +04:00
be used to monitor login sessions, users, seats, and
2013-04-25 00:54:55 +04:00
virtual machines/containers. Via a monitor object a
file descriptor can be integrated into an application
defined event loop which is woken up each time a user
logs in, logs out or a seat is added or removed, or a
session, user, seat or virtual machine/container
changes state otherwise. The first parameter takes a
string which can be <literal > seat</literal> (to get
2011-12-19 06:02:17 +04:00
only notifications about seats being added, removed or
changed), <literal > session</literal> (to get only
notifications about sessions being created or removed
2013-04-25 00:54:55 +04:00
or changed), <literal > uid</literal> (to get only
2011-12-19 06:02:17 +04:00
notifications when a user changes state in respect to
2013-04-25 00:54:55 +04:00
logins) or <literal > machine</literal> (to get only
notifications when a virtual machine or container is
started or stopped). If notifications shall be
2013-06-27 03:47:34 +04:00
generated in all these conditions, <constant > NULL</constant> may be
2013-04-25 00:54:55 +04:00
passed. Note that in the future additional categories
may be defined. The second parameter returns a monitor
object and needs to be freed with the
2011-12-19 06:02:17 +04:00
<function > sd_login_monitor_unref()</function> call
after use.</para>
<para > <function > sd_login_monitor_unref()</function>
may be used to destroy a monitor object. Note that
this will invalidate any file descriptor returned by
<function > sd_login_monitor_get_fd()</function> .</para>
<para > <function > sd_login_monitor_flush()</function>
may be used to reset the wakeup state of the monitor
object. Whenever an event causes the monitor to wake
up the event loop via the file descriptor this
function needs to be called to reset the wake-up
2013-09-12 23:12:49 +04:00
state. If this call is not invoked, the file descriptor
2011-12-19 06:02:17 +04:00
will immediately wake up the event loop again.</para>
<para > <function > sd_login_monitor_get_fd()</function>
may be used to retrieve the file descriptor of the
monitor object that may be integrated in an
application defined event loop, based around
<citerefentry > <refentrytitle > poll</refentrytitle> <manvolnum > 2</manvolnum> </citerefentry>
or a similar interface. The application should include
2013-04-04 19:38:08 +04:00
the returned file descriptor as wake-up source for the
events mask returned by
2013-04-04 20:31:22 +04:00
<function > sd_login_monitor_get_events()</function> . It
should pass a timeout value as returned by
<function > sd_login_monitor_get_timeout()</function> . Whenever
2013-04-04 19:38:08 +04:00
a wake-up is triggered the file descriptor needs to be
reset via
2011-12-19 06:02:17 +04:00
<function > sd_login_monitor_flush()</function> . An
application needs to reread the login state with a
function like
<citerefentry > <refentrytitle > sd_get_seats</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry>
or similar to determine what changed.</para>
2013-04-04 19:38:08 +04:00
<para > <function > sd_login_monitor_get_events()</function>
will return the <function > poll()</function> mask to
wait for. This function will return a combination of
2013-06-27 03:47:34 +04:00
<constant > POLLIN</constant> , <constant > POLLOUT</constant>
2013-04-04 19:38:08 +04:00
and similar to fill into the
2013-06-27 03:47:34 +04:00
<literal > .events</literal> field of <varname > struct
pollfd</varname> .</para>
2013-04-04 20:31:22 +04:00
<para > <function > sd_login_monitor_get_timeout()</function>
will return a timeout value for usage in
<function > poll()</function> . This returns a value in
2013-06-27 03:47:34 +04:00
microseconds since the epoch of <constant > CLOCK_MONOTONIC</constant>
for timing out <function > poll()</function> in
<varname > timeout_usec</varname> . See
2013-04-04 20:31:22 +04:00
<citerefentry > <refentrytitle > clock_gettime</refentrytitle> <manvolnum > 2</manvolnum> </citerefentry>
for details about
2013-09-12 23:12:49 +04:00
<constant > CLOCK_MONOTONIC</constant> . If there is no
2013-04-04 20:31:22 +04:00
timeout to wait for this will fill in
2013-06-27 03:47:34 +04:00
<constant > (uint64_t) -1</constant> instead. Note that
2013-04-04 20:31:22 +04:00
<function > poll()</function> takes a relative timeout
in milliseconds rather than an absolute timeout in
microseconds. To convert the absolute 'us' timeout into
relative 'ms', use code like the following:</para>
<programlisting > uint64_t t;
int msec;
sd_login_monitor_get_timeout(m, & t);
if (t == (uint64_t) -1)
msec = -1;
else {
struct timespec ts;
uint64_t n;
clock_getttime(CLOCK_MONOTONIC, & ts);
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t > n ? (int) ((t - n + 999) / 1000) : 0;
}</programlisting>
<para > The code above does not do any error checking
2013-06-27 03:47:34 +04:00
for brevity's sake. The calculated <varname > msec</varname>
2013-04-04 20:31:22 +04:00
integer can be passed directly as
<function > poll()</function> 's timeout
parameter.</para>
2011-12-19 06:02:17 +04:00
</refsect1>
<refsect1 >
<title > Return Value</title>
2013-12-26 05:47:44 +04:00
<para > On success,
2013-04-04 20:31:22 +04:00
<function > sd_login_monitor_new()</function> ,
<function > sd_login_monitor_flush()</function> and
<function > sd_login_monitor_get_timeout()</function>
2013-12-26 05:47:44 +04:00
return 0 or a positive integer. On success,
2011-12-19 06:02:17 +04:00
<function > sd_login_monitor_get_fd()</function> returns
2013-12-26 05:47:44 +04:00
a Unix file descriptor. On success,
2013-04-04 19:38:08 +04:00
<function > sd_login_monitor_get_events()</function>
2013-06-27 03:47:34 +04:00
returns a combination of <constant > POLLIN</constant> ,
<constant > POLLOUT</constant> and suchlike. On failure,
2013-04-04 19:38:08 +04:00
these calls return a negative errno-style error
code.</para>
2011-12-19 06:02:17 +04:00
<para > <function > sd_login_monitor_unref()</function>
2013-06-27 03:47:34 +04:00
always returns <constant > NULL</constant> .</para>
2011-12-19 06:02:17 +04:00
</refsect1>
<refsect1 >
<title > Notes</title>
<para > The <function > sd_login_monitor_new()</function> ,
2013-04-04 19:38:08 +04:00
<function > sd_login_monitor_unref()</function> ,
<function > sd_login_monitor_flush()</function> ,
2013-04-04 20:31:22 +04:00
<function > sd_login_monitor_get_fd()</function> ,
<function > sd_login_monitor_get_events()</function> and
<function > sd_login_monitor_get_timeout()</function>
2013-12-26 05:47:43 +04:00
interfaces are available as a shared library, which can
2013-04-04 19:38:08 +04:00
be compiled and linked to with the
man: add a mapping for external manpages
It is annoying when we have dead links on fd.o.
Add project='man-pages|die-net|archlinux' to <citerefentry>-ies.
In generated html, add external links to
http://man7.org/linux/man-pages/man, http://linux.die.net/man/,
https://www.archlinux.org/.
By default, pages in sections 2 and 4 go to man7, since Michael
Kerrisk is the autorative source on kernel related stuff.
The rest of links goes to linux.die.net, because they have the
manpages.
Except for the pacman stuff, since it seems to be only available from
archlinux.org.
Poor gummiboot gets no link, because gummitboot(8) ain't to be found
on the net. According to common wisdom, that would mean that it does
not exist. But I have seen Kay using it, so I know it does, and
deserves to be found. Can somebody be nice and put it up somewhere?
2014-07-08 02:25:54 +04:00
<constant > libsystemd</constant> <citerefentry project= 'die-net' > <refentrytitle > pkg-config</refentrytitle> <manvolnum > 1</manvolnum> </citerefentry>
2011-12-19 06:02:17 +04:00
file.</para>
</refsect1>
<refsect1 >
<title > See Also</title>
<para >
<citerefentry > <refentrytitle > systemd</refentrytitle> <manvolnum > 1</manvolnum> </citerefentry> ,
2012-07-13 03:50:05 +04:00
<citerefentry > <refentrytitle > sd-login</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry> ,
2013-04-04 19:38:08 +04:00
<citerefentry > <refentrytitle > sd_get_seats</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry> ,
2013-04-04 20:31:22 +04:00
<citerefentry > <refentrytitle > poll</refentrytitle> <manvolnum > 2</manvolnum> </citerefentry> ,
<citerefentry > <refentrytitle > clock_gettime</refentrytitle> <manvolnum > 2</manvolnum> </citerefentry>
2011-12-19 06:02:17 +04:00
</para>
</refsect1>
</refentry>