Merge lp:~ubuntu-multiseat/lightdm/multiseat-logging into lp:lightdm

Proposed by Thomi Richards
Status: Merged
Approved by: Robert Ancell
Approved revision: 1766
Merged at revision: 1755
Proposed branch: lp:~ubuntu-multiseat/lightdm/multiseat-logging
Merge into: lp:lightdm
Diff against target: 1739 lines (+409/-167)
17 files modified
src/Makefile.am (+2/-0)
src/display-server.c (+22/-1)
src/display-server.h (+1/-0)
src/greeter.c (+27/-27)
src/lightdm.c (+7/-1)
src/logger.c (+81/-0)
src/logger.h (+60/-0)
src/seat-unity.c (+37/-25)
src/seat-xlocal.c (+13/-7)
src/seat-xremote.c (+10/-4)
src/seat.c (+82/-61)
src/seat.h (+1/-0)
src/session.c (+38/-17)
src/session.h (+1/-0)
src/x-server-local.c (+11/-11)
src/x-server-xvnc.c (+11/-11)
src/x-server.c (+5/-2)
To merge this branch: bzr merge lp:~ubuntu-multiseat/lightdm/multiseat-logging
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Approve
Robert Ancell Approve
Thomi Richards (community) Approve
Review via email: mp+180753@code.launchpad.net

This proposal supersedes a proposal from 2013-08-14.

Commit message

Extend logging to make it easier to troubleshoot multiseat setups.

Description of the change

Extend logging to make it easier to troubleshoot multiseat setups

  * include seat name in Seat log messages
  * include display server name in DisplayServer log messages
  * include PID in Session log messages
  * log the values of the XDG_SEAT and XDG_VTNR PAM variables

To post a comment you must log in.
Revision history for this message
Robert Ancell (robert-ancell) wrote : Posted in a previous version of this proposal

Nice work!

There seems to be no default value set for seats, i.e. if you do:
$ cd tests
$ DEBUG=1 ./test-autologin

you get logs like:

[+0.00s] DEBUG: Seat (null): Creating user session

If the ID is NULL, id expect to see:

[+0.00s] DEBUG: Seat: Creating user session

or at least a valid ID.

You don't need to break at 80 characters, I've fixed the whitespace in this branch:
lp:~robert-ancell/lightdm/multiseat-logging-whitespace
(I suggest you manually patch to keep the attribution to you for the changes).

Also, now the logging is better, we have some redundant text.

[+0.00s] DEBUG: Seat (null): Starting seat

should become

[+0.00s] DEBUG: Seat (null): Starting

Though I wont block this merge on this. We can fix this in a later MP if you like.

review: Needs Fixing
Revision history for this message
Richard Hansen (rhansen) wrote : Posted in a previous version of this proposal

> There seems to be no default value set for seats, i.e. if you do:
> $ cd tests
> $ DEBUG=1 ./test-autologin
>
> you get logs like:
>
> [+0.00s] DEBUG: Seat (null): Creating user session
>
> If the ID is NULL, id expect to see:
>
> [+0.00s] DEBUG: Seat: Creating user session
>
> or at least a valid ID.

OK, I'll see what I can do to improve it.

>
> You don't need to break at 80 characters

I really dislike lines longer than 80 characters, which is why I
usually wrap long lines when I change them. I'll unwrap, but I'll
feel like I'm violating my own principles. :)

See [1] for why don't I like lines longer than 80 characters.

[1] http://stackoverflow.com/a/111009/712605

>
> Also, now the logging is better, we have some redundant text.
>
> [+0.00s] DEBUG: Seat (null): Starting seat
>
> should become
>
> [+0.00s] DEBUG: Seat (null): Starting
>
> Though I wont block this merge on this. We can fix this in a later
> MP if you like.

I caught some of those (e.g., "starting session with PID=xxx"), but it
looks like I missed some. I'll do an audit.

Revision history for this message
Robert Ancell (robert-ancell) : Posted in a previous version of this proposal
review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
Richard Hansen (rhansen) wrote : Posted in a previous version of this proposal

> FAIL: test-lock-seat-console-kit
[snip]
> Events:
> RUNNER DAEMON-START
> XSERVER-0 START VT=7
> *XSERVER-0 INDICATE-READY
[snip]
> *STOP-DAEMON
> XSERVER-0 TERMINATE SIGNAL=15
> SESSION-X-0 TERMINATE SIGNAL=15
> XSERVER-1 TERMINATE SIGNAL=15
> GREETER-X-1 TERMINATE SIGNAL=15
> RUNNER DAEMON-TERMINATE SIGNAL=9
> ^^^ expected "RUNNER DAEMON-EXIT STATUS=0"

I put this test in a tight infinite loop and let it run for a while on my raring system. I couldn't reproduce this failure. Oddly it looks like it's the test runner that killed lightdm; the process that was killed is the lightdm process itself.

Revision history for this message
Thomi Richards (thomir-deactivatedaccount) :
review: Approve
Revision history for this message
Robert Ancell (robert-ancell) wrote : Posted in a previous version of this proposal

The autolanding system seems to be broken. Someone is looking into it...

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Autolanding.
More details in the following jenkins job:
http://jenkins.qa.ubuntu.com/job/lightdm-autolanding/121/
Executed test runs:
    FAILURE: http://jenkins.qa.ubuntu.com/job/lightdm-saucy-amd64-autolanding/75/console

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:1766
http://jenkins.qa.ubuntu.com/job/lightdm-ci/162/
Executed test runs:
    FAILURE: http://jenkins.qa.ubuntu.com/job/lightdm-saucy-amd64-ci/78/console

Click here to trigger a rebuild:
http://s-jenkins:8080/job/lightdm-ci/162/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:1766
http://jenkins.qa.ubuntu.com/job/lightdm-ci/163/
Executed test runs:
    FAILURE: http://jenkins.qa.ubuntu.com/job/lightdm-saucy-amd64-ci/79/console

Click here to trigger a rebuild:
http://s-jenkins:8080/job/lightdm-ci/163/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:1766
http://jenkins.qa.ubuntu.com/job/lightdm-ci/164/
Executed test runs:
    FAILURE: http://jenkins.qa.ubuntu.com/job/lightdm-saucy-amd64-ci/80/console

Click here to trigger a rebuild:
http://s-jenkins:8080/job/lightdm-ci/164/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:1766
http://jenkins.qa.ubuntu.com/job/lightdm-ci/165/
Executed test runs:
    FAILURE: http://jenkins.qa.ubuntu.com/job/lightdm-saucy-amd64-ci/82/console

Click here to trigger a rebuild:
http://s-jenkins:8080/job/lightdm-ci/165/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

PASSED: Continuous integration, rev:1766
http://jenkins.qa.ubuntu.com/job/lightdm-ci/175/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/lightdm-saucy-amd64-ci/92

Click here to trigger a rebuild:
http://s-jenkins:8080/job/lightdm-ci/175/rebuild

