diff options
-rw-r--r-- | man/pam_systemd.xml | 4 | ||||
-rw-r--r-- | man/sd_session_is_active.xml | 23 | ||||
-rw-r--r-- | src/libsystemd/libsystemd.sym.m4 | 7 | ||||
-rw-r--r-- | src/libsystemd/sd-login/sd-login.c | 19 | ||||
-rw-r--r-- | src/systemd/sd-login.h | 3 |
5 files changed, 54 insertions, 2 deletions
diff --git a/man/pam_systemd.xml b/man/pam_systemd.xml index 52dfe9df43..4df26a3f2b 100644 --- a/man/pam_systemd.xml +++ b/man/pam_systemd.xml @@ -268,7 +268,9 @@ as defined by the <ulink url="http://standards.freedesktop.org/desktop-entry-spec/latest/">Desktop Entry - Specification</ulink>.</para></listitem> + Specification</ulink>. See + <citerefentry><refentrytitle>sd_session_get_desktop</refentrytitle><manvolnum>3</manvolnum></citerefentry> + for more details.</para></listitem> </varlistentry> <varlistentry> diff --git a/man/sd_session_is_active.xml b/man/sd_session_is_active.xml index 5006be4df5..e9840669c2 100644 --- a/man/sd_session_is_active.xml +++ b/man/sd_session_is_active.xml @@ -51,6 +51,7 @@ <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> @@ -110,6 +111,12 @@ </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> @@ -218,6 +225,22 @@ <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 diff --git a/src/libsystemd/libsystemd.sym.m4 b/src/libsystemd/libsystemd.sym.m4 index d1450fbb26..87da7ac021 100644 --- a/src/libsystemd/libsystemd.sym.m4 +++ b/src/libsystemd/libsystemd.sym.m4 @@ -153,6 +153,11 @@ global: sd_machine_get_ifindices; } LIBSYSTEMD_214; +LIBSYSTEMD_217 { +global: + sd_session_get_desktop; +} LIBSYSTEMD_216; + m4_ifdef(`ENABLE_KDBUS', LIBSYSTEMD_FUTURE { global: @@ -438,5 +443,5 @@ global: /* sd-path */ sd_path_home; sd_path_search; -} LIBSYSTEMD_216; +} LIBSYSTEMD_217; ) diff --git a/src/libsystemd/sd-login/sd-login.c b/src/libsystemd/sd-login/sd-login.c index 95cb6ff581..c72d23ed53 100644 --- a/src/libsystemd/sd-login/sd-login.c +++ b/src/libsystemd/sd-login/sd-login.c @@ -485,6 +485,25 @@ _public_ int sd_session_get_class(const char *session, char **class) { return session_get_string(session, "CLASS", class); } +_public_ int sd_session_get_desktop(const char *session, char **desktop) { + _cleanup_free_ char *escaped = NULL; + char *t; + int r; + + assert_return(desktop, -EINVAL); + + r = session_get_string(session, "DESKTOP", &escaped); + if (r < 0) + return r; + + t = cunescape(escaped); + if (!t) + return -ENOMEM; + + *desktop = t; + return 0; +} + _public_ int sd_session_get_display(const char *session, char **display) { return session_get_string(session, "DISPLAY", display); } diff --git a/src/systemd/sd-login.h b/src/systemd/sd-login.h index 1eb3be30b5..93af19709b 100644 --- a/src/systemd/sd-login.h +++ b/src/systemd/sd-login.h @@ -147,6 +147,9 @@ int sd_session_get_type(const char *session, char **type); /* Determine the class of this session, i.e. one of "user", "greeter" or "lock-screen". */ int sd_session_get_class(const char *session, char **clazz); +/* Determine the desktop brand of this session, i.e. something like "GNOME", "KDE" or "SYSTEMD-CONSOLE". */ +int sd_session_get_desktop(const char *session, char **desktop); + /* Determine the X11 display of this session. */ int sd_session_get_display(const char *session, char **display); |