chiark / gitweb /
login: wrap CanTTY and CanGraphical seat attributes in libsystemd-login
authorLennart Poettering <lennart@poettering.net>
Thu, 21 Jun 2012 14:52:54 +0000 (16:52 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 21 Jun 2012 14:52:54 +0000 (16:52 +0200)
man/sd_seat_get_active.xml
man/sd_session_is_active.xml
src/login/libsystemd-login.sym
src/login/sd-login.c
src/login/test-login.c
src/systemd/sd-login.h

index 997c388..82a1ea0 100644 (file)
                                 <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>
 
                 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
                 <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>
 
                 <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>
index f9b2874..a14286a 100644 (file)
                 <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>
                 <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>
index 347e073..ff51be7 100644 (file)
@@ -50,4 +50,6 @@ global:
 LIBSYSTEMD_LOGIN_186 {
 global:
         sd_session_get_state;
+        sd_seat_can_tty;
+        sd_seat_can_graphical;
 } LIBSYSTEMD_LOGIN_43;
index 223e121..1978a05 100644 (file)
@@ -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);
 }
index d0916ce..159ff3e 100644 (file)
@@ -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);
 
index bddc74e..1a36a56 100644 (file)
@@ -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);