diff options
-rw-r--r-- | man/sd_seat_get_active.xml | 31 | ||||
-rw-r--r-- | man/sd_session_is_active.xml | 16 | ||||
-rw-r--r-- | src/login/libsystemd-login.sym | 2 | ||||
-rw-r--r-- | src/login/sd-login.c | 16 | ||||
-rw-r--r-- | src/login/test-login.c | 8 | ||||
-rw-r--r-- | 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 997c388901..82a1ea0481 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 f9b2874541..a14286aeab 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 347e0730a6..ff51be729b 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 223e121bed..1978a05dc0 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 d0916ced6a..159ff3efc5 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 bddc74e729..1a36a56b12 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); |