diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2015-05-14 16:26:16 +1200 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2015-05-14 16:26:16 +1200 |
commit | c1d6fb8f5a393919a1cac14ffdcecfff3f20a9be (patch) | |
tree | 4f335f60c78081ca3f545f73f6803710890d6ea8 | |
parent | 76fd475e66e22cbcc3ac1b206acc20eb2c7d263d (diff) | |
download | lightdm-git-c1d6fb8f5a393919a1cac14ffdcecfff3f20a9be.tar.gz |
Use new Xmir binary when running X under Unity System Compositor
-rw-r--r-- | .bzrignore | 1 | ||||
-rw-r--r-- | data/lightdm.conf | 2 | ||||
-rw-r--r-- | src/lightdm.c | 2 | ||||
-rw-r--r-- | src/seat-unity.c | 8 | ||||
-rw-r--r-- | src/x-server-local.c | 2 | ||||
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rw-r--r-- | tests/scripts/unity-autologin-legacy.conf | 42 | ||||
-rw-r--r-- | tests/scripts/unity-autologin.conf | 12 | ||||
-rw-r--r-- | tests/scripts/unity-compositor-command.conf | 12 | ||||
-rw-r--r-- | tests/scripts/unity-compositor-crash.conf | 12 | ||||
-rw-r--r-- | tests/scripts/unity-compositor-next-session.conf | 24 | ||||
-rw-r--r-- | tests/scripts/unity-login.conf | 14 | ||||
-rw-r--r-- | tests/scripts/unity-mir-greeter-x-session.conf | 12 | ||||
-rw-r--r-- | tests/scripts/unity-mir-session-x-greeter.conf | 12 | ||||
-rw-r--r-- | tests/scripts/unity-plymouth.conf | 12 | ||||
-rw-r--r-- | tests/scripts/unity-script-hooks.conf | 24 | ||||
-rw-r--r-- | tests/scripts/unity-switch.conf | 38 | ||||
-rw-r--r-- | tests/src/Makefile.am | 14 | ||||
-rw-r--r-- | tests/src/Xmir.c | 311 | ||||
-rw-r--r-- | tests/src/libsystem.c | 9 | ||||
-rw-r--r-- | tests/src/test-runner.c | 1 | ||||
-rwxr-xr-x | tests/test-unity-autologin-legacy | 2 |
22 files changed, 478 insertions, 90 deletions
@@ -73,4 +73,5 @@ tests/src/test-session tests/src/unity-system-compositor tests/src/vnc-client tests/src/X +tests/src/Xmir tests/src/Xvnc diff --git a/data/lightdm.conf b/data/lightdm.conf index bfce7987..a72fcf2d 100644 --- a/data/lightdm.conf +++ b/data/lightdm.conf @@ -40,6 +40,7 @@ # pam-autologin-service = PAM service to use for autologin # pam-greeter-service = PAM service to use for greeters # xserver-command = X server command to run (can also contain arguments e.g. X -special-option) +# xmir-command = Xmir server command to run (can also contain arguments e.g. Xmir -special-option) # xserver-layout = Layout to pass to X server # xserver-config = Config file to pass to X server # xserver-allow-tcp = True if TCP/IP connections are allowed to this X server @@ -81,6 +82,7 @@ #pam-autologin-service=lightdm-autologin #pam-greeter-service=lightdm-greeter #xserver-command=X +#xmir-command=Xmir #xserver-layout= #xserver-config= #xserver-allow-tcp=false diff --git a/src/lightdm.c b/src/lightdm.c index 105a1db7..9890ec94 100644 --- a/src/lightdm.c +++ b/src/lightdm.c @@ -1356,6 +1356,8 @@ main (int argc, char **argv) config_set_string (config_get_instance (), "SeatDefaults", "user-session", USER_SESSION); if (!config_has_key (config_get_instance (), "SeatDefaults", "session-wrapper")) config_set_string (config_get_instance (), "SeatDefaults", "session-wrapper", "lightdm-session"); + if (!config_has_key (config_get_instance (), "SeatDefaults", "xmir-command")) + config_set_string (config_get_instance (), "SeatDefaults", "xmir-command", "Xmir"); if (!config_has_key (config_get_instance (), "LightDM", "log-directory")) config_set_string (config_get_instance (), "LightDM", "log-directory", default_log_dir); g_free (default_log_dir); diff --git a/src/seat-unity.c b/src/seat-unity.c index bc08437d..9fec0aba 100644 --- a/src/seat-unity.c +++ b/src/seat-unity.c @@ -203,9 +203,11 @@ create_x_server (Seat *seat) x_server = x_server_local_new (); - command = seat_get_string_property (seat, "xserver-command"); - if (command) - x_server_local_set_command (x_server, command); + command = seat_get_string_property (seat, "xmir-command"); + /* Fall back to using X if Xmir is not available as this was the previous way XMir worked */ + if (strcmp (command, "Xmir") == 0 && !g_find_program_in_path ("Xmir")) + command = seat_get_string_property (seat, "xserver-command"); + x_server_local_set_command (x_server, command); id = g_strdup_printf ("x-%d", SEAT_UNITY (seat)->priv->next_x_server_id); SEAT_UNITY (seat)->priv->next_x_server_id++; diff --git a/src/x-server-local.c b/src/x-server-local.c index 3f58e0b7..53ea6082 100644 --- a/src/x-server-local.c +++ b/src/x-server-local.c @@ -555,7 +555,7 @@ x_server_local_init (XServerLocal *server) { server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, X_SERVER_LOCAL_TYPE, XServerLocalPrivate); server->priv->vt = -1; - server->priv->command = g_strdup ("X"); + server->priv->command = g_strdup ("Xmir"); } static void diff --git a/tests/Makefile.am b/tests/Makefile.am index cf9d1dcf..0f90d5e9 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -203,6 +203,7 @@ TESTS = \ test-unity-compositor-next-session \ test-unity-compositor-mir-next-session \ test-unity-autologin \ + test-unity-autologin-legacy \ test-unity-login \ test-unity-switch \ test-unity-plymouth \ @@ -515,6 +516,7 @@ EXTRA_DIST = \ scripts/switch-to-user-resettable.conf \ scripts/system-xauthority.conf \ scripts/unity-autologin.conf \ + scripts/unity-autologin-legacy.conf \ scripts/unity-compositor-command.conf \ scripts/unity-compositor-crash.conf \ scripts/unity-compositor-fail-ready.conf \ diff --git a/tests/scripts/unity-autologin-legacy.conf b/tests/scripts/unity-autologin-legacy.conf new file mode 100644 index 00000000..deb7eb2b --- /dev/null +++ b/tests/scripts/unity-autologin-legacy.conf @@ -0,0 +1,42 @@ +# +# Check use legacy X command if Xmir not present +# + +[test-xmir] +hide=true + +[SeatDefaults] +type=unity +autologin-user=have-password1 +user-session=default + +#?*START-DAEMON +#?RUNNER DAEMON-START + +# System compositor starts +#?UNITY-SYSTEM-COMPOSITOR START FILE=/run/mir_socket VT=7 XDG_VTNR=7 +#?*UNITY-SYSTEM-COMPOSITOR READY + +# X server starts +#?XSERVER-0 START SEAT=seat0 MIR-ID=x-0 + +# Daemon connects when X server is ready +#?*XSERVER-0 INDICATE-READY +#?XSERVER-0 INDICATE-READY +#?XSERVER-0 ACCEPT-CONNECT + +# Session starts +#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1 +#?LOGIN1 ACTIVATE-SESSION SESSION=c0 +#?XSERVER-0 ACCEPT-CONNECT +#?SESSION-X-0 CONNECT-XSERVER + +# System compositor switches to session +#?UNITY-SYSTEM-COMPOSITOR SET-ACTIVE-SESSION ID=x-0 + +# Cleanup +#?*STOP-DAEMON +#?SESSION-X-0 TERMINATE SIGNAL=15 +#?XSERVER-0 TERMINATE SIGNAL=15 +#?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15 +#?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/scripts/unity-autologin.conf b/tests/scripts/unity-autologin.conf index 63a99702..eb4af55a 100644 --- a/tests/scripts/unity-autologin.conf +++ b/tests/scripts/unity-autologin.conf @@ -15,17 +15,17 @@ user-session=default #?*UNITY-SYSTEM-COMPOSITOR READY # X server starts -#?XSERVER-0 START SEAT=seat0 MIR-ID=x-0 +#?XMIR-0 START SEAT=seat0 MIR-ID=x-0 # Daemon connects when X server is ready -#?*XSERVER-0 INDICATE-READY -#?XSERVER-0 INDICATE-READY -#?XSERVER-0 ACCEPT-CONNECT +#?*XMIR-0 INDICATE-READY +#?XMIR-0 INDICATE-READY +#?XMIR-0 ACCEPT-CONNECT # Session starts #?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1 #?LOGIN1 ACTIVATE-SESSION SESSION=c0 -#?XSERVER-0 ACCEPT-CONNECT +#?XMIR-0 ACCEPT-CONNECT #?SESSION-X-0 CONNECT-XSERVER # System compositor switches to session @@ -34,6 +34,6 @@ user-session=default # Cleanup #?*STOP-DAEMON #?SESSION-X-0 TERMINATE SIGNAL=15 -#?XSERVER-0 TERMINATE SIGNAL=15 +#?XMIR-0 TERMINATE SIGNAL=15 #?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15 #?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/scripts/unity-compositor-command.conf b/tests/scripts/unity-compositor-command.conf index ab4d06c5..c5e5f886 100644 --- a/tests/scripts/unity-compositor-command.conf +++ b/tests/scripts/unity-compositor-command.conf @@ -15,17 +15,17 @@ unity-compositor-command=unity-system-compositor --test #?*UNITY-SYSTEM-COMPOSITOR READY # X server starts -#?XSERVER-0 START SEAT=seat0 MIR-ID=x-0 +#?XMIR-0 START SEAT=seat0 MIR-ID=x-0 # Daemon connects when X server is ready -#?*XSERVER-0 INDICATE-READY -#?XSERVER-0 INDICATE-READY -#?XSERVER-0 ACCEPT-CONNECT +#?*XMIR-0 INDICATE-READY +#?XMIR-0 INDICATE-READY +#?XMIR-0 ACCEPT-CONNECT # Greeter starts #?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter #?LOGIN1 ACTIVATE-SESSION SESSION=c0 -#?XSERVER-0 ACCEPT-CONNECT +#?XMIR-0 ACCEPT-CONNECT #?GREETER-X-0 CONNECT-XSERVER #?GREETER-X-0 CONNECT-TO-DAEMON #?GREETER-X-0 CONNECTED-TO-DAEMON @@ -36,6 +36,6 @@ unity-compositor-command=unity-system-compositor --test # Cleanup #?*STOP-DAEMON #?GREETER-X-0 TERMINATE SIGNAL=15 -#?XSERVER-0 TERMINATE SIGNAL=15 +#?XMIR-0 TERMINATE SIGNAL=15 #?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15 #?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/scripts/unity-compositor-crash.conf b/tests/scripts/unity-compositor-crash.conf index 0994fd78..80fa6922 100644 --- a/tests/scripts/unity-compositor-crash.conf +++ b/tests/scripts/unity-compositor-crash.conf @@ -13,17 +13,17 @@ type=unity #?*UNITY-SYSTEM-COMPOSITOR READY # X server starts -#?XSERVER-0 START SEAT=seat0 MIR-ID=x-0 +#?XMIR-0 START SEAT=seat0 MIR-ID=x-0 # Daemon connects when X server is ready -#?*XSERVER-0 INDICATE-READY -#?XSERVER-0 INDICATE-READY -#?XSERVER-0 ACCEPT-CONNECT +#?*XMIR-0 INDICATE-READY +#?XMIR-0 INDICATE-READY +#?XMIR-0 ACCEPT-CONNECT # Greeter starts #?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter #?LOGIN1 ACTIVATE-SESSION SESSION=c0 -#?XSERVER-0 ACCEPT-CONNECT +#?XMIR-0 ACCEPT-CONNECT #?GREETER-X-0 CONNECT-XSERVER #?GREETER-X-0 CONNECT-TO-DAEMON #?GREETER-X-0 CONNECTED-TO-DAEMON @@ -36,5 +36,5 @@ type=unity # Daemon exits with error code #?GREETER-X-0 TERMINATE SIGNAL=15 -#?XSERVER-0 TERMINATE SIGNAL=15 +#?XMIR-0 TERMINATE SIGNAL=15 #?RUNNER DAEMON-EXIT STATUS=1 diff --git a/tests/scripts/unity-compositor-next-session.conf b/tests/scripts/unity-compositor-next-session.conf index 6e7396e6..fc4dd421 100644 --- a/tests/scripts/unity-compositor-next-session.conf +++ b/tests/scripts/unity-compositor-next-session.conf @@ -16,25 +16,25 @@ autologin-in-background=true #?*UNITY-SYSTEM-COMPOSITOR READY # Greeter session -#?XSERVER-0 START SEAT=seat0 MIR-ID=x-0 -#?*XSERVER-0 INDICATE-READY -#?XSERVER-0 INDICATE-READY -#?XSERVER-0 ACCEPT-CONNECT +#?XMIR-0 START SEAT=seat0 MIR-ID=x-0 +#?*XMIR-0 INDICATE-READY +#?XMIR-0 INDICATE-READY +#?XMIR-0 ACCEPT-CONNECT #?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter #?LOGIN1 ACTIVATE-SESSION SESSION=c0 -#?XSERVER-0 ACCEPT-CONNECT +#?XMIR-0 ACCEPT-CONNECT #?GREETER-X-0 CONNECT-XSERVER #?GREETER-X-0 CONNECT-TO-DAEMON #?GREETER-X-0 CONNECTED-TO-DAEMON # Background session -#?XSERVER-1 START SEAT=seat0 MIR-ID=x-1 -#?*XSERVER-1 INDICATE-READY -#?XSERVER-1 INDICATE-READY -#?XSERVER-1 ACCEPT-CONNECT +#?XMIR-1 START SEAT=seat0 MIR-ID=x-1 +#?*XMIR-1 INDICATE-READY +#?XMIR-1 INDICATE-READY +#?XMIR-1 ACCEPT-CONNECT #?SESSION-X-1 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password2 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password2 #?LOGIN1 ACTIVATE-SESSION SESSION=c0 -#?XSERVER-1 ACCEPT-CONNECT +#?XMIR-1 ACCEPT-CONNECT #?SESSION-X-1 CONNECT-XSERVER # System compositor switches to greeter @@ -52,8 +52,8 @@ autologin-in-background=true # Cleanup #?*STOP-DAEMON #?GREETER-X-0 TERMINATE SIGNAL=15 -#?XSERVER-0 TERMINATE SIGNAL=15 -#?XSERVER-1 TERMINATE SIGNAL=15 +#?XMIR-0 TERMINATE SIGNAL=15 +#?XMIR-1 TERMINATE SIGNAL=15 #?SESSION-X-1 TERMINATE SIGNAL=15 #?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15 #?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/scripts/unity-login.conf b/tests/scripts/unity-login.conf index 74e8dac7..90581202 100644 --- a/tests/scripts/unity-login.conf +++ b/tests/scripts/unity-login.conf @@ -14,17 +14,17 @@ user-session=default #?*UNITY-SYSTEM-COMPOSITOR READY # X server starts -#?XSERVER-0 START SEAT=seat0 MIR-ID=x-0 +#?XMIR-0 START SEAT=seat0 MIR-ID=x-0 # Daemon connects when X server is ready -#?*XSERVER-0 INDICATE-READY -#?XSERVER-0 INDICATE-READY -#?XSERVER-0 ACCEPT-CONNECT +#?*XMIR-0 INDICATE-READY +#?XMIR-0 INDICATE-READY +#?XMIR-0 ACCEPT-CONNECT # Greeter starts #?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter #?LOGIN1 ACTIVATE-SESSION SESSION=c0 -#?XSERVER-0 ACCEPT-CONNECT +#?XMIR-0 ACCEPT-CONNECT #?GREETER-X-0 CONNECT-XSERVER #?GREETER-X-0 CONNECT-TO-DAEMON #?GREETER-X-0 CONNECTED-TO-DAEMON @@ -43,12 +43,12 @@ user-session=default # Session starts #?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1 #?LOGIN1 ACTIVATE-SESSION SESSION=c1 -#?XSERVER-0 ACCEPT-CONNECT +#?XMIR-0 ACCEPT-CONNECT #?SESSION-X-0 CONNECT-XSERVER # Cleanup #?*STOP-DAEMON #?SESSION-X-0 TERMINATE SIGNAL=15 -#?XSERVER-0 TERMINATE SIGNAL=15 +#?XMIR-0 TERMINATE SIGNAL=15 #?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15 #?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/scripts/unity-mir-greeter-x-session.conf b/tests/scripts/unity-mir-greeter-x-session.conf index 1aeda18c..41e94875 100644 --- a/tests/scripts/unity-mir-greeter-x-session.conf +++ b/tests/scripts/unity-mir-greeter-x-session.conf @@ -28,17 +28,17 @@ user-session=default #?*GREETER-MIR-greeter-0 START-SESSION # X server starts -#?XSERVER-0 START SEAT=seat0 MIR-ID=x-0 +#?XMIR-0 START SEAT=seat0 MIR-ID=x-0 # Daemon connects when X server is ready -#?*XSERVER-0 INDICATE-READY -#?XSERVER-0 INDICATE-READY -#?XSERVER-0 ACCEPT-CONNECT +#?*XMIR-0 INDICATE-READY +#?XMIR-0 INDICATE-READY +#?XMIR-0 ACCEPT-CONNECT # Session starts #?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/no-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=no-password1 #?LOGIN1 ACTIVATE-SESSION SESSION=c1 -#?XSERVER-0 ACCEPT-CONNECT +#?XMIR-0 ACCEPT-CONNECT #?SESSION-X-0 CONNECT-XSERVER # System compositor switches to session @@ -50,6 +50,6 @@ user-session=default # Cleanup #?*STOP-DAEMON #?SESSION-X-0 TERMINATE SIGNAL=15 -#?XSERVER-0 TERMINATE SIGNAL=15 +#?XMIR-0 TERMINATE SIGNAL=15 #?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15 #?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/scripts/unity-mir-session-x-greeter.conf b/tests/scripts/unity-mir-session-x-greeter.conf index 7937d86f..a2f6aea3 100644 --- a/tests/scripts/unity-mir-session-x-greeter.conf +++ b/tests/scripts/unity-mir-session-x-greeter.conf @@ -14,17 +14,17 @@ user-session=mir #?*UNITY-SYSTEM-COMPOSITOR READY # X server starts -#?XSERVER-0 START SEAT=seat0 MIR-ID=x-0 +#?XMIR-0 START SEAT=seat0 MIR-ID=x-0 # Daemon connects when X server is ready -#?*XSERVER-0 INDICATE-READY -#?XSERVER-0 INDICATE-READY -#?XSERVER-0 ACCEPT-CONNECT +#?*XMIR-0 INDICATE-READY +#?XMIR-0 INDICATE-READY +#?XMIR-0 ACCEPT-CONNECT # Greeter starts #?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter #?LOGIN1 ACTIVATE-SESSION SESSION=c0 -#?XSERVER-0 ACCEPT-CONNECT +#?XMIR-0 ACCEPT-CONNECT #?GREETER-X-0 CONNECT-XSERVER #?GREETER-X-0 CONNECT-TO-DAEMON #?GREETER-X-0 CONNECTED-TO-DAEMON @@ -46,7 +46,7 @@ user-session=mir # Greeter quits once session ready #?GREETER-X-0 TERMINATE SIGNAL=15 -#?XSERVER-0 TERMINATE SIGNAL=15 +#?XMIR-0 TERMINATE SIGNAL=15 # Cleanup #?*STOP-DAEMON diff --git a/tests/scripts/unity-plymouth.conf b/tests/scripts/unity-plymouth.conf index feae1adf..04be42c0 100644 --- a/tests/scripts/unity-plymouth.conf +++ b/tests/scripts/unity-plymouth.conf @@ -25,17 +25,17 @@ active=true #?*UNITY-SYSTEM-COMPOSITOR READY # X server starts -#?XSERVER-0 START SEAT=seat0 MIR-ID=x-0 +#?XMIR-0 START SEAT=seat0 MIR-ID=x-0 # Daemon connects when X server is ready -#?*XSERVER-0 INDICATE-READY -#?XSERVER-0 INDICATE-READY -#?XSERVER-0 ACCEPT-CONNECT +#?*XMIR-0 INDICATE-READY +#?XMIR-0 INDICATE-READY +#?XMIR-0 ACCEPT-CONNECT # Session starts #?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1 #?LOGIN1 ACTIVATE-SESSION SESSION=c0 -#?XSERVER-0 ACCEPT-CONNECT +#?XMIR-0 ACCEPT-CONNECT #?SESSION-X-0 CONNECT-XSERVER # System compositor switches to session @@ -44,6 +44,6 @@ active=true # Cleanup #?*STOP-DAEMON #?SESSION-X-0 TERMINATE SIGNAL=15 -#?XSERVER-0 TERMINATE SIGNAL=15 +#?XMIR-0 TERMINATE SIGNAL=15 #?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15 #?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/scripts/unity-script-hooks.conf b/tests/scripts/unity-script-hooks.conf index 4db13cfb..4f5c8220 100644 --- a/tests/scripts/unity-script-hooks.conf +++ b/tests/scripts/unity-script-hooks.conf @@ -20,12 +20,12 @@ user-session=default #?*UNITY-SYSTEM-COMPOSITOR READY # X server starts -#?XSERVER-0 START SEAT=seat0 MIR-ID=x-0 +#?XMIR-0 START SEAT=seat0 MIR-ID=x-0 # Daemon connects when X server is ready -#?*XSERVER-0 INDICATE-READY -#?XSERVER-0 INDICATE-READY -#?XSERVER-0 ACCEPT-CONNECT +#?*XMIR-0 INDICATE-READY +#?XMIR-0 INDICATE-READY +#?XMIR-0 ACCEPT-CONNECT #?SCRIPT-HOOK DISPLAY-SETUP #?SCRIPT-HOOK SESSION-SETUP USER=have-password1 @@ -33,7 +33,7 @@ user-session=default # Session starts #?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1 #?LOGIN1 ACTIVATE-SESSION SESSION=c0 -#?XSERVER-0 ACCEPT-CONNECT +#?XMIR-0 ACCEPT-CONNECT #?SESSION-X-0 CONNECT-XSERVER # System compositor switches to session @@ -46,18 +46,18 @@ user-session=default #?SCRIPT-HOOK SESSION-CLEANUP USER=have-password1 # X server stops -#?XSERVER-0 TERMINATE SIGNAL=15 +#?XMIR-0 TERMINATE SIGNAL=15 # Script hooks run #?SCRIPT-HOOK DISPLAY-STOPPED # X server starts -#?XSERVER-1 START SEAT=seat0 MIR-ID=x-1 +#?XMIR-1 START SEAT=seat0 MIR-ID=x-1 # Daemon connects when X server is ready -#?*XSERVER-1 INDICATE-READY -#?XSERVER-1 INDICATE-READY -#?XSERVER-1 ACCEPT-CONNECT +#?*XMIR-1 INDICATE-READY +#?XMIR-1 INDICATE-READY +#?XMIR-1 ACCEPT-CONNECT # Script hooks run #?SCRIPT-HOOK DISPLAY-SETUP @@ -66,7 +66,7 @@ user-session=default # Greeter starts #?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter #?LOGIN1 ACTIVATE-SESSION SESSION=c1 -#?XSERVER-1 ACCEPT-CONNECT +#?XMIR-1 ACCEPT-CONNECT #?GREETER-X-1 CONNECT-XSERVER #?GREETER-X-1 CONNECT-TO-DAEMON #?GREETER-X-1 CONNECTED-TO-DAEMON @@ -77,7 +77,7 @@ user-session=default # Cleanup #?*STOP-DAEMON #?GREETER-X-1 TERMINATE SIGNAL=15 -#?XSERVER-1 TERMINATE SIGNAL=15 +#?XMIR-1 TERMINATE SIGNAL=15 # Script hooks run #?SCRIPT-HOOK DISPLAY-STOPPED diff --git a/tests/scripts/unity-switch.conf b/tests/scripts/unity-switch.conf index 7444f25f..c880df0e 100644 --- a/tests/scripts/unity-switch.conf +++ b/tests/scripts/unity-switch.conf @@ -15,17 +15,17 @@ user-session=default #?*UNITY-SYSTEM-COMPOSITOR READY # X server starts -#?XSERVER-0 START SEAT=seat0 MIR-ID=x-0 +#?XMIR-0 START SEAT=seat0 MIR-ID=x-0 # Daemon connects when X server is ready -#?*XSERVER-0 INDICATE-READY -#?XSERVER-0 INDICATE-READY -#?XSERVER-0 ACCEPT-CONNECT +#?*XMIR-0 INDICATE-READY +#?XMIR-0 INDICATE-READY +#?XMIR-0 ACCEPT-CONNECT # Session starts #?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1 #?LOGIN1 ACTIVATE-SESSION SESSION=c0 -#?XSERVER-0 ACCEPT-CONNECT +#?XMIR-0 ACCEPT-CONNECT #?SESSION-X-0 CONNECT-XSERVER # System compositor switches to session @@ -36,12 +36,12 @@ user-session=default #?RUNNER SWITCH-TO-GREETER # New X server starts -#?XSERVER-1 START SEAT=seat0 MIR-ID=x-1 +#?XMIR-1 START SEAT=seat0 MIR-ID=x-1 # Daemon connects when X server is ready -#?*XSERVER-1 INDICATE-READY -#?XSERVER-1 INDICATE-READY -#?XSERVER-1 ACCEPT-CONNECT +#?*XMIR-1 INDICATE-READY +#?XMIR-1 INDICATE-READY +#?XMIR-1 ACCEPT-CONNECT # Lock session #?LOGIN1 LOCK-SESSION SESSION=c0 @@ -49,7 +49,7 @@ user-session=default # Greeter starts #?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter #?LOGIN1 ACTIVATE-SESSION SESSION=c1 -#?XSERVER-1 ACCEPT-CONNECT +#?XMIR-1 ACCEPT-CONNECT #?GREETER-X-1 CONNECT-XSERVER #?GREETER-X-1 CONNECT-TO-DAEMON #?GREETER-X-1 CONNECTED-TO-DAEMON @@ -66,23 +66,23 @@ user-session=default # New session starts #?SESSION-X-1 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/no-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=no-password1 #?LOGIN1 ACTIVATE-SESSION SESSION=c2 -#?XSERVER-1 ACCEPT-CONNECT +#?XMIR-1 ACCEPT-CONNECT #?SESSION-X-1 CONNECT-XSERVER # Logout of new session #?*SESSION-X-1 LOGOUT -#?XSERVER-1 TERMINATE SIGNAL=15 +#?XMIR-1 TERMINATE SIGNAL=15 # X server starts -#?XSERVER-2 START SEAT=seat0 MIR-ID=x-2 -#?*XSERVER-2 INDICATE-READY -#?XSERVER-2 INDICATE-READY -#?XSERVER-2 ACCEPT-CONNECT +#?XMIR-2 START SEAT=seat0 MIR-ID=x-2 +#?*XMIR-2 INDICATE-READY +#?XMIR-2 INDICATE-READY +#?XMIR-2 ACCEPT-CONNECT # Greeter starts #?GREETER-X-2 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter #?LOGIN1 ACTIVATE-SESSION SESSION=c3 -#?XSERVER-2 ACCEPT-CONNECT +#?XMIR-2 ACCEPT-CONNECT #?GREETER-X-2 CONNECT-XSERVER #?GREETER-X-2 CONNECT-TO-DAEMON #?GREETER-X-2 CONNECTED-TO-DAEMON @@ -93,8 +93,8 @@ user-session=default # Cleanup #?*STOP-DAEMON #?SESSION-X-0 TERMINATE SIGNAL=15 -#?XSERVER-0 TERMINATE SIGNAL=15 +#?XMIR-0 TERMINATE SIGNAL=15 #?GREETER-X-2 TERMINATE SIGNAL=15 -#?XSERVER-2 TERMINATE SIGNAL=15 +#?XMIR-2 TERMINATE SIGNAL=15 #?UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=15 #?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/src/Makefile.am b/tests/src/Makefile.am index 0afdeadb..d769f027 100644 --- a/tests/src/Makefile.am +++ b/tests/src/Makefile.am @@ -11,6 +11,7 @@ noinst_PROGRAMS = dbus-env \ unity-system-compositor \ vnc-client \ X \ + Xmir \ Xvnc dist_noinst_SCRIPTS = lightdm-session \ test-python-greeter @@ -75,6 +76,19 @@ X_LDADD = \ $(GIO_LIBS) \ $(GIO_UNIX_LIBS) +Xmir_SOURCES = Xmir.c x-authority.c x-authority.h x-common.c x-common.h x-server.c x-server.h status.c status.h +Xmir_CFLAGS = \ + $(WARN_CFLAGS) \ + $(GOBJECT_CFLAGS) \ + $(GLIB_CFLAGS) \ + $(GIO_CFLAGS) \ + $(GIO_UNIX_CFLAGS) +Xmir_LDADD = \ + $(GOBJECT_LIBS) \ + $(GLIB_LIBS) \ + $(GIO_LIBS) \ + $(GIO_UNIX_LIBS) + Xvnc_SOURCES = Xvnc.c x-authority.c x-authority.h x-common.c x-common.h x-server.c x-server.h status.c status.h Xvnc_CFLAGS = \ $(WARN_CFLAGS) \ diff --git a/tests/src/Xmir.c b/tests/src/Xmir.c new file mode 100644 index 00000000..b133b0d3 --- /dev/null +++ b/tests/src/Xmir.c @@ -0,0 +1,311 @@ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <unistd.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <errno.h> +#include <glib-unix.h> + +#include "status.h" +#include "x-server.h" +#include "x-authority.h" +#include "xdmcp-client.h" + +static GMainLoop *loop; +static int exit_status = EXIT_SUCCESS; + +static GKeyFile *config; + +/* Path to lock file */ +static gchar *lock_path = NULL; + +/* Path to authority database to use */ +static gchar *auth_path = NULL; + +/* ID to use for test reporting */ +static gchar *id; + +/* Display number being served */ +static int display_number = 0; + +/* VT being run on */ +static int vt_number = -1; + +/* X server */ +static XServer *xserver = NULL; + +static void +cleanup (void) +{ + if (lock_path) + unlink (lock_path); + if (xserver) + g_object_unref (xserver); +} + +static void +quit (int status) +{ + exit_status = status; + g_main_loop_quit (loop); +} + +static gboolean +sighup_cb (gpointer user_data) +{ + status_notify ("%s DISCONNECT-CLIENTS", id); + return TRUE; +} + +static gboolean +sigint_cb (gpointer user_data) +{ + status_notify ("%s TERMINATE SIGNAL=%d", id, SIGINT); + quit (EXIT_SUCCESS); + return TRUE; +} + +static gboolean +sigterm_cb (gpointer user_data) +{ + status_notify ("%s TERMINATE SIGNAL=%d", id, SIGTERM); + quit (EXIT_SUCCESS); + return TRUE; +} + +static void +client_connected_cb (XServer *server, XClient *client) +{ + status_notify ("%s ACCEPT-CONNECT", id); + x_client_send_success (client); +} + +static void +client_disconnected_cb (XServer *server, XClient *client) +{ + g_signal_handlers_disconnect_matched (client, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, NULL); +} + +static void +request_cb (const gchar *name, GHashTable *params) +{ + if (!name) + { + g_main_loop_quit (loop); + return; + } + + if (strcmp (name, "INDICATE-READY") == 0) + { + void *handler; + + handler = signal (SIGUSR1, SIG_IGN); + if (handler == SIG_IGN) + { + status_notify ("%s INDICATE-READY", id); + kill (getppid (), SIGUSR1); + } + signal (SIGUSR1, handler); + } +} + +int +main (int argc, char **argv) +{ + int i; + char *pid_string; + gchar *seat = NULL; + gchar *mir_id = NULL; + gchar *lock_filename; + gboolean sharevts = FALSE; + int lock_file; + GString *status_text; + +#if !defined(GLIB_VERSION_2_36) + g_type_init (); +#endif + + loop = g_main_loop_new (NULL, FALSE); + + g_unix_signal_add (SIGINT, sigint_cb, NULL); + g_unix_signal_add (SIGTERM, sigterm_cb, NULL); + g_unix_signal_add (SIGHUP, sighup_cb, NULL); + + for (i = 1; i < argc; i++) + { + char *arg = argv[i]; + + if (arg[0] == ':') + { + display_number = atoi (arg + 1); + } + else if (strcmp (arg, "-auth") == 0) + { + auth_path = argv[i+1]; + i++; + } + else if (strcmp (arg, "-nolisten") == 0) + { + char *protocol = argv[i+1]; + i++; + if (strcmp (protocol, "tcp") == 0) + ;//listen_tcp = FALSE; + else if (strcmp (protocol, "unix") == 0) + ;//listen_unix = FALSE; + } + else if (strcmp (arg, "-nr") == 0) + { + } + else if (strcmp (arg, "-background") == 0) + { + /* Ignore arg */ + i++; + } + else if (g_str_has_prefix (arg, "vt")) + { + vt_number = atoi (arg + 2); + } + else if (strcmp (arg, "-novtswitch") == 0) + { + /* Ignore VT args */ + } + else if (strcmp (arg, "-seat") == 0) + { + seat = argv[i+1]; + i++; + } + else if (strcmp (arg, "-sharevts") == 0) + { + sharevts = TRUE; + } + else if (strcmp (arg, "-mir") == 0) + { + mir_id = argv[i+1]; + i++; + } + else if (strcmp (arg, "-mirSocket") == 0) + { + /* FIXME */ + i++; + } + else + { + g_printerr ("Unrecognized option: %s\n" + "Use: %s [:<display>] [option]\n" + "-auth file Select authorization file\n" + "-nolisten protocol Don't listen on protocol\n" + "-background [none] Create root window with no background\n" + "-nr (Ubuntu-specific) Synonym for -background none\n" + "-seat string seat to run on\n" + "-sharevts share VTs with another X server\n" + "-mir id Mir ID to use\n" + "-mirSocket name Mir socket to use\n" + "vtxx Use virtual terminal xx instead of the next available\n", + arg, argv[0]); + return EXIT_FAILURE; + } + } + + id = g_strdup_printf ("XMIR-%d", display_number); + + status_connect (request_cb, id); + + xserver = x_server_new (display_number); + g_signal_connect (xserver, "client-connected", G_CALLBACK (client_connected_cb), NULL); + g_signal_connect (xserver, "client-disconnected", G_CALLBACK (client_disconnected_cb), NULL); + + status_text = g_string_new (""); + g_string_printf (status_text, "%s START", id); + if (vt_number >= 0) + g_string_append_printf (status_text, " VT=%d", vt_number); + if (seat != NULL) + g_string_append_printf (status_text, " SEAT=%s", seat); + if (sharevts) + g_string_append (status_text, " SHAREVTS=TRUE"); + if (mir_id != NULL) + g_string_append_printf (status_text, " MIR-ID=%s", mir_id); + status_notify ("%s", status_text->str); + g_string_free (status_text, TRUE); + + config = g_key_file_new (); + g_key_file_load_from_file (config, g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "script", NULL), G_KEY_FILE_NONE, NULL); + + if (g_key_file_has_key (config, "test-xserver-config", "return-value", NULL)) + { + int return_value = g_key_file_get_integer (config, "test-xserver-config", "return-value", NULL); + status_notify ("%s EXIT CODE=%d", id, return_value); + return return_value; + } + + lock_filename = g_strdup_printf (".X%d-lock", display_number); + lock_path = g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "tmp", lock_filename, NULL); + g_free (lock_filename); + lock_file = open (lock_path, O_CREAT | O_EXCL | O_WRONLY, 0444); + if (lock_file < 0) + { + char *lock_contents = NULL; + + if (g_file_get_contents (lock_path, &lock_contents, NULL, NULL)) + { + gchar *proc_filename; + pid_t pid; + + pid = atol (lock_contents); + g_free (lock_contents); + + proc_filename = g_strdup_printf ("/proc/%d", pid); + if (!g_file_test (proc_filename, G_FILE_TEST_EXISTS)) + { + gchar *socket_dir; + gchar *socket_filename; + gchar *socket_path; + + socket_dir = g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "tmp", ".X11-unix", NULL); + g_mkdir_with_parents (socket_dir, 0755); + + socket_filename = g_strdup_printf ("X%d", display_number); + socket_path = g_build_filename (socket_dir, socket_filename, NULL); + + g_printerr ("Breaking lock on non-existant process %d\n", pid); + unlink (lock_path); + unlink (socket_path); + + g_free (socket_dir); + g_free (socket_filename); + g_free (socket_path); + } + g_free (proc_filename); + + lock_file = open (lock_path, O_CREAT | O_EXCL | O_WRONLY, 0444); + } + } + if (lock_file < 0) + { + fprintf (stderr, + "Fatal server error:\n" + "Server is already active for display %d\n" + " If this server is no longer running, remove %s\n" + " and start again.\n", display_number, lock_path); + g_free (lock_path); + lock_path = NULL; + return EXIT_FAILURE; + } + pid_string = g_strdup_printf ("%10ld", (long) getpid ()); + if (write (lock_file, pid_string, strlen (pid_string)) < 0) + { + g_warning ("Error writing PID file: %s", strerror (errno)); + return EXIT_FAILURE; + } + g_free (pid_string); + + if (!x_server_start (xserver)) + return EXIT_FAILURE; + + g_main_loop_run (loop); + + cleanup (); + + return exit_status; +} diff --git a/tests/src/libsystem.c b/tests/src/libsystem.c index 0510c9a5..b7369e9e 100644 --- a/tests/src/libsystem.c +++ b/tests/src/libsystem.c @@ -176,6 +176,14 @@ setresuid (uid_t ruid, uid_t uuid, uid_t suid) static gchar * redirect_path (const gchar *path) { + /* Hide Xmir for legacy tests */ + if (g_str_has_suffix (path, "/Xmir")) + { + connect_status (); + if (g_key_file_get_boolean (config, "test-xmir", "hide", NULL)) + return NULL; + } + // Don't redirect if inside the running directory if (g_str_has_prefix (path, g_getenv ("LIGHTDM_TEST_ROOT"))) return g_strdup (path); @@ -1737,3 +1745,4 @@ xcb_disconnect (xcb_connection_t *c) g_object_unref (c->socket); free (c); } + diff --git a/tests/src/test-runner.c b/tests/src/test-runner.c index abad4865..f76cc091 100644 --- a/tests/src/test-runner.c +++ b/tests/src/test-runner.c @@ -921,6 +921,7 @@ handle_command (const gchar *command) else if (g_str_has_prefix (name, "SESSION-") || g_str_has_prefix (name, "GREETER-") || g_str_has_prefix (name, "XSERVER-") || + g_str_has_prefix (name, "XMIR-") || strcmp (name, "UNITY-SYSTEM-COMPOSITOR") == 0) { GList *link; diff --git a/tests/test-unity-autologin-legacy b/tests/test-unity-autologin-legacy new file mode 100755 index 00000000..1282544b --- /dev/null +++ b/tests/test-unity-autologin-legacy @@ -0,0 +1,2 @@ +#!/bin/sh +./src/dbus-env ./src/test-runner unity-autologin-legacy test-gobject-greeter |