review: Approve (continuous-integration)
Revision history for this message
Robert Ancell (robert-ancell) :
review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/Makefile.am'
--- src/Makefile.am 2013-07-24 23:53:37 +0000
+++ src/Makefile.am 2013-08-18 23:34:47 +0000
@@ -18,6 +18,8 @@
18 guest-account.c \18 guest-account.c \
19 guest-account.h \19 guest-account.h \
20 lightdm.c \20 lightdm.c \
21 logger.c \
22 logger.h \
21 login1.c \23 login1.c \
22 login1.h \24 login1.h \
23 mir-server.c \25 mir-server.c \
2426
=== modified file 'src/display-server.c'
--- src/display-server.c 2013-07-26 04:50:35 +0000
+++ src/display-server.c 2013-08-18 23:34:47 +0000
@@ -32,7 +32,11 @@
32 gboolean stopped;32 gboolean stopped;
33};33};
3434
35G_DEFINE_TYPE (DisplayServer, display_server, G_TYPE_OBJECT);35static void display_server_logger_iface_init (LoggerInterface *iface);
36
37G_DEFINE_TYPE_WITH_CODE (DisplayServer, display_server, G_TYPE_OBJECT,
38 G_IMPLEMENT_INTERFACE (
39 LOGGER_TYPE, display_server_logger_iface_init));
3640
37void41void
38display_server_set_name (DisplayServer *server, const gchar *name)42display_server_set_name (DisplayServer *server, const gchar *name)
@@ -176,3 +180,20 @@
176 NULL,180 NULL,
177 G_TYPE_NONE, 0);181 G_TYPE_NONE, 0);
178}182}
183
184static gint
185display_server_real_logprefix (Logger *self, gchar *buf, gulong buflen)
186{
187 DisplayServer *server = DISPLAY_SERVER (self);
188 const gchar *name = display_server_get_name (server);
189 if (name)
190 return g_snprintf (buf, buflen, "DisplayServer %s: ", name);
191 else
192 return g_snprintf (buf, buflen, "DisplayServer: ");
193}
194
195static void
196display_server_logger_iface_init (LoggerInterface *iface)
197{
198 iface->logprefix = &display_server_real_logprefix;
199}
179200
=== modified file 'src/display-server.h'
--- src/display-server.h 2013-07-26 02:54:55 +0000
+++ src/display-server.h 2013-08-18 23:34:47 +0000
@@ -16,6 +16,7 @@
1616
17typedef struct DisplayServer DisplayServer;17typedef struct DisplayServer DisplayServer;
1818
19#include "logger.h"
19#include "session.h"20#include "session.h"
2021
21G_BEGIN_DECLS22G_BEGIN_DECLS
2223
=== modified file 'src/greeter.c'
--- src/greeter.c 2013-07-24 23:53:37 +0000
+++ src/greeter.c 2013-08-18 23:34:47 +0000
@@ -164,7 +164,7 @@
164164
165 g_io_channel_write_chars (greeter->priv->to_greeter_channel, (gchar *) message, message_length, NULL, &error);165 g_io_channel_write_chars (greeter->priv->to_greeter_channel, (gchar *) message, message_length, NULL, &error);
166 if (error)166 if (error)
167 g_warning ("Error writing to greeter: %s", error->message);167 l_warning (greeter, "Error writing to greeter: %s", error->message);
168 g_clear_error (&error);168 g_clear_error (&error);
169 g_io_channel_flush (greeter->priv->to_greeter_channel, NULL);169 g_io_channel_flush (greeter->priv->to_greeter_channel, NULL);
170}170}
@@ -225,7 +225,7 @@
225 GHashTableIter iter;225 GHashTableIter iter;
226 gpointer key, value;226 gpointer key, value;
227227
228 g_debug ("Greeter connected version=%s", version);228 l_debug (greeter, "Greeter connected version=%s", version);
229229
230 length = string_length (VERSION);230 length = string_length (VERSION);
231 g_hash_table_iter_init (&iter, greeter->priv->hints);231 g_hash_table_iter_init (&iter, greeter->priv->hints);
@@ -260,7 +260,7 @@
260 messages_length = session_get_messages_length (session);260 messages_length = session_get_messages_length (session);
261261
262 /* Respond to d-bus query with messages */262 /* Respond to d-bus query with messages */
263 g_debug ("Prompt greeter with %d message(s)", messages_length);263 l_debug (greeter, "Prompt greeter with %d message(s)", messages_length);
264 size = int_length () + string_length (session_get_username (session)) + int_length ();264 size = int_length () + string_length (session_get_username (session)) + int_length ();
265 for (i = 0; i < messages_length; i++)265 for (i = 0; i < messages_length; i++)
266 size += int_length () + string_length (messages[i].msg);266 size += int_length () + string_length (messages[i].msg);
@@ -308,16 +308,16 @@
308{308{
309 int result;309 int result;
310310
311 g_debug ("Authenticate result for user %s: %s", session_get_username (session), session_get_authentication_result_string (session));311 l_debug (greeter, "Authenticate result for user %s: %s", session_get_username (session), session_get_authentication_result_string (session));
312312
313 result = session_get_authentication_result (session);313 result = session_get_authentication_result (session);
314 if (session_get_is_authenticated (session))314 if (session_get_is_authenticated (session))
315 {315 {
316 if (session_get_user (session))316 if (session_get_user (session))
317 g_debug ("User %s authorized", session_get_username (session));317 l_debug (greeter, "User %s authorized", session_get_username (session));
318 else318 else
319 {319 {
320 g_debug ("User %s authorized, but no account of that name exists", session_get_username (session)); 320 l_debug (greeter, "User %s authorized, but no account of that name exists", session_get_username (session));
321 result = PAM_USER_UNKNOWN;321 result = PAM_USER_UNKNOWN;
322 }322 }
323 }323 }
@@ -349,11 +349,11 @@
349349
350 if (username[0] == '\0')350 if (username[0] == '\0')
351 {351 {
352 g_debug ("Greeter start authentication");352 l_debug (greeter, "Greeter start authentication");
353 username = NULL;353 username = NULL;
354 }354 }
355 else355 else
356 g_debug ("Greeter start authentication for %s", username);356 l_debug (greeter, "Greeter start authentication for %s", username);
357357
358 reset_session (greeter);358 reset_session (greeter);
359359
@@ -392,13 +392,13 @@
392static void392static void
393handle_login_as_guest (Greeter *greeter, guint32 sequence_number)393handle_login_as_guest (Greeter *greeter, guint32 sequence_number)
394{394{
395 g_debug ("Greeter start authentication for guest account");395 l_debug (greeter, "Greeter start authentication for guest account");
396396
397 reset_session (greeter);397 reset_session (greeter);
398398
399 if (!greeter->priv->allow_guest)399 if (!greeter->priv->allow_guest)
400 {400 {
401 g_debug ("Guest account is disabled");401 l_debug (greeter, "Guest account is disabled");
402 send_end_authentication (greeter, sequence_number, "", PAM_USER_UNKNOWN);402 send_end_authentication (greeter, sequence_number, "", PAM_USER_UNKNOWN);
403 return;403 return;
404 }404 }
@@ -449,11 +449,11 @@
449449
450 if (username[0] == '\0')450 if (username[0] == '\0')
451 {451 {
452 g_debug ("Greeter start authentication for remote session %s", session_name);452 l_debug (greeter, "Greeter start authentication for remote session %s", session_name);
453 username = NULL;453 username = NULL;
454 }454 }
455 else455 else
456 g_debug ("Greeter start authentication for remote session %s as user %s", session_name, username);456 l_debug (greeter, "Greeter start authentication for remote session %s as user %s", session_name, username);
457457
458 reset_session (greeter);458 reset_session (greeter);
459459
@@ -518,7 +518,7 @@
518 return;518 return;
519 }519 }
520520
521 g_debug ("Continue authentication");521 l_debug (greeter, "Continue authentication");
522522
523 /* Build response */523 /* Build response */
524 response = calloc (messages_length, sizeof (struct pam_response));524 response = calloc (messages_length, sizeof (struct pam_response));
@@ -548,7 +548,7 @@
548 if (greeter->priv->authentication_session == NULL)548 if (greeter->priv->authentication_session == NULL)
549 return;549 return;
550550
551 g_debug ("Cancel authentication");551 l_debug (greeter, "Cancel authentication");
552 reset_session (greeter);552 reset_session (greeter);
553}553}
554554
@@ -573,15 +573,15 @@
573 if (greeter->priv->guest_account_authenticated || session_get_is_authenticated (greeter->priv->authentication_session))573 if (greeter->priv->guest_account_authenticated || session_get_is_authenticated (greeter->priv->authentication_session))
574 {574 {
575 if (session)575 if (session)
576 g_debug ("Greeter requests session %s", session);576 l_debug (greeter, "Greeter requests session %s", session);
577 else577 else
578 g_debug ("Greeter requests default session");578 l_debug (greeter, "Greeter requests default session");
579 greeter->priv->start_session = TRUE;579 greeter->priv->start_session = TRUE;
580 g_signal_emit (greeter, signals[START_SESSION], 0, session_type, session, &result);580 g_signal_emit (greeter, signals[START_SESSION], 0, session_type, session, &result);
581 }581 }
582 else582 else
583 {583 {
584 g_debug ("Ignoring start session request, user is not authorized");584 l_debug (greeter, "Ignoring start session request, user is not authorized");
585 result = FALSE;585 result = FALSE;
586 }586 }
587587
@@ -597,18 +597,18 @@
597597
598 if (!greeter->priv->guest_account_authenticated && !session_get_is_authenticated (greeter->priv->authentication_session))598 if (!greeter->priv->guest_account_authenticated && !session_get_is_authenticated (greeter->priv->authentication_session))
599 {599 {
600 g_debug ("Ignoring set language request, user is not authorized");600 l_debug (greeter, "Ignoring set language request, user is not authorized");
601 return;601 return;
602 }602 }
603603
604 // FIXME: Could use this604 // FIXME: Could use this
605 if (greeter->priv->guest_account_authenticated)605 if (greeter->priv->guest_account_authenticated)
606 {606 {
607 g_debug ("Ignoring set language request for guest user");607 l_debug (greeter, "Ignoring set language request for guest user");
608 return;608 return;
609 }609 }
610610
611 g_debug ("Greeter sets language %s", language);611 l_debug (greeter, "Greeter sets language %s", language);
612 user = session_get_user (greeter->priv->authentication_session);612 user = session_get_user (greeter->priv->authentication_session);
613 user_set_language (user, language);613 user_set_language (user, language);
614}614}
@@ -620,7 +620,7 @@
620 guint8 *buffer;620 guint8 *buffer;
621 if (greeter->priv->n_read - *offset < sizeof (guint32))621 if (greeter->priv->n_read - *offset < sizeof (guint32))
622 {622 {
623 g_warning ("Not enough space for int, need %zu, got %zu", sizeof (guint32), greeter->priv->n_read - *offset);623 l_warning (greeter, "Not enough space for int, need %zu, got %zu", sizeof (guint32), greeter->priv->n_read - *offset);
624 return 0;624 return 0;
625 }625 }
626 buffer = greeter->priv->read_buffer + *offset;626 buffer = greeter->priv->read_buffer + *offset;
@@ -640,7 +640,7 @@
640640
641 if (HEADER_SIZE + payload_length < HEADER_SIZE)641 if (HEADER_SIZE + payload_length < HEADER_SIZE)
642 {642 {
643 g_warning ("Payload length of %u octets too long", payload_length);643 l_warning (greeter, "Payload length of %u octets too long", payload_length);
644 return HEADER_SIZE;644 return HEADER_SIZE;
645 }645 }
646646
@@ -656,7 +656,7 @@
656 length = read_int (greeter, offset);656 length = read_int (greeter, offset);
657 if (greeter->priv->n_read - *offset < length)657 if (greeter->priv->n_read - *offset < length)
658 {658 {
659 g_warning ("Not enough space for string, need %u, got %zu", length, greeter->priv->n_read - *offset);659 l_warning (greeter, "Not enough space for string, need %u, got %zu", length, greeter->priv->n_read - *offset);
660 return g_strdup ("");660 return g_strdup ("");
661 }661 }
662662
@@ -697,7 +697,7 @@
697697
698 if (condition == G_IO_HUP)698 if (condition == G_IO_HUP)
699 {699 {
700 g_debug ("Greeter closed communication channel");700 l_debug (greeter, "Greeter closed communication channel");
701 return FALSE;701 return FALSE;
702 }702 }
703 703
@@ -715,7 +715,7 @@
715 &n_read,715 &n_read,
716 &error);716 &error);
717 if (error)717 if (error)
718 g_warning ("Error reading from greeter: %s", error->message);718 l_warning (greeter, "Error reading from greeter: %s", error->message);
719 g_clear_error (&error);719 g_clear_error (&error);
720 if (status != G_IO_STATUS_NORMAL)720 if (status != G_IO_STATUS_NORMAL)
721 return TRUE;721 return TRUE;
@@ -767,7 +767,7 @@
767 max_secrets = (G_MAXUINT32 - 1) / sizeof (gchar *);767 max_secrets = (G_MAXUINT32 - 1) / sizeof (gchar *);
768 if (n_secrets > max_secrets)768 if (n_secrets > max_secrets)
769 {769 {
770 g_warning ("Array length of %u elements too long", n_secrets);770 l_warning (greeter, "Array length of %u elements too long", n_secrets);
771 return FALSE;771 return FALSE;
772 }772 }
773 secrets = g_malloc (sizeof (gchar *) * (n_secrets + 1));773 secrets = g_malloc (sizeof (gchar *) * (n_secrets + 1));
@@ -793,7 +793,7 @@
793 g_free (language);793 g_free (language);
794 break;794 break;
795 default:795 default:
796 g_warning ("Unknown message from greeter: %d", id);796 l_warning (greeter, "Unknown message from greeter: %d", id);
797 break;797 break;
798 }798 }
799799
800800
=== modified file 'src/lightdm.c'
--- src/lightdm.c 2013-07-24 03:02:30 +0000
+++ src/lightdm.c 2013-08-18 23:34:47 +0000
@@ -1168,8 +1168,9 @@
1168 gchar *config_section = *i;1168 gchar *config_section = *i;
1169 gchar *type;1169 gchar *type;
1170 Seat *seat;1170 Seat *seat;
1171 const gchar *const seatpfx = "Seat:";
11711172
1172 if (!g_str_has_prefix (config_section, "Seat:"))1173 if (!g_str_has_prefix (config_section, seatpfx))
1173 continue;1174 continue;
11741175
1175 g_debug ("Loading seat %s", config_section);1176 g_debug ("Loading seat %s", config_section);
@@ -1180,6 +1181,11 @@
1180 g_free (type);1181 g_free (type);
1181 if (seat)1182 if (seat)
1182 {1183 {
1184 const gsize seatpfxlen = strlen(seatpfx);
1185 gchar *seatname = config_section + seatpfxlen;
1186
1187 seat_set_property (seat, "seat-name", seatname);
1188
1183 set_seat_properties (seat, config_section);1189 set_seat_properties (seat, config_section);
1184 display_manager_add_seat (display_manager, seat);1190 display_manager_add_seat (display_manager, seat);
1185 g_object_unref (seat);1191 g_object_unref (seat);
11861192
=== added file 'src/logger.c'
--- src/logger.c 1970-01-01 00:00:00 +0000
+++ src/logger.c 2013-08-18 23:34:47 +0000
@@ -0,0 +1,81 @@
1#include "logger.h"
2
3G_DEFINE_INTERFACE (Logger, logger, G_TYPE_INVALID);
4
5static void
6logger_logv_default (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap);
7
8static void
9logger_default_init (LoggerInterface *iface)
10{
11 iface->logv = &logger_logv_default;
12}
13
14gint
15logger_logprefix (Logger *self, gchar *buf, gulong buflen)
16{
17 g_return_val_if_fail (IS_LOGGER (self), -1);
18 return LOGGER_GET_INTERFACE (self)->logprefix (self, buf, buflen);
19}
20
21void
22logger_logv (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap)
23{
24 g_return_if_fail (IS_LOGGER (self));
25 LOGGER_GET_INTERFACE (self)->logv (self, log_level, format, ap);
26}
27
28void
29logger_logv_default (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap)
30{
31 va_list ap_copy;
32 gint tmp;
33
34 /* figure out how long the prefix is */
35 tmp = logger_logprefix (self, NULL, 0);
36 if (tmp < 0)
37 {
38 g_error ("failed to get log prefix");
39 return;
40 }
41
42 /* print the prefix to a variable length array (to avoid malloc) */
43 gchar pfx[tmp + 1];
44 tmp = logger_logprefix (self, pfx, sizeof(pfx));
45 if (tmp < 0)
46 {
47 g_error ("failed to get log prefix");
48 return;
49 }
50
51 /* figure out how long the formatted message is */
52 va_copy (ap_copy, ap);
53 tmp = g_vsnprintf (NULL, 0, format, ap_copy);
54 va_end (ap_copy);
55 if (tmp < 0)
56 {
57 g_error ("failed to format log message");
58 return;
59 }
60
61 /* print the message to a variable length array (to avoid malloc) */
62 gchar msg[tmp+1];
63 tmp = g_vsnprintf (msg, sizeof(msg), format, ap);
64 if (tmp < 0)
65 {
66 g_error ("failed to format log message");
67 return;
68 }
69
70 /* log the message with the prefix */
71 g_log (G_LOG_DOMAIN, log_level, "%s%s", pfx, msg);
72}
73
74void
75logger_log (Logger *self, GLogLevelFlags log_level, const gchar *format, ...)
76{
77 va_list ap;
78 va_start (ap, format);
79 logger_logv (self, log_level, format, ap);
80 va_end (ap);
81}
082
=== added file 'src/logger.h'
--- src/logger.h 1970-01-01 00:00:00 +0000
+++ src/logger.h 2013-08-18 23:34:47 +0000
@@ -0,0 +1,60 @@
1#ifndef LOGGER_H_
2#define LOGGER_H_
3
4#include <glib-object.h>
5
6#ifdef __cplusplus
7#include <cstdarg> /* for va_list */
8#else
9#include <stdarg.h> /* for va_list */
10#endif
11
12G_BEGIN_DECLS
13
14#define LOGGER_TYPE (logger_get_type ())
15#define LOGGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LOGGER_TYPE, Logger))
16#define IS_LOGGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LOGGER_TYPE))
17#define LOGGER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), LOGGER_TYPE, LoggerInterface))
18
19typedef struct Logger Logger;
20
21typedef struct {
22 GTypeInterface parent;
23
24 gint (*logprefix) (Logger *self, gchar *buf, gulong buflen);
25 void (*logv) (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap);
26} LoggerInterface;
27
28GType logger_get_type (void);
29
30/*!
31 * \brief instruct \c self to generate a log message prefix
32 *
33 * the semantics of the \c buf and \c buflen arguments and the return
34 * value are the same as g_snprintf()
35 *
36 * there is no default implementation
37 */
38gint logger_logprefix (Logger *self, gchar *buf, gulong buflen);
39
40/*!
41 * \brief instruct \c self to log the given message
42 *
43 * the default implementation prefixes the log message with the
44 * output of logger_logprefix() and then passes the result to
45 * g_log()
46 */
47void logger_logv (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap);
48
49/*! \brief convenience wrapper around \c logger_logv() */
50void logger_log (Logger *self, GLogLevelFlags log_level, const gchar *format, ...);
51
52/* convenience wrappers around logger_log() */
53#define l_debug(self, ...) \
54 logger_log (LOGGER (self), G_LOG_LEVEL_DEBUG, __VA_ARGS__)
55#define l_warning(self, ...) \
56 logger_log (LOGGER (self), G_LOG_LEVEL_WARNING, __VA_ARGS__)
57
58G_END_DECLS
59
60#endif /* !LOGGER_H_ */
061
=== modified file 'src/seat-unity.c'
--- src/seat-unity.c 2013-08-14 20:14:01 +0000
+++ src/seat-unity.c 2013-08-18 23:34:47 +0000
@@ -108,13 +108,13 @@
108 /* If stopped before it was ready, then revert to VT mode */108 /* If stopped before it was ready, then revert to VT mode */
109 if (!seat->priv->compositor_ready)109 if (!seat->priv->compositor_ready)
110 {110 {
111 g_debug ("Compositor failed to start, switching to VT mode");111 l_debug (seat, "Compositor failed to start, switching to VT mode");
112 seat->priv->use_vt_switching = TRUE;112 seat->priv->use_vt_switching = TRUE;
113 SEAT_CLASS (seat_unity_parent_class)->start (SEAT (seat));113 SEAT_CLASS (seat_unity_parent_class)->start (SEAT (seat));
114 return;114 return;
115 }115 }
116116
117 g_debug ("Stopping Unity seat, compositor terminated");117 l_debug (seat, "Stopping Unity seat, compositor terminated");
118118
119 seat_stop (SEAT (seat));119 seat_stop (SEAT (seat));
120}120}
@@ -136,7 +136,7 @@
136136
137 fd = g_open (seat->priv->log_file, O_WRONLY | O_CREAT | O_TRUNC, 0600);137 fd = g_open (seat->priv->log_file, O_WRONLY | O_CREAT | O_TRUNC, 0600);
138 if (fd < 0)138 if (fd < 0)
139 g_warning ("Failed to open log file %s: %s", seat->priv->log_file, g_strerror (errno));139 l_warning (seat, "Failed to open log file %s: %s", seat->priv->log_file, g_strerror (errno));
140 else140 else
141 {141 {
142 dup2 (fd, STDOUT_FILENO);142 dup2 (fd, STDOUT_FILENO);
@@ -161,7 +161,7 @@
161161
162 errno = 0;162 errno = 0;
163 if (write (seat->priv->to_compositor_pipe[1], data, data_length) != data_length)163 if (write (seat->priv->to_compositor_pipe[1], data, data_length) != data_length)
164 g_warning ("Failed to write to compositor: %s", strerror (errno));164 l_warning (seat, "Failed to write to compositor: %s", strerror (errno));
165}165}
166166
167static gboolean167static gboolean
@@ -174,7 +174,7 @@
174 174
175 if (condition == G_IO_HUP)175 if (condition == G_IO_HUP)
176 {176 {
177 g_debug ("Compositor closed communication channel");177 l_debug (seat, "Compositor closed communication channel");
178 return FALSE;178 return FALSE;
179 }179 }
180180
@@ -204,7 +204,7 @@
204 &n_read,204 &n_read,
205 &error);205 &error);
206 if (error)206 if (error)
207 g_warning ("Failed to read from compositor: %s", error->message);207 l_warning (seat, "Failed to read from compositor: %s", error->message);
208 if (status != G_IO_STATUS_NORMAL)208 if (status != G_IO_STATUS_NORMAL)
209 return TRUE;209 return TRUE;
210 g_clear_error (&error);210 g_clear_error (&error);
@@ -225,28 +225,28 @@
225 switch (id)225 switch (id)
226 {226 {
227 case USC_MESSAGE_PING:227 case USC_MESSAGE_PING:
228 g_debug ("PING!");228 l_debug (seat, "PING!");
229 write_message (seat, USC_MESSAGE_PONG, NULL, 0);229 write_message (seat, USC_MESSAGE_PONG, NULL, 0);
230 break;230 break;
231 case USC_MESSAGE_PONG:231 case USC_MESSAGE_PONG:
232 g_debug ("PONG!");232 l_debug (seat, "PONG!");
233 break;233 break;
234 case USC_MESSAGE_READY:234 case USC_MESSAGE_READY:
235 g_debug ("READY");235 l_debug (seat, "READY");
236 if (!seat->priv->compositor_ready)236 if (!seat->priv->compositor_ready)
237 {237 {
238 seat->priv->compositor_ready = TRUE;238 seat->priv->compositor_ready = TRUE;
239 g_debug ("Compositor ready");239 l_debug (seat, "Compositor ready");
240 g_source_remove (seat->priv->compositor_timeout);240 g_source_remove (seat->priv->compositor_timeout);
241 seat->priv->compositor_timeout = 0;241 seat->priv->compositor_timeout = 0;
242 SEAT_CLASS (seat_unity_parent_class)->start (SEAT (seat));242 SEAT_CLASS (seat_unity_parent_class)->start (SEAT (seat));
243 }243 }
244 break;244 break;
245 case USC_MESSAGE_SESSION_CONNECTED:245 case USC_MESSAGE_SESSION_CONNECTED:
246 g_debug ("SESSION CONNECTED");246 l_debug (seat, "SESSION CONNECTED");
247 break;247 break;
248 default:248 default:
249 g_warning ("Ingoring unknown message %d with %d octets from system compositor", id, payload_length);249 l_warning (seat, "Ignoring unknown message %d with %d octets from system compositor", id, payload_length);
250 break;250 break;
251 }251 }
252252
@@ -310,7 +310,7 @@
310 plymouth_quit (TRUE);310 plymouth_quit (TRUE);
311 }311 }
312 else312 else
313 g_debug ("Plymouth is running on VT %d, but this is less than the configured minimum of %d so not replacing it", active_vt, vt_get_min ());313 l_debug (seat, "Plymouth is running on VT %d, but this is less than the configured minimum of %d so not replacing it", active_vt, vt_get_min ());
314 }314 }
315 if (plymouth_get_is_active ())315 if (plymouth_get_is_active ())
316 plymouth_quit (FALSE);316 plymouth_quit (FALSE);
@@ -318,7 +318,7 @@
318 SEAT_UNITY (seat)->priv->vt = vt_get_unused ();318 SEAT_UNITY (seat)->priv->vt = vt_get_unused ();
319 if (SEAT_UNITY (seat)->priv->vt < 0)319 if (SEAT_UNITY (seat)->priv->vt < 0)
320 {320 {
321 g_debug ("Failed to get a VT to run on");321 l_debug (seat, "Failed to get a VT to run on");
322 return FALSE;322 return FALSE;
323 }323 }
324 vt_ref (SEAT_UNITY (seat)->priv->vt);324 vt_ref (SEAT_UNITY (seat)->priv->vt);
@@ -326,7 +326,7 @@
326 /* Create pipes to talk to compositor */326 /* Create pipes to talk to compositor */
327 if (pipe (SEAT_UNITY (seat)->priv->to_compositor_pipe) < 0 || pipe (SEAT_UNITY (seat)->priv->from_compositor_pipe) < 0)327 if (pipe (SEAT_UNITY (seat)->priv->to_compositor_pipe) < 0 || pipe (SEAT_UNITY (seat)->priv->from_compositor_pipe) < 0)
328 {328 {
329 g_debug ("Failed to create compositor pipes: %s", g_strerror (errno));329 l_debug (seat, "Failed to create compositor pipes: %s", g_strerror (errno));
330 return FALSE;330 return FALSE;
331 }331 }
332332
@@ -341,7 +341,7 @@
341 /* Setup logging */341 /* Setup logging */
342 dir = config_get_string (config_get_instance (), "LightDM", "log-directory");342 dir = config_get_string (config_get_instance (), "LightDM", "log-directory");
343 SEAT_UNITY (seat)->priv->log_file = g_build_filename (dir, "unity-system-compositor.log", NULL);343 SEAT_UNITY (seat)->priv->log_file = g_build_filename (dir, "unity-system-compositor.log", NULL);
344 g_debug ("Logging to %s", SEAT_UNITY (seat)->priv->log_file);344 l_debug (seat, "Logging to %s", SEAT_UNITY (seat)->priv->log_file);
345 g_free (dir);345 g_free (dir);
346346
347 SEAT_UNITY (seat)->priv->mir_socket_filename = g_strdup ("/tmp/mir_socket"); // FIXME: Use this socket by default as XMir is hardcoded to this347 SEAT_UNITY (seat)->priv->mir_socket_filename = g_strdup ("/tmp/mir_socket"); // FIXME: Use this socket by default as XMir is hardcoded to this
@@ -372,7 +372,7 @@
372 timeout = seat_get_integer_property (seat, "unity-compositor-timeout");372 timeout = seat_get_integer_property (seat, "unity-compositor-timeout");
373 if (timeout <= 0)373 if (timeout <= 0)
374 timeout = 60;374 timeout = 60;
375 g_debug ("Waiting for system compositor for %ds", timeout);375 l_debug (seat, "Waiting for system compositor for %ds", timeout);
376 SEAT_UNITY (seat)->priv->compositor_timeout = g_timeout_add (timeout * 1000, compositor_timeout_cb, seat);376 SEAT_UNITY (seat)->priv->compositor_timeout = g_timeout_add (timeout * 1000, compositor_timeout_cb, seat);
377377
378 return TRUE;378 return TRUE;
@@ -386,7 +386,7 @@
386 gboolean allow_tcp;386 gboolean allow_tcp;
387 gint port = 0;387 gint port = 0;
388388
389 g_debug ("Starting X server on Unity compositor");389 l_debug (seat, "Starting X server on Unity compositor");
390390
391 x_server = x_server_local_new ();391 x_server = x_server_local_new ();
392392
@@ -441,7 +441,7 @@
441 keys = g_key_file_new ();441 keys = g_key_file_new ();
442 result = g_key_file_load_from_file (keys, path, G_KEY_FILE_NONE, &error);442 result = g_key_file_load_from_file (keys, path, G_KEY_FILE_NONE, &error);
443 if (error)443 if (error)
444 g_debug ("Error getting key %s", error->message);444 l_debug (seat, "Error getting key %s", error->message);
445 g_clear_error (&error);445 g_clear_error (&error);
446446
447 if (result)447 if (result)
@@ -451,7 +451,7 @@
451 if (g_key_file_has_key (keys, "keyring", key_name, NULL))451 if (g_key_file_has_key (keys, "keyring", key_name, NULL))
452 key = g_key_file_get_string (keys, "keyring", key_name, NULL);452 key = g_key_file_get_string (keys, "keyring", key_name, NULL);
453 else453 else
454 g_debug ("Key %s not defined", key_name);454 l_debug (seat, "Key %s not defined", key_name);
455455
456 if (key)456 if (key)
457 x_server_local_set_xdmcp_key (x_server, key);457 x_server_local_set_xdmcp_key (x_server, key);
@@ -498,7 +498,7 @@
498 return create_mir_server (seat);498 return create_mir_server (seat);
499 else499 else
500 {500 {
501 g_warning ("Can't create unsupported display server '%s'", session_type);501 l_warning (seat, "Can't create unsupported display server '%s'", session_type);
502 return NULL;502 return NULL;
503 }503 }
504}504}
@@ -507,15 +507,21 @@
507seat_unity_create_greeter_session (Seat *seat)507seat_unity_create_greeter_session (Seat *seat)
508{508{
509 Greeter *greeter_session;509 Greeter *greeter_session;
510 const gchar *xdg_seat;
510511
511 greeter_session = SEAT_CLASS (seat_unity_parent_class)->create_greeter_session (seat);512 greeter_session = SEAT_CLASS (seat_unity_parent_class)->create_greeter_session (seat);
512 session_set_env (SESSION (greeter_session), "XDG_SEAT", "seat0");513 xdg_seat = "seat0";
514 l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
515 session_set_env (SESSION (greeter_session), "XDG_SEAT", xdg_seat);
513 if (!SEAT_UNITY (seat)->priv->use_vt_switching)516 if (!SEAT_UNITY (seat)->priv->use_vt_switching)
514 {517 {
515 gchar *value = g_strdup_printf ("%d", SEAT_UNITY (seat)->priv->vt);518 gchar *value = g_strdup_printf ("%d", SEAT_UNITY (seat)->priv->vt);
519 l_debug (seat, "Setting XDG_VTNR=%s", value);
516 session_set_env (SESSION (greeter_session), "XDG_VTNR", value);520 session_set_env (SESSION (greeter_session), "XDG_VTNR", value);
517 g_free (value);521 g_free (value);
518 }522 }
523 else
524 l_debug (seat, "Not setting XDG_VTNR");
519525
520 return greeter_session;526 return greeter_session;
521}527}
@@ -524,15 +530,21 @@
524seat_unity_create_session (Seat *seat)530seat_unity_create_session (Seat *seat)
525{531{
526 Session *session;532 Session *session;
533 const gchar *xdg_seat;
527534
528 session = SEAT_CLASS (seat_unity_parent_class)->create_session (seat);535 session = SEAT_CLASS (seat_unity_parent_class)->create_session (seat);
529 session_set_env (session, "XDG_SEAT", "seat0");536 xdg_seat = "seat0";
537 l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
538 session_set_env (session, "XDG_SEAT", xdg_seat);
530 if (!SEAT_UNITY (seat)->priv->use_vt_switching)539 if (!SEAT_UNITY (seat)->priv->use_vt_switching)
531 {540 {
532 gchar *value = g_strdup_printf ("%d", SEAT_UNITY (seat)->priv->vt);541 gchar *value = g_strdup_printf ("%d", SEAT_UNITY (seat)->priv->vt);
542 l_debug (seat, "Setting XDG_VTNR=%s", value);
533 session_set_env (SESSION (session), "XDG_VTNR", value);543 session_set_env (SESSION (session), "XDG_VTNR", value);
534 g_free (value);544 g_free (value);
535 }545 }
546 else
547 l_debug (seat, "Not setting XDG_VTNR");
536548
537 return session;549 return session;
538}550}
@@ -571,11 +583,11 @@
571583
572 if (id)584 if (id)
573 {585 {
574 g_debug ("Switching to Mir session %s", id);586 l_debug (seat, "Switching to Mir session %s", id);
575 write_message (SEAT_UNITY (seat), USC_MESSAGE_SET_ACTIVE_SESSION, (const guint8 *) id, strlen (id));587 write_message (SEAT_UNITY (seat), USC_MESSAGE_SET_ACTIVE_SESSION, (const guint8 *) id, strlen (id));
576 }588 }
577 else589 else
578 g_warning ("Failed to work out session ID");590 l_warning (seat, "Failed to work out session ID");
579 }591 }
580592
581 SEAT_CLASS (seat_unity_parent_class)->set_active_session (seat, session);593 SEAT_CLASS (seat_unity_parent_class)->set_active_session (seat, session);
582594
=== modified file 'src/seat-xlocal.c'
--- src/seat-xlocal.c 2013-07-26 04:52:07 +0000
+++ src/seat-xlocal.c 2013-08-18 23:34:47 +0000
@@ -69,9 +69,9 @@
69 gint vt = -1, port = 0;69 gint vt = -1, port = 0;
7070
71 if (vt > 0)71 if (vt > 0)
72 g_debug ("Starting local X display on VT %d", vt);72 l_debug (seat, "Starting local X display on VT %d", vt);
73 else73 else
74 g_debug ("Starting local X display");74 l_debug (seat, "Starting local X display");
75 75
76 x_server = x_server_local_new ();76 x_server = x_server_local_new ();
7777
@@ -95,7 +95,7 @@
95 plymouth_deactivate ();95 plymouth_deactivate ();
96 }96 }
97 else97 else
98 g_debug ("Plymouth is running on VT %d, but this is less than the configured minimum of %d so not replacing it", active_vt, vt_get_min ());98 l_debug (seat, "Plymouth is running on VT %d, but this is less than the configured minimum of %d so not replacing it", active_vt, vt_get_min ());
99 }99 }
100 if (plymouth_get_is_active ())100 if (plymouth_get_is_active ())
101 plymouth_quit (FALSE);101 plymouth_quit (FALSE);
@@ -138,7 +138,7 @@
138 keys = g_key_file_new ();138 keys = g_key_file_new ();
139 result = g_key_file_load_from_file (keys, path, G_KEY_FILE_NONE, &error);139 result = g_key_file_load_from_file (keys, path, G_KEY_FILE_NONE, &error);
140 if (error)140 if (error)
141 g_debug ("Error getting key %s", error->message);141 l_debug (seat, "Error getting key %s", error->message);
142 g_clear_error (&error); 142 g_clear_error (&error);
143143
144 if (result)144 if (result)
@@ -148,7 +148,7 @@
148 if (g_key_file_has_key (keys, "keyring", key_name, NULL))148 if (g_key_file_has_key (keys, "keyring", key_name, NULL))
149 key = g_key_file_get_string (keys, "keyring", key_name, NULL);149 key = g_key_file_get_string (keys, "keyring", key_name, NULL);
150 else150 else
151 g_debug ("Key %s not defined", key_name);151 l_debug (seat, "Key %s not defined", key_name);
152152
153 if (key)153 if (key)
154 x_server_local_set_xdmcp_key (x_server, key);154 x_server_local_set_xdmcp_key (x_server, key);
@@ -166,9 +166,12 @@
166seat_xlocal_create_greeter_session (Seat *seat)166seat_xlocal_create_greeter_session (Seat *seat)
167{167{
168 Greeter *greeter_session;168 Greeter *greeter_session;
169 const gchar *xdg_seat;
169170
170 greeter_session = SEAT_CLASS (seat_xlocal_parent_class)->create_greeter_session (seat);171 greeter_session = SEAT_CLASS (seat_xlocal_parent_class)->create_greeter_session (seat);
171 session_set_env (SESSION (greeter_session), "XDG_SEAT", "seat0");172 xdg_seat = "seat0";
173 l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
174 session_set_env (SESSION (greeter_session), "XDG_SEAT", xdg_seat);
172175
173 return greeter_session;176 return greeter_session;
174}177}
@@ -177,9 +180,12 @@
177seat_xlocal_create_session (Seat *seat)180seat_xlocal_create_session (Seat *seat)
178{181{
179 Session *session;182 Session *session;
183 const gchar *xdg_seat;
180184
181 session = SEAT_CLASS (seat_xlocal_parent_class)->create_session (seat);185 session = SEAT_CLASS (seat_xlocal_parent_class)->create_session (seat);
182 session_set_env (SESSION (session), "XDG_SEAT", "seat0");186 xdg_seat = "seat0";
187 l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
188 session_set_env (SESSION (session), "XDG_SEAT", xdg_seat);
183189
184 return session;190 return session;
185}191}
186192
=== modified file 'src/seat-xremote.c'
--- src/seat-xremote.c 2013-07-24 23:53:37 +0000
+++ src/seat-xremote.c 2013-08-18 23:34:47 +0000
@@ -33,7 +33,7 @@
3333
34 if (strcmp (session_type, "x") != 0)34 if (strcmp (session_type, "x") != 0)
35 {35 {
36 g_warning ("X remote seat only supports X display servers, not '%s'", session_type);36 l_warning (seat, "X remote seat only supports X display servers, not '%s'", session_type);
37 return NULL;37 return NULL;
38 }38 }
3939
@@ -42,7 +42,7 @@
42 hostname = "localhost";42 hostname = "localhost";
43 number = seat_get_integer_property (seat, "xserver-display-number");43 number = seat_get_integer_property (seat, "xserver-display-number");
4444
45 g_debug ("Starting remote X display %s:%d", hostname, number);45 l_debug (seat, "Starting remote X display %s:%d", hostname, number);
4646
47 x_server = x_server_remote_new (hostname, number, NULL);47 x_server = x_server_remote_new (hostname, number, NULL);
4848
@@ -53,9 +53,12 @@
53seat_xremote_create_greeter_session (Seat *seat)53seat_xremote_create_greeter_session (Seat *seat)
54{54{
55 Greeter *greeter_session;55 Greeter *greeter_session;
56 const gchar *xdg_seat;
5657
57 greeter_session = SEAT_CLASS (seat_xremote_parent_class)->create_greeter_session (seat);58 greeter_session = SEAT_CLASS (seat_xremote_parent_class)->create_greeter_session (seat);
58 session_set_env (SESSION (greeter_session), "XDG_SEAT", "seat0");59 xdg_seat = "seat0";
60 l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
61 session_set_env (SESSION (greeter_session), "XDG_SEAT", xdg_seat);
5962
60 return greeter_session;63 return greeter_session;
61}64}
@@ -64,9 +67,12 @@
64seat_xremote_create_session (Seat *seat)67seat_xremote_create_session (Seat *seat)
65{68{
66 Session *session;69 Session *session;
70 const gchar *xdg_seat;
6771
68 session = SEAT_CLASS (seat_xremote_parent_class)->create_session (seat);72 session = SEAT_CLASS (seat_xremote_parent_class)->create_session (seat);
69 session_set_env (SESSION (session), "XDG_SEAT", "seat0");73 xdg_seat = "seat0";
74 l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
75 session_set_env (SESSION (session), "XDG_SEAT", xdg_seat);
7076
71 return session;77 return session;
72}78}
7379
=== modified file 'src/seat.c'
--- src/seat.c 2013-08-08 10:10:19 +0000
+++ src/seat.c 2013-08-18 23:34:47 +0000
@@ -66,7 +66,11 @@
66#define USER_SERVICE "lightdm"66#define USER_SERVICE "lightdm"
67#define AUTOLOGIN_SERVICE "lightdm-autologin"67#define AUTOLOGIN_SERVICE "lightdm-autologin"
6868
69G_DEFINE_TYPE (Seat, seat, G_TYPE_OBJECT);69static void seat_logger_iface_init (LoggerInterface *iface);
70
71G_DEFINE_TYPE_WITH_CODE (Seat, seat, G_TYPE_OBJECT,
72 G_IMPLEMENT_INTERFACE (
73 LOGGER_TYPE, seat_logger_iface_init));
7074
71typedef struct75typedef struct
72{76{
@@ -198,7 +202,7 @@
198202
199 if (IS_GREETER (s))203 if (IS_GREETER (s))
200 {204 {
201 g_debug ("Stopping greeter");205 l_debug (seat, "Stopping greeter");
202 session_stop (s);206 session_stop (s);
203 }207 }
204 }208 }
@@ -277,7 +281,7 @@
277 exit_status = process_get_exit_status (script);281 exit_status = process_get_exit_status (script);
278 if (WIFEXITED (exit_status))282 if (WIFEXITED (exit_status))
279 {283 {
280 g_debug ("Exit status of %s: %d", script_name, WEXITSTATUS (exit_status));284 l_debug (seat, "Exit status of %s: %d", script_name, WEXITSTATUS (exit_status));
281 result = WEXITSTATUS (exit_status) == EXIT_SUCCESS;285 result = WEXITSTATUS (exit_status) == EXIT_SUCCESS;
282 }286 }
283 }287 }
@@ -315,7 +319,7 @@
315 g_list_length (seat->priv->sessions) == 0)319 g_list_length (seat->priv->sessions) == 0)
316 {320 {
317 seat->priv->stopped = TRUE;321 seat->priv->stopped = TRUE;
318 g_debug ("Seat stopped");322 l_debug (seat, "Stopped");
319 g_signal_emit (seat, signals[STOPPED], 0);323 g_signal_emit (seat, signals[STOPPED], 0);
320 }324 }
321}325}
@@ -332,7 +336,7 @@
332 GList *list, *link;336 GList *list, *link;
333 Session *active_session;337 Session *active_session;
334338
335 g_debug ("Display server stopped");339 l_debug (seat, "Display server stopped");
336340
337 g_signal_handlers_disconnect_matched (display_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);341 g_signal_handlers_disconnect_matched (display_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
338 seat->priv->display_servers = g_list_remove (seat->priv->display_servers, display_server);342 seat->priv->display_servers = g_list_remove (seat->priv->display_servers, display_server);
@@ -360,11 +364,11 @@
360 !session_get_is_started (session) &&364 !session_get_is_started (session) &&
361 g_list_length (seat->priv->display_servers) == 0)365 g_list_length (seat->priv->display_servers) == 0)
362 {366 {
363 g_debug ("Stopping seat, greeter display server failed to start");367 l_debug (seat, "Stopping; greeter display server failed to start");
364 seat_stop (seat);368 seat_stop (seat);
365 }369 }
366370
367 g_debug ("Stopping session");371 l_debug (seat, "Stopping session");
368 session_stop (session);372 session_stop (session);
369 }373 }
370 g_list_free_full (list, g_object_unref);374 g_list_free_full (list, g_object_unref);
@@ -375,7 +379,7 @@
375 active_session = seat_get_active_session (seat);379 active_session = seat_get_active_session (seat);
376 if (!active_session || session_get_display_server (active_session) == display_server)380 if (!active_session || session_get_display_server (active_session) == display_server)
377 {381 {
378 g_debug ("Active display server stopped, starting greeter");382 l_debug (seat, "Active display server stopped, starting greeter");
379 seat_switch_to_greeter (seat);383 seat_switch_to_greeter (seat);
380 }384 }
381 }385 }
@@ -412,7 +416,7 @@
412 display_server = create_display_server (seat, session_get_session_type (session));416 display_server = create_display_server (seat, session_get_session_type (session));
413 if (!display_server_start (display_server))417 if (!display_server_start (display_server))
414 {418 {
415 g_debug ("Failed to start display server for greeter");419 l_debug (seat, "Failed to start display server for greeter");
416 seat_stop (seat);420 seat_stop (seat);
417 }421 }
418422
@@ -447,12 +451,12 @@
447451
448 if (IS_GREETER (session))452 if (IS_GREETER (session))
449 {453 {
450 g_debug ("Failed to start greeter");454 l_debug (seat, "Failed to start greeter");
451 display_server_stop (session_get_display_server (session));455 display_server_stop (session_get_display_server (session));
452 return;456 return;
453 }457 }
454458
455 g_debug ("Failed to start session, starting greeter");459 l_debug (seat, "Failed to start session, starting greeter");
456 switch_to_greeter_from_failed_session (seat, session);460 switch_to_greeter_from_failed_session (seat, session);
457}461}
458462
@@ -467,7 +471,7 @@
467 script = seat_get_string_property (seat, "session-setup-script");471 script = seat_get_string_property (seat, "session-setup-script");
468 if (script && !run_script (seat, session_get_display_server (session), script, NULL))472 if (script && !run_script (seat, session_get_display_server (session), script, NULL))
469 {473 {
470 g_debug ("Switching to greeter due to failed setup script");474 l_debug (seat, "Switching to greeter due to failed setup script");
471 switch_to_greeter_from_failed_session (seat, session);475 switch_to_greeter_from_failed_session (seat, session);
472 return;476 return;
473 }477 }
@@ -495,17 +499,17 @@
495{499{
496 if (session_get_is_authenticated (session))500 if (session_get_is_authenticated (session))
497 {501 {
498 g_debug ("Session authenticated, running command");502 l_debug (seat, "Session authenticated, running command");
499 run_session (seat, session);503 run_session (seat, session);
500 }504 }
501 else if (!IS_GREETER (session))505 else if (!IS_GREETER (session))
502 {506 {
503 g_debug ("Switching to greeter due to failed authentication");507 l_debug (seat, "Switching to greeter due to failed authentication");
504 switch_to_greeter_from_failed_session (seat, session);508 switch_to_greeter_from_failed_session (seat, session);
505 }509 }
506 else510 else
507 {511 {
508 g_debug ("Stopping session that failed authentication");512 l_debug (seat, "Stopping session that failed authentication");
509 session_stop (session);513 session_stop (session);
510 }514 }
511}515}
@@ -515,7 +519,7 @@
515{519{
516 DisplayServer *display_server;520 DisplayServer *display_server;
517521
518 g_debug ("Session stopped");522 l_debug (seat, "Session stopped");
519523
520 g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);524 g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
521 seat->priv->sessions = g_list_remove (seat->priv->sessions, session);525 seat->priv->sessions = g_list_remove (seat->priv->sessions, session);
@@ -578,12 +582,12 @@
578582
579 if (session_get_is_authenticated (s))583 if (session_get_is_authenticated (s))
580 {584 {
581 g_debug ("Greeter stopped, running session");585 l_debug (seat, "Greeter stopped, running session");
582 run_session (seat, s);586 run_session (seat, s);
583 }587 }
584 else588 else
585 {589 {
586 g_debug ("Greeter stopped, starting session authentication");590 l_debug (seat, "Greeter stopped, starting session authentication");
587 start_session (seat, s);591 start_session (seat, s);
588 }592 }
589 break;593 break;
@@ -595,13 +599,13 @@
595 g_list_length (seat->priv->display_servers) == 1 &&599 g_list_length (seat->priv->display_servers) == 1 &&
596 g_list_nth_data (seat->priv->display_servers, 0) == display_server)600 g_list_nth_data (seat->priv->display_servers, 0) == display_server)
597 {601 {
598 g_debug ("Stopping seat, failed to start a greeter");602 l_debug (seat, "Stopping; failed to start a greeter");
599 seat_stop (seat);603 seat_stop (seat);
600 }604 }
601 /* If we were the active session, switch to a greeter */605 /* If we were the active session, switch to a greeter */
602 else if (!IS_GREETER (session) && session == seat_get_active_session (seat))606 else if (!IS_GREETER (session) && session == seat_get_active_session (seat))
603 {607 {
604 g_debug ("Active session stopped, starting greeter");608 l_debug (seat, "Active session stopped, starting greeter");
605 seat_switch_to_greeter (seat);609 seat_switch_to_greeter (seat);
606 }610 }
607611
@@ -621,7 +625,7 @@
621 }625 }
622 if (n_sessions == 0)626 if (n_sessions == 0)
623 {627 {
624 g_debug ("Stopping display server, no sessions require it");628 l_debug (seat, "Stopping display server, no sessions require it");
625 display_server_stop (display_server);629 display_server_stop (display_server);
626 }630 }
627 }631 }
@@ -678,7 +682,7 @@
678}682}
679683
680static gchar **684static gchar **
681get_session_argv (SessionConfig *session_config, const gchar *session_wrapper)685get_session_argv (Seat *seat, SessionConfig *session_config, const gchar *session_wrapper)
682{686{
683 gboolean result;687 gboolean result;
684 int argc;688 int argc;
@@ -699,7 +703,7 @@
699 /* Split command into an array listing and make command absolute */703 /* Split command into an array listing and make command absolute */
700 result = g_shell_parse_argv (session_config_get_command (session_config), &argc, &argv, &error);704 result = g_shell_parse_argv (session_config_get_command (session_config), &argc, &argv, &error);
701 if (error)705 if (error)
702 g_debug ("Invalid session command '%s': %s", session_config_get_command (session_config), error->message);706 l_debug (seat, "Invalid session command '%s': %s", session_config_get_command (session_config), error->message);
703 g_clear_error (&error);707 g_clear_error (&error);
704 if (!result)708 if (!result)
705 return NULL;709 return NULL;
@@ -714,7 +718,7 @@
714}718}
715719
716static SessionConfig *720static SessionConfig *
717find_session_config (const gchar *sessions_dir, const gchar *session_name)721find_session_config (Seat *seat, const gchar *sessions_dir, const gchar *session_name)
718{722{
719 gchar **dirs;723 gchar **dirs;
720 SessionConfig *session_config = NULL;724 SessionConfig *session_config = NULL;
@@ -738,7 +742,7 @@
738 break;742 break;
739743
740 if (dirs[i+1] == NULL)744 if (dirs[i+1] == NULL)
741 g_debug ("Failed to find session configuration %s", session_name);745 l_debug (seat, "Failed to find session configuration %s", session_name);
742 g_clear_error (&error);746 g_clear_error (&error);
743 }747 }
744 g_strfreev (dirs);748 g_strfreev (dirs);
@@ -755,13 +759,13 @@
755 SessionConfig *session_config;759 SessionConfig *session_config;
756 Session *session = NULL;760 Session *session = NULL;
757761
758 g_debug ("Creating user session");762 l_debug (seat, "Creating user session");
759763
760 /* Load user preferences */764 /* Load user preferences */
761 user = accounts_get_user_by_name (username);765 user = accounts_get_user_by_name (username);
762 if (!user)766 if (!user)
763 {767 {
764 g_debug ("Can't login unknown user '%s'", username);768 l_debug (seat, "Can't login unknown user '%s'", username);
765 return NULL;769 return NULL;
766 }770 }
767 session_name = user_get_xsession (user);771 session_name = user_get_xsession (user);
@@ -770,7 +774,7 @@
770 if (!session_name)774 if (!session_name)
771 session_name = seat_get_string_property (seat, "user-session");775 session_name = seat_get_string_property (seat, "user-session");
772 sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory");776 sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory");
773 session_config = find_session_config (sessions_dir, session_name);777 session_config = find_session_config (seat, sessions_dir, session_name);
774 g_free (sessions_dir);778 g_free (sessions_dir);
775 if (session_config)779 if (session_config)
776 {780 {
@@ -788,14 +792,14 @@
788 session_set_pam_service (session, AUTOLOGIN_SERVICE);792 session_set_pam_service (session, AUTOLOGIN_SERVICE);
789 session_set_username (session, username);793 session_set_username (session, username);
790 session_set_do_authenticate (session, TRUE);794 session_set_do_authenticate (session, TRUE);
791 argv = get_session_argv (session_config, seat_get_string_property (seat, "session-wrapper"));795 argv = get_session_argv (seat, session_config, seat_get_string_property (seat, "session-wrapper"));
792 session_set_argv (session, argv);796 session_set_argv (session, argv);
793 g_strfreev (argv);797 g_strfreev (argv);
794798
795 g_object_unref (session_config);799 g_object_unref (session_config);
796 }800 }
797 else801 else
798 g_debug ("Can't find session '%s'", seat_get_string_property (seat, "user-session"));802 l_debug (seat, "Can't find session '%s'", seat_get_string_property (seat, "user-session"));
799803
800804
801 g_object_unref (user);805 g_object_unref (user);
@@ -811,11 +815,11 @@
811 Session *session;815 Session *session;
812816
813 sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory");817 sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory");
814 session_config = find_session_config (sessions_dir, seat_get_string_property (seat, "user-session"));818 session_config = find_session_config (seat, sessions_dir, seat_get_string_property (seat, "user-session"));
815 g_free (sessions_dir);819 g_free (sessions_dir);
816 if (!session_config)820 if (!session_config)
817 {821 {
818 g_debug ("Can't find session '%s'", seat_get_string_property (seat, "user-session"));822 l_debug (seat, "Can't find session '%s'", seat_get_string_property (seat, "user-session"));
819 return NULL;823 return NULL;
820 }824 }
821825
@@ -823,7 +827,7 @@
823 session_set_session_type (session, session_config_get_session_type (session_config));827 session_set_session_type (session, session_config_get_session_type (session_config));
824 session_set_do_authenticate (session, TRUE);828 session_set_do_authenticate (session, TRUE);
825 session_set_is_guest (session, TRUE);829 session_set_is_guest (session, TRUE);
826 argv = get_session_argv (session_config, seat_get_string_property (seat, "session-wrapper"));830 argv = get_session_argv (seat, session_config, seat_get_string_property (seat, "session-wrapper"));
827 g_object_unref (session_config);831 g_object_unref (session_config);
828 session_set_argv (session, argv);832 session_set_argv (session, argv);
829 g_strfreev (argv);833 g_strfreev (argv);
@@ -911,7 +915,7 @@
911 existing_session = find_user_session (seat, username);915 existing_session = find_user_session (seat, username);
912 if (existing_session && session != existing_session)916 if (existing_session && session != existing_session)
913 {917 {
914 g_debug ("Returning to existing user session %s", username);918 l_debug (seat, "Returning to existing user session %s", username);
915 session_stop (session);919 session_stop (session);
916 seat_set_active_session (seat, existing_session);920 seat_set_active_session (seat, existing_session);
917 return TRUE;921 return TRUE;
@@ -942,16 +946,16 @@
942 if (user)946 if (user)
943 user_set_xsession (session_get_user (session), session_name);947 user_set_xsession (session_get_user (session), session_name);
944948
945 session_config = find_session_config (sessions_dir, session_name);949 session_config = find_session_config (seat, sessions_dir, session_name);
946 g_free (sessions_dir);950 g_free (sessions_dir);
947 if (!session_config)951 if (!session_config)
948 {952 {
949 g_debug ("Can't find session '%s'", seat_get_string_property (seat, "user-session"));953 l_debug (seat, "Can't find session '%s'", seat_get_string_property (seat, "user-session"));
950 return FALSE;954 return FALSE;
951 }955 }
952956
953 session_set_session_type (session, session_config_get_session_type (session_config));957 session_set_session_type (session, session_config_get_session_type (session_config));
954 argv = get_session_argv (session_config, seat_get_string_property (seat, "session-wrapper"));958 argv = get_session_argv (seat, session_config, seat_get_string_property (seat, "session-wrapper"));
955 session_set_argv (session, argv);959 session_set_argv (session, argv);
956 g_strfreev (argv);960 g_strfreev (argv);
957 session_set_env (session, "DESKTOP_SESSION", session_name);961 session_set_env (session, "DESKTOP_SESSION", session_name);
@@ -969,7 +973,7 @@
969 if (can_share_display_server (seat, display_server) &&973 if (can_share_display_server (seat, display_server) &&
970 strcmp (display_server_get_session_type (display_server), session_get_session_type (session)) == 0)974 strcmp (display_server_get_session_type (display_server), session_get_session_type (session)) == 0)
971 {975 {
972 g_debug ("Stopping greeter; display server will be re-used for user session");976 l_debug (seat, "Stopping greeter; display server will be re-used for user session");
973977
974 /* Run on the same display server after the greeter has stopped */978 /* Run on the same display server after the greeter has stopped */
975 session_set_display_server (session, display_server);979 session_set_display_server (session, display_server);
@@ -986,7 +990,7 @@
986 session_set_display_server (session, display_server);990 session_set_display_server (session, display_server);
987 if (!display_server_start (display_server))991 if (!display_server_start (display_server))
988 {992 {
989 g_debug ("Failed to start display server for new session");993 l_debug (seat, "Failed to start display server for new session");
990 return FALSE;994 return FALSE;
991 }995 }
992996
@@ -1003,15 +1007,15 @@
1003 gchar *greeter_user;1007 gchar *greeter_user;
1004 const gchar *greeter_wrapper;1008 const gchar *greeter_wrapper;
10051009
1006 g_debug ("Creating greeter session");1010 l_debug (seat, "Creating greeter session");
10071011
1008 sessions_dir = config_get_string (config_get_instance (), "LightDM", "greeters-directory");1012 sessions_dir = config_get_string (config_get_instance (), "LightDM", "greeters-directory");
1009 session_config = find_session_config (sessions_dir, seat_get_string_property (seat, "greeter-session"));1013 session_config = find_session_config (seat, sessions_dir, seat_get_string_property (seat, "greeter-session"));
1010 g_free (sessions_dir);1014 g_free (sessions_dir);
1011 if (!session_config)1015 if (!session_config)
1012 return NULL;1016 return NULL;
10131017
1014 argv = get_session_argv (session_config, NULL);1018 argv = get_session_argv (seat, session_config, NULL);
1015 greeter_wrapper = seat_get_string_property (seat, "greeter-wrapper");1019 greeter_wrapper = seat_get_string_property (seat, "greeter-wrapper");
1016 if (greeter_wrapper)1020 if (greeter_wrapper)
1017 {1021 {
@@ -1078,7 +1082,7 @@
1078 script = seat_get_string_property (seat, "display-setup-script");1082 script = seat_get_string_property (seat, "display-setup-script");
1079 if (script && !run_script (seat, display_server, script, NULL))1083 if (script && !run_script (seat, display_server, script, NULL))
1080 {1084 {
1081 g_debug ("Stopping display server due to failed setup script");1085 l_debug (seat, "Stopping display server due to failed setup script");
1082 display_server_stop (display_server);1086 display_server_stop (display_server);
1083 return;1087 return;
1084 }1088 }
@@ -1095,18 +1099,18 @@
1095 {1099 {
1096 if (session_get_is_authenticated (session))1100 if (session_get_is_authenticated (session))
1097 {1101 {
1098 g_debug ("Display server ready, running session");1102 l_debug (seat, "Display server ready, running session");
1099 run_session (seat, session);1103 run_session (seat, session);
1100 }1104 }
1101 else1105 else
1102 {1106 {
1103 g_debug ("Display server ready, starting session authentication");1107 l_debug (seat, "Display server ready, starting session authentication");
1104 start_session (seat, session);1108 start_session (seat, session);
1105 }1109 }
1106 }1110 }
1107 else1111 else
1108 {1112 {
1109 g_debug ("Stopping not required display server");1113 l_debug (seat, "Stopping not required display server");
1110 display_server_stop (display_server);1114 display_server_stop (display_server);
1111 }1115 }
1112}1116}
@@ -1116,7 +1120,7 @@
1116{1120{
1117 DisplayServer *display_server;1121 DisplayServer *display_server;
11181122
1119 g_debug ("Creating display server of type %s", session_type);1123 l_debug (seat, "Creating display server of type %s", session_type);
11201124
1121 display_server = SEAT_GET_CLASS (seat)->create_display_server (seat, session_type);1125 display_server = SEAT_GET_CLASS (seat)->create_display_server (seat, session_type);
1122 if (!display_server)1126 if (!display_server)
@@ -1159,7 +1163,7 @@
1159 greeter_session = find_greeter_session (seat);1163 greeter_session = find_greeter_session (seat);
1160 if (greeter_session)1164 if (greeter_session)
1161 {1165 {
1162 g_debug ("Switching to existing greeter");1166 l_debug (seat, "Switching to existing greeter");
1163 seat_set_active_session (seat, SESSION (greeter_session));1167 seat_set_active_session (seat, SESSION (greeter_session));
1164 return TRUE;1168 return TRUE;
1165 }1169 }
@@ -1189,12 +1193,12 @@
1189 if (!seat->priv->can_switch)1193 if (!seat->priv->can_switch)
1190 return FALSE;1194 return FALSE;
11911195
1192 g_debug ("Switching to user %s", username);1196 l_debug (seat, "Switching to user %s", username);
11931197
1194 session = find_user_session (seat, username);1198 session = find_user_session (seat, username);
1195 if (session)1199 if (session)
1196 {1200 {
1197 g_debug ("Switching to existing user session %s", username);1201 l_debug (seat, "Switching to existing user session %s", username);
1198 seat_set_active_session (seat, session);1202 seat_set_active_session (seat, session);
1199 return TRUE;1203 return TRUE;
1200 }1204 }
@@ -1245,7 +1249,7 @@
1245 session = find_guest_session (seat);1249 session = find_guest_session (seat);
1246 if (session)1250 if (session)
1247 {1251 {
1248 g_debug ("Switching to existing guest account %s", session_get_username (session));1252 l_debug (seat, "Switching to existing guest account %s", session_get_username (session));
1249 seat_set_active_session (seat, session);1253 seat_set_active_session (seat, session);
1250 return TRUE;1254 return TRUE;
1251 }1255 }
@@ -1278,13 +1282,13 @@
1278 if (!seat->priv->can_switch)1282 if (!seat->priv->can_switch)
1279 return FALSE;1283 return FALSE;
12801284
1281 g_debug ("Locking seat");1285 l_debug (seat, "Locking");
12821286
1283 /* Switch to greeter if one open (shouldn't be though) */1287 /* Switch to greeter if one open (shouldn't be though) */
1284 greeter_session = find_greeter_session (seat);1288 greeter_session = find_greeter_session (seat);
1285 if (greeter_session)1289 if (greeter_session)
1286 {1290 {
1287 g_debug ("Switching to existing greeter");1291 l_debug (seat, "Switching to existing greeter");
1288 seat_set_active_session (seat, SESSION (greeter_session));1292 seat_set_active_session (seat, SESSION (greeter_session));
1289 return TRUE;1293 return TRUE;
1290 }1294 }
@@ -1316,7 +1320,7 @@
1316 if (seat->priv->stopping)1320 if (seat->priv->stopping)
1317 return;1321 return;
13181322
1319 g_debug ("Stopping seat");1323 l_debug (seat, "Stopping");
1320 seat->priv->stopping = TRUE;1324 seat->priv->stopping = TRUE;
1321 SEAT_GET_CLASS (seat)->stop (seat);1325 SEAT_GET_CLASS (seat)->stop (seat);
1322}1326}
@@ -1348,7 +1352,7 @@
1348 gboolean autologin_in_background;1352 gboolean autologin_in_background;
1349 Session *session = NULL, *background_session = NULL;1353 Session *session = NULL, *background_session = NULL;
13501354
1351 g_debug ("Starting seat");1355 l_debug (seat, "Starting");
13521356
1353 /* If this display server doesn't have a session running on it, just start it */1357 /* If this display server doesn't have a session running on it, just start it */
1354 if (!get_start_local_sessions (seat))1358 if (!get_start_local_sessions (seat))
@@ -1396,7 +1400,7 @@
1396 session_set_display_server (session, display_server);1400 session_set_display_server (session, display_server);
1397 if (!display_server || !display_server_start (display_server))1401 if (!display_server || !display_server_start (display_server))
1398 {1402 {
1399 g_debug ("Can't create display server for automatic login");1403 l_debug (seat, "Can't create display server for automatic login");
1400 session_stop (session);1404 session_stop (session);
1401 if (display_server)1405 if (display_server)
1402 display_server_stop (display_server);1406 display_server_stop (display_server);
@@ -1414,7 +1418,7 @@
1414 greeter_session = create_greeter_session (seat);1418 greeter_session = create_greeter_session (seat);
1415 if (!greeter_session)1419 if (!greeter_session)
1416 {1420 {
1417 g_debug ("Failed to create greeter session");1421 l_debug (seat, "Failed to create greeter session");
1418 return FALSE;1422 return FALSE;
1419 }1423 }
14201424
@@ -1440,7 +1444,7 @@
1440 session_set_display_server (session, display_server);1444 session_set_display_server (session, display_server);
1441 if (!display_server || !display_server_start (display_server))1445 if (!display_server || !display_server_start (display_server))
1442 {1446 {
1443 g_debug ("Can't create display server for greeter");1447 l_debug (seat, "Can't create display server for greeter");
1444 session_stop (session);1448 session_stop (session);
1445 if (display_server)1449 if (display_server)
1446 display_server_stop (display_server);1450 display_server_stop (display_server);
@@ -1463,7 +1467,7 @@
1463 background_display_server = create_display_server (seat, session_get_session_type (background_session));1467 background_display_server = create_display_server (seat, session_get_session_type (background_session));
1464 session_set_display_server (background_session, background_display_server);1468 session_set_display_server (background_session, background_display_server);
1465 if (!display_server_start (background_display_server))1469 if (!display_server_start (background_display_server))
1466 g_warning ("Failed to start display server for background session");1470 l_warning (seat, "Failed to start display server for background session");
1467 }1471 }
14681472
1469 seat->priv->started = TRUE;1473 seat->priv->started = TRUE;
@@ -1512,7 +1516,7 @@
1512 DisplayServer *display_server = link->data;1516 DisplayServer *display_server = link->data;
1513 if (!display_server_get_is_stopping (display_server))1517 if (!display_server_get_is_stopping (display_server))
1514 {1518 {
1515 g_debug ("Stopping display server");1519 l_debug (seat, "Stopping display server");
1516 display_server_stop (display_server);1520 display_server_stop (display_server);
1517 }1521 }
1518 }1522 }
@@ -1525,7 +1529,7 @@
1525 Session *session = link->data;1529 Session *session = link->data;
1526 if (!session_get_is_stopping (session))1530 if (!session_get_is_stopping (session))
1527 {1531 {
1528 g_debug ("Stopping session");1532 l_debug (seat, "Stopping session");
1529 session_stop (session);1533 session_stop (session);
1530 }1534 }
1531 }1535 }
@@ -1621,3 +1625,20 @@
1621 NULL,1625 NULL,
1622 G_TYPE_NONE, 0);1626 G_TYPE_NONE, 0);
1623}1627}
1628
1629static gint
1630seat_real_logprefix (Logger *self, gchar *buf, gulong buflen)
1631{
1632 Seat *seat = SEAT (self);
1633 const gchar *name = seat_get_string_property (seat, "seat-name");
1634 if (name)
1635 return g_snprintf (buf, buflen, "Seat %s: ", name);
1636 else
1637 return g_snprintf (buf, buflen, "Seat: ");
1638}
1639
1640static void
1641seat_logger_iface_init (LoggerInterface *iface)
1642{
1643 iface->logprefix = &seat_real_logprefix;
1644}
16241645
=== modified file 'src/seat.h'
--- src/seat.h 2013-07-25 23:40:02 +0000
+++ src/seat.h 2013-08-18 23:34:47 +0000
@@ -17,6 +17,7 @@
17#include "greeter.h"17#include "greeter.h"
18#include "session.h"18#include "session.h"
19#include "process.h"19#include "process.h"
20#include "logger.h"
2021
21G_BEGIN_DECLS22G_BEGIN_DECLS
2223
2324
=== modified file 'src/session.c'
--- src/session.c 2013-08-08 10:10:19 +0000
+++ src/session.c 2013-08-18 23:34:47 +0000
@@ -120,7 +120,11 @@
120/* Maximum length of a string to pass between daemon and session */120/* Maximum length of a string to pass between daemon and session */
121#define MAX_STRING_LENGTH 65535121#define MAX_STRING_LENGTH 65535
122122
123G_DEFINE_TYPE (Session, session, G_TYPE_OBJECT);123static void session_logger_iface_init (LoggerInterface *iface);
124
125G_DEFINE_TYPE_WITH_CODE (Session, session, G_TYPE_OBJECT,
126 G_IMPLEMENT_INTERFACE (
127 LOGGER_TYPE, session_logger_iface_init));
124128
125Session *129Session *
126session_new (void)130session_new (void)
@@ -338,7 +342,7 @@
338write_data (Session *session, const void *buf, size_t count)342write_data (Session *session, const void *buf, size_t count)
339{343{
340 if (write (session->priv->to_child_input, buf, count) != count)344 if (write (session->priv->to_child_input, buf, count) != count)
341 g_warning ("Error writing to session: %s", strerror (errno));345 l_warning (session, "Error writing to session: %s", strerror (errno));
342}346}
343347
344static void348static void
@@ -382,7 +386,7 @@
382 ssize_t n_read;386 ssize_t n_read;
383 n_read = read (session->priv->from_child_output, buf, count);387 n_read = read (session->priv->from_child_output, buf, count);
384 if (n_read < 0)388 if (n_read < 0)
385 g_warning ("Error reading from session: %s", strerror (errno));389 l_warning (session, "Error reading from session: %s", strerror (errno));
386 return n_read;390 return n_read;
387}391}
388392
@@ -398,7 +402,7 @@
398 return NULL;402 return NULL;
399 if (length > MAX_STRING_LENGTH)403 if (length > MAX_STRING_LENGTH)
400 {404 {
401 g_warning ("Invalid string length %d from child", length);405 l_warning (session, "Invalid string length %d from child", length);
402 return NULL;406 return NULL;
403 }407 }
404408
@@ -414,17 +418,18 @@
414{418{
415 Session *session = data;419 Session *session = data;
416420
417 session->priv->pid = 0;
418
419 if (WIFEXITED (status))421 if (WIFEXITED (status))
420 g_debug ("Session %d exited with return value %d", pid, WEXITSTATUS (status));422 l_debug (session, "Exited with return value %d", WEXITSTATUS (status));
421 else if (WIFSIGNALED (status))423 else if (WIFSIGNALED (status))
422 g_debug ("Session %d terminated with signal %d", pid, WTERMSIG (status));424 l_debug (session, "Terminated with signal %d", WTERMSIG (status));
425
426 /* do this as late as possible for log messages prefix */
427 session->priv->pid = 0;
423428
424 /* If failed during authentication then report this as an authentication failure */429 /* If failed during authentication then report this as an authentication failure */
425 if (session->priv->authentication_started && !session->priv->authentication_complete)430 if (session->priv->authentication_started && !session->priv->authentication_complete)
426 {431 {
427 g_debug ("Session %d failed during authentication", pid);432 l_debug (session, "Failed during authentication");
428 session->priv->authentication_complete = TRUE;433 session->priv->authentication_complete = TRUE;
429 session->priv->authentication_result = PAM_CONV_ERR;434 session->priv->authentication_result = PAM_CONV_ERR;
430 g_free (session->priv->authentication_result_string);435 g_free (session->priv->authentication_result_string);
@@ -473,7 +478,7 @@
473 /* Check if authentication completed */478 /* Check if authentication completed */
474 n_read = read_from_child (session, &auth_complete, sizeof (auth_complete));479 n_read = read_from_child (session, &auth_complete, sizeof (auth_complete));
475 if (n_read < 0)480 if (n_read < 0)
476 g_debug ("Error reading from child: %s", strerror (errno));481 l_debug (session, "Error reading from child: %s", strerror (errno));
477 if (n_read <= 0)482 if (n_read <= 0)
478 {483 {
479 session->priv->from_child_watch = 0;484 session->priv->from_child_watch = 0;
@@ -487,7 +492,7 @@
487 g_free (session->priv->authentication_result_string);492 g_free (session->priv->authentication_result_string);
488 session->priv->authentication_result_string = read_string_from_child (session);493 session->priv->authentication_result_string = read_string_from_child (session);
489494
490 g_debug ("Session %d authentication complete with return value %d: %s", session->priv->pid, session->priv->authentication_result, session->priv->authentication_result_string);495 l_debug (session, "Authentication complete with return value %d: %s", session->priv->authentication_result, session->priv->authentication_result_string);
491496
492 /* No longer expect any more messages */497 /* No longer expect any more messages */
493 session->priv->from_child_watch = 0;498 session->priv->from_child_watch = 0;
@@ -510,7 +515,7 @@
510 m->msg = read_string_from_child (session);515 m->msg = read_string_from_child (session);
511 }516 }
512517
513 g_debug ("Session %d got %d message(s) from PAM", session->priv->pid, session->priv->messages_length);518 l_debug (session, "Got %d message(s) from PAM", session->priv->messages_length);
514519
515 g_signal_emit (G_OBJECT (session), signals[GOT_MESSAGES], 0);520 g_signal_emit (G_OBJECT (session), signals[GOT_MESSAGES], 0);
516 }521 }
@@ -616,7 +621,7 @@
616 write_string (session, session->priv->xdisplay);621 write_string (session, session->priv->xdisplay);
617 write_xauth (session, session->priv->x_authority);622 write_xauth (session, session->priv->x_authority);
618623
619 g_debug ("Started session %d with service '%s', username '%s'", session->priv->pid, session->priv->pam_service, session->priv->username);624 l_debug (session, "Started with service '%s', username '%s'", session->priv->pam_service, session->priv->username);
620625
621 return TRUE;626 return TRUE;
622}627}
@@ -727,7 +732,7 @@
727 session->priv->command_run = TRUE;732 session->priv->command_run = TRUE;
728733
729 command = g_strjoinv (" ", session->priv->argv);734 command = g_strjoinv (" ", session->priv->argv);
730 g_debug ("Session %d running command %s", session->priv->pid, command);735 l_debug (session, "Running command %s", command);
731 g_free (command);736 g_free (command);
732737
733 /* Create authority location */738 /* Create authority location */
@@ -740,11 +745,11 @@
740 g_free (run_dir);745 g_free (run_dir);
741746
742 if (g_mkdir_with_parents (dir, S_IRWXU) < 0)747 if (g_mkdir_with_parents (dir, S_IRWXU) < 0)
743 g_warning ("Failed to set create system authority dir %s: %s", dir, strerror (errno)); 748 l_warning (session, "Failed to set create system authority dir %s: %s", dir, strerror (errno));
744 if (getuid () == 0)749 if (getuid () == 0)
745 {750 {
746 if (chown (dir, user_get_uid (session_get_user (session)), user_get_gid (session_get_user (session))) < 0)751 if (chown (dir, user_get_uid (session_get_user (session)), user_get_gid (session_get_user (session))) < 0)
747 g_warning ("Failed to set ownership of user authority dir: %s", strerror (errno));752 l_warning (session, "Failed to set ownership of user authority dir: %s", strerror (errno));
748 }753 }
749754
750 x_authority_filename = g_build_filename (dir, "xauthority", NULL);755 x_authority_filename = g_build_filename (dir, "xauthority", NULL);
@@ -819,7 +824,7 @@
819824
820 if (session->priv->pid > 0)825 if (session->priv->pid > 0)
821 {826 {
822 g_debug ("Session %d: Sending SIGTERM", session->priv->pid);827 l_debug (session, "Sending SIGTERM");
823 kill (session->priv->pid, SIGTERM);828 kill (session->priv->pid, SIGTERM);
824 // FIXME: Handle timeout829 // FIXME: Handle timeout
825 }830 }
@@ -920,3 +925,19 @@
920 NULL,925 NULL,
921 G_TYPE_NONE, 0);926 G_TYPE_NONE, 0);
922}927}
928
929static gint
930session_real_logprefix (Logger *self, gchar *buf, gulong buflen)
931{
932 Session *session = SESSION (self);
933 if (session->priv->pid != 0)
934 return g_snprintf (buf, buflen, "Session pid=%d: ", session->priv->pid);
935 else
936 return g_snprintf (buf, buflen, "Session: ");
937}
938
939static void
940session_logger_iface_init (LoggerInterface *iface)
941{
942 iface->logprefix = &session_real_logprefix;
943}
923944
=== modified file 'src/session.h'
--- src/session.h 2013-07-26 02:27:41 +0000
+++ src/session.h 2013-08-18 23:34:47 +0000
@@ -21,6 +21,7 @@
21#include "display-server.h"21#include "display-server.h"
22#include "accounts.h"22#include "accounts.h"
23#include "x-authority.h"23#include "x-authority.h"
24#include "logger.h"
2425
25G_BEGIN_DECLS26G_BEGIN_DECLS
2627
2728
=== modified file 'src/x-server-local.c'
--- src/x-server-local.c 2013-07-26 01:23:05 +0000
+++ src/x-server-local.c 2013-08-18 23:34:47 +0000
@@ -333,7 +333,7 @@
333333
334 fd = g_open (server->priv->log_file, O_WRONLY | O_CREAT | O_TRUNC, 0600);334 fd = g_open (server->priv->log_file, O_WRONLY | O_CREAT | O_TRUNC, 0600);
335 if (fd < 0)335 if (fd < 0)
336 g_warning ("Failed to open log file %s: %s", server->priv->log_file, g_strerror (errno));336 l_warning (server, "Failed to open log file %s: %s", server->priv->log_file, g_strerror (errno));
337 else337 else
338 {338 {
339 dup2 (fd, STDOUT_FILENO);339 dup2 (fd, STDOUT_FILENO);
@@ -352,7 +352,7 @@
352 if (signum == SIGUSR1 && !server->priv->got_signal)352 if (signum == SIGUSR1 && !server->priv->got_signal)
353 {353 {
354 server->priv->got_signal = TRUE;354 server->priv->got_signal = TRUE;
355 g_debug ("Got signal from X server :%d", x_server_get_display_number (X_SERVER (server)));355 l_debug (server, "Got signal from X server :%d", x_server_get_display_number (X_SERVER (server)));
356356
357 // FIXME: Check return value357 // FIXME: Check return value
358 DISPLAY_SERVER_CLASS (x_server_local_parent_class)->start (DISPLAY_SERVER (server));358 DISPLAY_SERVER_CLASS (x_server_local_parent_class)->start (DISPLAY_SERVER (server));
@@ -362,7 +362,7 @@
362static void362static void
363stopped_cb (Process *process, XServerLocal *server)363stopped_cb (Process *process, XServerLocal *server)
364{364{
365 g_debug ("X server stopped");365 l_debug (server, "X server stopped");
366366
367 /* Release VT and display number for re-use */367 /* Release VT and display number for re-use */
368 if (server->priv->have_vt_ref)368 if (server->priv->have_vt_ref)
@@ -374,7 +374,7 @@
374 374
375 if (x_server_get_authority (X_SERVER (server)) && server->priv->authority_file)375 if (x_server_get_authority (X_SERVER (server)) && server->priv->authority_file)
376 {376 {
377 g_debug ("Removing X server authority %s", server->priv->authority_file);377 l_debug (server, "Removing X server authority %s", server->priv->authority_file);
378378
379 g_unlink (server->priv->authority_file);379 g_unlink (server->priv->authority_file);
380380
@@ -404,17 +404,17 @@
404 dir = g_build_filename (run_dir, "root", NULL);404 dir = g_build_filename (run_dir, "root", NULL);
405 g_free (run_dir);405 g_free (run_dir);
406 if (g_mkdir_with_parents (dir, S_IRWXU) < 0)406 if (g_mkdir_with_parents (dir, S_IRWXU) < 0)
407 g_warning ("Failed to make authority directory %s: %s", dir, strerror (errno));407 l_warning (server, "Failed to make authority directory %s: %s", dir, strerror (errno));
408408
409 server->priv->authority_file = g_build_filename (dir, x_server_get_address (X_SERVER (server)), NULL);409 server->priv->authority_file = g_build_filename (dir, x_server_get_address (X_SERVER (server)), NULL);
410 g_free (dir);410 g_free (dir);
411 }411 }
412412
413 g_debug ("Writing X server authority to %s", server->priv->authority_file);413 l_debug (server, "Writing X server authority to %s", server->priv->authority_file);
414414
415 x_authority_write (authority, XAUTH_WRITE_MODE_REPLACE, server->priv->authority_file, &error);415 x_authority_write (authority, XAUTH_WRITE_MODE_REPLACE, server->priv->authority_file, &error);
416 if (error)416 if (error)
417 g_warning ("Failed to write authority: %s", error->message);417 l_warning (server, "Failed to write authority: %s", error->message);
418 g_clear_error (&error);418 g_clear_error (&error);
419}419}
420420
@@ -442,14 +442,14 @@
442 filename = g_strdup_printf ("%s.log", display_server_get_name (display_server));442 filename = g_strdup_printf ("%s.log", display_server_get_name (display_server));
443 dir = config_get_string (config_get_instance (), "LightDM", "log-directory");443 dir = config_get_string (config_get_instance (), "LightDM", "log-directory");
444 server->priv->log_file = g_build_filename (dir, filename, NULL);444 server->priv->log_file = g_build_filename (dir, filename, NULL);
445 g_debug ("Logging to %s", server->priv->log_file);445 l_debug (display_server, "Logging to %s", server->priv->log_file);
446 g_free (filename);446 g_free (filename);
447 g_free (dir);447 g_free (dir);
448448
449 absolute_command = get_absolute_command (server->priv->command);449 absolute_command = get_absolute_command (server->priv->command);
450 if (!absolute_command)450 if (!absolute_command)
451 {451 {
452 g_debug ("Can't launch X server %s, not found in path", server->priv->command);452 l_debug (display_server, "Can't launch X server %s, not found in path", server->priv->command);
453 stopped_cb (server->priv->x_server_process, X_SERVER_LOCAL (server));453 stopped_cb (server->priv->x_server_process, X_SERVER_LOCAL (server));
454 return FALSE;454 return FALSE;
455 }455 }
@@ -496,7 +496,7 @@
496 process_set_command (server->priv->x_server_process, command->str);496 process_set_command (server->priv->x_server_process, command->str);
497 g_string_free (command, TRUE);497 g_string_free (command, TRUE);
498498
499 g_debug ("Launching X Server");499 l_debug (display_server, "Launching X Server");
500500
501 /* If running inside another display then pass through those variables */501 /* If running inside another display then pass through those variables */
502 if (g_getenv ("DISPLAY"))502 if (g_getenv ("DISPLAY"))
@@ -524,7 +524,7 @@
524 result = process_start (server->priv->x_server_process, FALSE);524 result = process_start (server->priv->x_server_process, FALSE);
525525
526 if (result)526 if (result)
527 g_debug ("Waiting for ready signal from X server :%d", x_server_get_display_number (X_SERVER (server)));527 l_debug (display_server, "Waiting for ready signal from X server :%d", x_server_get_display_number (X_SERVER (server)));
528528
529 if (!result)529 if (!result)
530 stopped_cb (server->priv->x_server_process, X_SERVER_LOCAL (server));530 stopped_cb (server->priv->x_server_process, X_SERVER_LOCAL (server));
531531
=== modified file 'src/x-server-xvnc.c'
--- src/x-server-xvnc.c 2013-07-26 02:27:41 +0000
+++ src/x-server-xvnc.c 2013-08-18 23:34:47 +0000
@@ -144,7 +144,7 @@
144144
145 fd = g_open (server->priv->log_file, O_WRONLY | O_CREAT | O_TRUNC, 0600);145 fd = g_open (server->priv->log_file, O_WRONLY | O_CREAT | O_TRUNC, 0600);
146 if (fd < 0)146 if (fd < 0)
147 g_warning ("Failed to open log file %s: %s", server->priv->log_file, g_strerror (errno));147 l_warning (server, "Failed to open log file %s: %s", server->priv->log_file, g_strerror (errno));
148 else148 else
149 {149 {
150 dup2 (fd, STDERR_FILENO);150 dup2 (fd, STDERR_FILENO);
@@ -162,7 +162,7 @@
162 if (signum == SIGUSR1 && !server->priv->got_signal)162 if (signum == SIGUSR1 && !server->priv->got_signal)
163 {163 {
164 server->priv->got_signal = TRUE;164 server->priv->got_signal = TRUE;
165 g_debug ("Got signal from Xvnc server :%d", x_server_get_display_number (X_SERVER (server)));165 l_debug (server, "Got signal from Xvnc server :%d", x_server_get_display_number (X_SERVER (server)));
166166
167 // FIXME: Check return value167 // FIXME: Check return value
168 DISPLAY_SERVER_CLASS (x_server_xvnc_parent_class)->start (DISPLAY_SERVER (server));168 DISPLAY_SERVER_CLASS (x_server_xvnc_parent_class)->start (DISPLAY_SERVER (server));
@@ -172,14 +172,14 @@
172static void172static void
173stopped_cb (Process *process, XServerXVNC *server)173stopped_cb (Process *process, XServerXVNC *server)
174{174{
175 g_debug ("Xvnc server stopped");175 l_debug (server, "Xvnc server stopped");
176176
177 g_object_unref (server->priv->x_server_process);177 g_object_unref (server->priv->x_server_process);
178 server->priv->x_server_process = NULL;178 server->priv->x_server_process = NULL;
179179
180 x_server_local_release_display_number (x_server_get_display_number (X_SERVER (server)));180 x_server_local_release_display_number (x_server_get_display_number (X_SERVER (server)));
181181
182 g_debug ("Removing X server authority %s", server->priv->authority_file);182 l_debug (server, "Removing X server authority %s", server->priv->authority_file);
183183
184 g_unlink (server->priv->authority_file);184 g_unlink (server->priv->authority_file);
185 g_free (server->priv->authority_file);185 g_free (server->priv->authority_file);
@@ -219,14 +219,14 @@
219 filename = g_strdup_printf ("%s.log", display_server_get_name (display_server));219 filename = g_strdup_printf ("%s.log", display_server_get_name (display_server));
220 dir = config_get_string (config_get_instance (), "LightDM", "log-directory");220 dir = config_get_string (config_get_instance (), "LightDM", "log-directory");
221 server->priv->log_file = g_build_filename (dir, filename, NULL);221 server->priv->log_file = g_build_filename (dir, filename, NULL);
222 g_debug ("Logging to %s", server->priv->log_file);222 l_debug (display_server, "Logging to %s", server->priv->log_file);
223 g_free (filename);223 g_free (filename);
224 g_free (dir);224 g_free (dir);
225225
226 absolute_command = get_absolute_command (server->priv->command);226 absolute_command = get_absolute_command (server->priv->command);
227 if (!absolute_command)227 if (!absolute_command)
228 {228 {
229 g_debug ("Can't launch X server %s, not found in path", server->priv->command);229 l_debug (display_server, "Can't launch X server %s, not found in path", server->priv->command);
230 stopped_cb (server->priv->x_server_process, X_SERVER_XVNC (server));230 stopped_cb (server->priv->x_server_process, X_SERVER_XVNC (server));
231 return FALSE;231 return FALSE;
232 }232 }
@@ -241,16 +241,16 @@
241 dir = g_build_filename (run_dir, "root", NULL);241 dir = g_build_filename (run_dir, "root", NULL);
242 g_free (run_dir);242 g_free (run_dir);
243 if (g_mkdir_with_parents (dir, S_IRWXU) < 0)243 if (g_mkdir_with_parents (dir, S_IRWXU) < 0)
244 g_warning ("Failed to make authority directory %s: %s", dir, strerror (errno));244 l_warning (display_server, "Failed to make authority directory %s: %s", dir, strerror (errno));
245245
246 server->priv->authority_file = g_build_filename (dir, x_server_get_address (X_SERVER (server)), NULL);246 server->priv->authority_file = g_build_filename (dir, x_server_get_address (X_SERVER (server)), NULL);
247 g_free (dir);247 g_free (dir);
248248
249 g_debug ("Writing X server authority to %s", server->priv->authority_file);249 l_debug (display_server, "Writing X server authority to %s", server->priv->authority_file);
250250
251 x_authority_write (authority, XAUTH_WRITE_MODE_REPLACE, server->priv->authority_file, &error);251 x_authority_write (authority, XAUTH_WRITE_MODE_REPLACE, server->priv->authority_file, &error);
252 if (error)252 if (error)
253 g_warning ("Failed to write authority: %s", error->message);253 l_warning (display_server, "Failed to write authority: %s", error->message);
254 g_clear_error (&error);254 g_clear_error (&error);
255 255
256 command = g_string_new (absolute_command);256 command = g_string_new (absolute_command);
@@ -267,7 +267,7 @@
267 process_set_command (server->priv->x_server_process, command->str);267 process_set_command (server->priv->x_server_process, command->str);
268 g_string_free (command, TRUE);268 g_string_free (command, TRUE);
269269
270 g_debug ("Launching Xvnc server");270 l_debug (display_server, "Launching Xvnc server");
271271
272 /* Variable required for regression tests */272 /* Variable required for regression tests */
273 if (g_getenv ("LIGHTDM_TEST_ROOT"))273 if (g_getenv ("LIGHTDM_TEST_ROOT"))
@@ -279,7 +279,7 @@
279 result = process_start (server->priv->x_server_process, FALSE);279 result = process_start (server->priv->x_server_process, FALSE);
280280
281 if (result)281 if (result)
282 g_debug ("Waiting for ready signal from Xvnc server :%d", x_server_get_display_number (X_SERVER (server)));282 l_debug (display_server, "Waiting for ready signal from Xvnc server :%d", x_server_get_display_number (X_SERVER (server)));
283283
284 if (!result)284 if (!result)
285 stopped_cb (server->priv->x_server_process, X_SERVER_XVNC (server));285 stopped_cb (server->priv->x_server_process, X_SERVER_XVNC (server));
286286
=== modified file 'src/x-server.c'
--- src/x-server.c 2013-07-30 15:56:44 +0000
+++ src/x-server.c 2013-08-18 23:34:47 +0000
@@ -133,11 +133,11 @@
133 }133 }
134134
135 /* Open connection */ 135 /* Open connection */
136 g_debug ("Connecting to XServer %s", x_server_get_address (server));136 l_debug (server, "Connecting to XServer %s", x_server_get_address (server));
137 server->priv->connection = xcb_connect_to_display_with_auth_info (x_server_get_address (server), auth, NULL);137 server->priv->connection = xcb_connect_to_display_with_auth_info (x_server_get_address (server), auth, NULL);
138 if (xcb_connection_has_error (server->priv->connection))138 if (xcb_connection_has_error (server->priv->connection))
139 {139 {
140 g_debug ("Error connecting to XServer %s", x_server_get_address (server));140 l_debug (server, "Error connecting to XServer %s", x_server_get_address (server));
141 return FALSE;141 return FALSE;
142 }142 }
143143
@@ -161,9 +161,12 @@
161 g_free (t);161 g_free (t);
162162
163 t = g_strdup_printf ("%d", vt);163 t = g_strdup_printf ("%d", vt);
164 l_debug (session, "Setting XDG_VTNR=%s", t);
164 session_set_env (session, "XDG_VTNR", t);165 session_set_env (session, "XDG_VTNR", t);
165 g_free (t);166 g_free (t);
166 }167 }
168 else
169 l_debug (session, "Not setting XDG_VTNR");
167170
168 session_set_env (session, "DISPLAY", x_server_get_address (X_SERVER (display_server)));171 session_set_env (session, "DISPLAY", x_server_get_address (X_SERVER (display_server)));
169 session_set_tty (session, x_server_get_address (X_SERVER (display_server)));172 session_set_tty (session, x_server_get_address (X_SERVER (display_server)));

Subscribers

People subscribed via source and target branches