Sophie

Sophie

distrib > Fedora > 17 > i386 > media > updates-src > by-pkgid > ab4b662b9827b6375ffd451bf4abd615 > files > 435

systemd-44-24.fc17.src.rpm

From 85b034c691e7a827488c61bdae5d5da9d52ac72a Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Thu, 21 Jun 2012 16:52:54 +0200
Subject: [PATCH] login: wrap CanTTY and CanGraphical seat attributes in
 libsystemd-login (cherry picked from commit
 20747498c68575646fae88f4dd270fab219a25a6)

---
 man/sd_seat_get_active.xml     |   31 +++++++++++++++++++++++++++----
 man/sd_session_is_active.xml   |   16 ++++++++++++----
 src/login/libsystemd-login.sym |    2 ++
 src/login/sd-login.c           |   16 ++++++++++++++--
 src/login/test-login.c         |    8 ++++++++
 src/systemd/sd-login.h         |    6 ++++++
 6 files changed, 69 insertions(+), 10 deletions(-)

diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml
index acc6ee4..e63cf13 100644
--- a/man/sd_seat_get_active.xml
+++ b/man/sd_seat_get_active.xml
@@ -72,6 +72,16 @@
                                 <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>
 
@@ -111,6 +121,15 @@
                 sessions in parallel (whith 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 <literal>seat</literal> parameter of any
                 of these functions is passed as NULL the operation is
                 executed for the seat of the session of the calling
@@ -126,8 +145,10 @@
                 <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> returns
-                a positive integer, if it fails 0. On failure, these
+                <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>
 
@@ -135,8 +156,10 @@
                 <title>Notes</title>
 
                 <para>The <function>sd_seat_get_active()</function>,
-                <function>sd_seat_get_sessions()</function>, and
-                <function>sd_seat_can_multi_session()</function> interfaces
+                <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 shared library, which can be compiled
                 and linked to with the
                 <literal>libsystemd-login</literal>
diff --git a/man/sd_session_is_active.xml b/man/sd_session_is_active.xml
index 0665617..b6e0d2b 100644
--- a/man/sd_session_is_active.xml
+++ b/man/sd_session_is_active.xml
@@ -198,9 +198,13 @@
                 <para>If the test succeeds
                 <function>sd_session_is_active()</function> returns 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_service()</function> and
-                <function>sd_session_get_seat()</function> return 0 or
+                <function>sd_session_get_seat()</function>,
+                <function>sd_session_get_service()</function>,
+                <function>sd_session_get_type()</function>,
+                <function>sd_session_get_class()</function> and
+                <function>sd_session_get_display()</function> return 0 or
                 a positive integer. On failure, these calls return a
                 negative errno-style error code.</para>
         </refsect1>
@@ -209,9 +213,13 @@
                 <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_service()</function> and
-                <function>sd_session_get_seat()</function> interfaces
+                <function>sd_session_get_seat()</function>,
+                <function>sd_session_get_service()</function>,
+                <function>sd_session_get_type()</function>,
+                <function>sd_session_get_class()</function> and
+                <function>sd_session_get_display()</function> interfaces
                 are available as shared library, which can be compiled
                 and linked to with the
                 <literal>libsystemd-login</literal>
diff --git a/src/login/libsystemd-login.sym b/src/login/libsystemd-login.sym
index e43ee17..11bdc00 100644
--- a/src/login/libsystemd-login.sym
+++ b/src/login/libsystemd-login.sym
@@ -50,4 +50,6 @@ global:
 LIBSYSTEMD_LOGIN_186 {
 global:
         sd_session_get_state;
+        sd_seat_can_tty;
+        sd_seat_can_graphical;
 } LIBSYSTEMD_LOGIN_43;
diff --git a/src/login/sd-login.c b/src/login/sd-login.c
index 2effe7d..d47a49c 100644
--- a/src/login/sd-login.c
+++ b/src/login/sd-login.c
@@ -583,7 +583,7 @@ _public_ int sd_seat_get_sessions(const char *seat, char ***sessions, uid_t **ui
         return r;
 }
 
-_public_ int sd_seat_can_multi_session(const char *seat) {
+static int seat_get_can(const char *seat, const char *variable) {
         char *p, *s = NULL;
         int r;
 
@@ -592,7 +592,7 @@ _public_ int sd_seat_can_multi_session(const char *seat) {
                 return r;
 
         r = parse_env_file(p, NEWLINE,
-                           "CAN_MULTI_SESSION", &s,
+                           variable, &s,
                            NULL);
         free(p);
 
@@ -610,6 +610,18 @@ _public_ int sd_seat_can_multi_session(const char *seat) {
         return r;
 }
 
+_public_ int sd_seat_can_multi_session(const char *seat) {
+        return seat_get_can(seat, "CAN_MULTI_SESSION");
+}
+
+_public_ int sd_seat_can_tty(const char *seat) {
+        return seat_get_can(seat, "CAN_TTY");
+}
+
+_public_ int sd_seat_can_graphical(const char *seat) {
+        return seat_get_can(seat, "CAN_GRAPHICAL");
+}
+
 _public_ int sd_get_seats(char ***seats) {
         return get_files_in_directory("/run/systemd/seats/", seats);
 }
diff --git a/src/login/test-login.c b/src/login/test-login.c
index 2e0e257..5325aeb 100644
--- a/src/login/test-login.c
+++ b/src/login/test-login.c
@@ -99,6 +99,14 @@ int main(int argc, char* argv[]) {
         assert_se(r >= 0);
         printf("can do multi session = %s\n", yes_no(r));
 
+        r = sd_seat_can_tty(seat);
+        assert_se(r >= 0);
+        printf("can do tty = %s\n", yes_no(r));
+
+        r = sd_seat_can_graphical(seat);
+        assert_se(r >= 0);
+        printf("can do graphical = %s\n", yes_no(r));
+
         assert_se(sd_uid_get_state(u, &state) >= 0);
         printf("state = %s\n", state);
 
diff --git a/src/systemd/sd-login.h b/src/systemd/sd-login.h
index 1d5b657..a06f506 100644
--- a/src/systemd/sd-login.h
+++ b/src/systemd/sd-login.h
@@ -117,6 +117,12 @@ int sd_seat_get_sessions(const char *seat, char ***sessions, uid_t **uid, unsign
 /* Return whether the seat is multi-session capable */
 int sd_seat_can_multi_session(const char *seat);
 
+/* Return whether the seat is TTY capable, i.e. suitable for showing console UIs */
+int sd_seat_can_tty(const char *seat);
+
+/* Return whether the seat is graphics capable, i.e. suitable for showing graphical UIs */
+int sd_seat_can_graphical(const char *seat);
+
 /* Get all seats, store in *seats. Returns the number of seats. If
  * seats is NULL only returns number of seats. */
 int sd_get_seats(char ***seats);