systemd.login module¶
Python interface to the libsystemd-login library.
-
systemd.login.
machine_names
() → list¶ Returns a list of currently running virtual machines and containers on the system. Wraps sd_get_machine_names(3).
-
systemd.login.
seats
() → list¶ Returns a list of currently available local seats. Wraps sd_get_seats(3).
-
systemd.login.
sessions
() → list¶ Returns a list of current login sessions. Wraps sd_get_sessions(3).
-
systemd.login.
uids
() → list¶ Returns a list of uids of users who currently have login sessions. Wraps sd_get_uids(3).
-
class
systemd.login.
Monitor
([category]) → ...¶ Monitor may be used to monitor login sessions, users, seats, and virtual machines/containers. Monitor provides a file descriptor which can be integrated in an external event loop.
See man:sd_login_monitor_new(3) for the details about what can be monitored.
-
close
() → None¶ Free resources allocated by this Monitor object. This method invokes sd_login_monitor_unref(). See man:sd_login_monitor_unref(3).
-
fileno
() → int¶ Get a file descriptor to poll for events. This method wraps sd_login_monitor_get_fd(3).
-
flush
() → None¶ Reset the wakeup state of the monitor object. This method invokes sd_login_monitor_flush(). See man:sd_login_monitor_flush(3).
-
get_events
() → int¶ Returns a mask of poll() events to wait for on the file descriptor returned by .fileno().
See man:sd_login_monitor_get_events(3) for further discussion.
-
get_timeout
() → int or None¶ Returns a timeout value for usage in poll(), the time since the epoch of clock_gettime(2) in microseconds, or None if no timeout is necessary.
The return value must be converted to a relative timeout in milliseconds if it is to be used as an argument for poll(). See man:sd_login_monitor_get_timeout(3) for further discussion.
-
get_timeout_ms
() → int¶ Returns a timeout value suitable for usage in poll(), the value returned by .get_timeout() converted to relative ms, or -1 if no timeout is necessary.
-
Example: polling for events¶
This example shows that session/uid/seat/machine events can be waited for (using e.g. poll). This makes it easy to integrate Monitor in an external event loop:
>>> import select
>>> from systemd import login
>>> m = login.Monitor("machine")
>>> p = select.poll()
>>> p.register(m, m.get_events())
>>> login.machine_names()
[]
>>> p.poll()
[(3, 1)]
>>> login.machine_names()
['fedora-25']