Merge lp:~ubuntu-multiseat/lightdm/multiseat-logging into lp:lightdm
- multiseat-logging
- Merge into trunk
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 |
Related bugs: |
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
Robert Ancell (robert-ancell) wrote : Posted in a previous version of this proposal | # |
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://
>
> 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.
Robert Ancell (robert-ancell) : Posted in a previous version of this proposal | # |
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
Richard Hansen (rhansen) wrote : Posted in a previous version of this proposal | # |
> FAIL: test-lock-
[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.
Thomi Richards (thomir-deactivatedaccount) : | # |
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...
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
FAILURE: http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1766
http://
Executed test runs:
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1766
http://
Executed test runs:
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1766
http://
Executed test runs:
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1766
http://
Executed test runs:
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:1766
http://
Executed test runs:
SUCCESS: http://
Click here to trigger a rebuild:
http://
Robert Ancell (robert-ancell) : | # |
PS Jenkins bot (ps-jenkins) : | # |
Preview Diff
1 | === modified file 'src/Makefile.am' | |||
2 | --- src/Makefile.am 2013-07-24 23:53:37 +0000 | |||
3 | +++ src/Makefile.am 2013-08-18 23:34:47 +0000 | |||
4 | @@ -18,6 +18,8 @@ | |||
5 | 18 | guest-account.c \ | 18 | guest-account.c \ |
6 | 19 | guest-account.h \ | 19 | guest-account.h \ |
7 | 20 | lightdm.c \ | 20 | lightdm.c \ |
8 | 21 | logger.c \ | ||
9 | 22 | logger.h \ | ||
10 | 21 | login1.c \ | 23 | login1.c \ |
11 | 22 | login1.h \ | 24 | login1.h \ |
12 | 23 | mir-server.c \ | 25 | mir-server.c \ |
13 | 24 | 26 | ||
14 | === modified file 'src/display-server.c' | |||
15 | --- src/display-server.c 2013-07-26 04:50:35 +0000 | |||
16 | +++ src/display-server.c 2013-08-18 23:34:47 +0000 | |||
17 | @@ -32,7 +32,11 @@ | |||
18 | 32 | gboolean stopped; | 32 | gboolean stopped; |
19 | 33 | }; | 33 | }; |
20 | 34 | 34 | ||
22 | 35 | G_DEFINE_TYPE (DisplayServer, display_server, G_TYPE_OBJECT); | 35 | static void display_server_logger_iface_init (LoggerInterface *iface); |
23 | 36 | |||
24 | 37 | G_DEFINE_TYPE_WITH_CODE (DisplayServer, display_server, G_TYPE_OBJECT, | ||
25 | 38 | G_IMPLEMENT_INTERFACE ( | ||
26 | 39 | LOGGER_TYPE, display_server_logger_iface_init)); | ||
27 | 36 | 40 | ||
28 | 37 | void | 41 | void |
29 | 38 | display_server_set_name (DisplayServer *server, const gchar *name) | 42 | display_server_set_name (DisplayServer *server, const gchar *name) |
30 | @@ -176,3 +180,20 @@ | |||
31 | 176 | NULL, | 180 | NULL, |
32 | 177 | G_TYPE_NONE, 0); | 181 | G_TYPE_NONE, 0); |
33 | 178 | } | 182 | } |
34 | 183 | |||
35 | 184 | static gint | ||
36 | 185 | display_server_real_logprefix (Logger *self, gchar *buf, gulong buflen) | ||
37 | 186 | { | ||
38 | 187 | DisplayServer *server = DISPLAY_SERVER (self); | ||
39 | 188 | const gchar *name = display_server_get_name (server); | ||
40 | 189 | if (name) | ||
41 | 190 | return g_snprintf (buf, buflen, "DisplayServer %s: ", name); | ||
42 | 191 | else | ||
43 | 192 | return g_snprintf (buf, buflen, "DisplayServer: "); | ||
44 | 193 | } | ||
45 | 194 | |||
46 | 195 | static void | ||
47 | 196 | display_server_logger_iface_init (LoggerInterface *iface) | ||
48 | 197 | { | ||
49 | 198 | iface->logprefix = &display_server_real_logprefix; | ||
50 | 199 | } | ||
51 | 179 | 200 | ||
52 | === modified file 'src/display-server.h' | |||
53 | --- src/display-server.h 2013-07-26 02:54:55 +0000 | |||
54 | +++ src/display-server.h 2013-08-18 23:34:47 +0000 | |||
55 | @@ -16,6 +16,7 @@ | |||
56 | 16 | 16 | ||
57 | 17 | typedef struct DisplayServer DisplayServer; | 17 | typedef struct DisplayServer DisplayServer; |
58 | 18 | 18 | ||
59 | 19 | #include "logger.h" | ||
60 | 19 | #include "session.h" | 20 | #include "session.h" |
61 | 20 | 21 | ||
62 | 21 | G_BEGIN_DECLS | 22 | G_BEGIN_DECLS |
63 | 22 | 23 | ||
64 | === modified file 'src/greeter.c' | |||
65 | --- src/greeter.c 2013-07-24 23:53:37 +0000 | |||
66 | +++ src/greeter.c 2013-08-18 23:34:47 +0000 | |||
67 | @@ -164,7 +164,7 @@ | |||
68 | 164 | 164 | ||
69 | 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); |
70 | 166 | if (error) | 166 | if (error) |
72 | 167 | g_warning ("Error writing to greeter: %s", error->message); | 167 | l_warning (greeter, "Error writing to greeter: %s", error->message); |
73 | 168 | g_clear_error (&error); | 168 | g_clear_error (&error); |
74 | 169 | g_io_channel_flush (greeter->priv->to_greeter_channel, NULL); | 169 | g_io_channel_flush (greeter->priv->to_greeter_channel, NULL); |
75 | 170 | } | 170 | } |
76 | @@ -225,7 +225,7 @@ | |||
77 | 225 | GHashTableIter iter; | 225 | GHashTableIter iter; |
78 | 226 | gpointer key, value; | 226 | gpointer key, value; |
79 | 227 | 227 | ||
81 | 228 | g_debug ("Greeter connected version=%s", version); | 228 | l_debug (greeter, "Greeter connected version=%s", version); |
82 | 229 | 229 | ||
83 | 230 | length = string_length (VERSION); | 230 | length = string_length (VERSION); |
84 | 231 | g_hash_table_iter_init (&iter, greeter->priv->hints); | 231 | g_hash_table_iter_init (&iter, greeter->priv->hints); |
85 | @@ -260,7 +260,7 @@ | |||
86 | 260 | messages_length = session_get_messages_length (session); | 260 | messages_length = session_get_messages_length (session); |
87 | 261 | 261 | ||
88 | 262 | /* Respond to d-bus query with messages */ | 262 | /* Respond to d-bus query with messages */ |
90 | 263 | g_debug ("Prompt greeter with %d message(s)", messages_length); | 263 | l_debug (greeter, "Prompt greeter with %d message(s)", messages_length); |
91 | 264 | size = int_length () + string_length (session_get_username (session)) + int_length (); | 264 | size = int_length () + string_length (session_get_username (session)) + int_length (); |
92 | 265 | for (i = 0; i < messages_length; i++) | 265 | for (i = 0; i < messages_length; i++) |
93 | 266 | size += int_length () + string_length (messages[i].msg); | 266 | size += int_length () + string_length (messages[i].msg); |
94 | @@ -308,16 +308,16 @@ | |||
95 | 308 | { | 308 | { |
96 | 309 | int result; | 309 | int result; |
97 | 310 | 310 | ||
99 | 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)); |
100 | 312 | 312 | ||
101 | 313 | result = session_get_authentication_result (session); | 313 | result = session_get_authentication_result (session); |
102 | 314 | if (session_get_is_authenticated (session)) | 314 | if (session_get_is_authenticated (session)) |
103 | 315 | { | 315 | { |
104 | 316 | if (session_get_user (session)) | 316 | if (session_get_user (session)) |
106 | 317 | g_debug ("User %s authorized", session_get_username (session)); | 317 | l_debug (greeter, "User %s authorized", session_get_username (session)); |
107 | 318 | else | 318 | else |
108 | 319 | { | 319 | { |
110 | 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)); |
111 | 321 | result = PAM_USER_UNKNOWN; | 321 | result = PAM_USER_UNKNOWN; |
112 | 322 | } | 322 | } |
113 | 323 | } | 323 | } |
114 | @@ -349,11 +349,11 @@ | |||
115 | 349 | 349 | ||
116 | 350 | if (username[0] == '\0') | 350 | if (username[0] == '\0') |
117 | 351 | { | 351 | { |
119 | 352 | g_debug ("Greeter start authentication"); | 352 | l_debug (greeter, "Greeter start authentication"); |
120 | 353 | username = NULL; | 353 | username = NULL; |
121 | 354 | } | 354 | } |
122 | 355 | else | 355 | else |
124 | 356 | g_debug ("Greeter start authentication for %s", username); | 356 | l_debug (greeter, "Greeter start authentication for %s", username); |
125 | 357 | 357 | ||
126 | 358 | reset_session (greeter); | 358 | reset_session (greeter); |
127 | 359 | 359 | ||
128 | @@ -392,13 +392,13 @@ | |||
129 | 392 | static void | 392 | static void |
130 | 393 | handle_login_as_guest (Greeter *greeter, guint32 sequence_number) | 393 | handle_login_as_guest (Greeter *greeter, guint32 sequence_number) |
131 | 394 | { | 394 | { |
133 | 395 | g_debug ("Greeter start authentication for guest account"); | 395 | l_debug (greeter, "Greeter start authentication for guest account"); |
134 | 396 | 396 | ||
135 | 397 | reset_session (greeter); | 397 | reset_session (greeter); |
136 | 398 | 398 | ||
137 | 399 | if (!greeter->priv->allow_guest) | 399 | if (!greeter->priv->allow_guest) |
138 | 400 | { | 400 | { |
140 | 401 | g_debug ("Guest account is disabled"); | 401 | l_debug (greeter, "Guest account is disabled"); |
141 | 402 | send_end_authentication (greeter, sequence_number, "", PAM_USER_UNKNOWN); | 402 | send_end_authentication (greeter, sequence_number, "", PAM_USER_UNKNOWN); |
142 | 403 | return; | 403 | return; |
143 | 404 | } | 404 | } |
144 | @@ -449,11 +449,11 @@ | |||
145 | 449 | 449 | ||
146 | 450 | if (username[0] == '\0') | 450 | if (username[0] == '\0') |
147 | 451 | { | 451 | { |
149 | 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); |
150 | 453 | username = NULL; | 453 | username = NULL; |
151 | 454 | } | 454 | } |
152 | 455 | else | 455 | else |
154 | 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); |
155 | 457 | 457 | ||
156 | 458 | reset_session (greeter); | 458 | reset_session (greeter); |
157 | 459 | 459 | ||
158 | @@ -518,7 +518,7 @@ | |||
159 | 518 | return; | 518 | return; |
160 | 519 | } | 519 | } |
161 | 520 | 520 | ||
163 | 521 | g_debug ("Continue authentication"); | 521 | l_debug (greeter, "Continue authentication"); |
164 | 522 | 522 | ||
165 | 523 | /* Build response */ | 523 | /* Build response */ |
166 | 524 | response = calloc (messages_length, sizeof (struct pam_response)); | 524 | response = calloc (messages_length, sizeof (struct pam_response)); |
167 | @@ -548,7 +548,7 @@ | |||
168 | 548 | if (greeter->priv->authentication_session == NULL) | 548 | if (greeter->priv->authentication_session == NULL) |
169 | 549 | return; | 549 | return; |
170 | 550 | 550 | ||
172 | 551 | g_debug ("Cancel authentication"); | 551 | l_debug (greeter, "Cancel authentication"); |
173 | 552 | reset_session (greeter); | 552 | reset_session (greeter); |
174 | 553 | } | 553 | } |
175 | 554 | 554 | ||
176 | @@ -573,15 +573,15 @@ | |||
177 | 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)) |
178 | 574 | { | 574 | { |
179 | 575 | if (session) | 575 | if (session) |
181 | 576 | g_debug ("Greeter requests session %s", session); | 576 | l_debug (greeter, "Greeter requests session %s", session); |
182 | 577 | else | 577 | else |
184 | 578 | g_debug ("Greeter requests default session"); | 578 | l_debug (greeter, "Greeter requests default session"); |
185 | 579 | greeter->priv->start_session = TRUE; | 579 | greeter->priv->start_session = TRUE; |
186 | 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); |
187 | 581 | } | 581 | } |
188 | 582 | else | 582 | else |
189 | 583 | { | 583 | { |
191 | 584 | g_debug ("Ignoring start session request, user is not authorized"); | 584 | l_debug (greeter, "Ignoring start session request, user is not authorized"); |
192 | 585 | result = FALSE; | 585 | result = FALSE; |
193 | 586 | } | 586 | } |
194 | 587 | 587 | ||
195 | @@ -597,18 +597,18 @@ | |||
196 | 597 | 597 | ||
197 | 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)) |
198 | 599 | { | 599 | { |
200 | 600 | g_debug ("Ignoring set language request, user is not authorized"); | 600 | l_debug (greeter, "Ignoring set language request, user is not authorized"); |
201 | 601 | return; | 601 | return; |
202 | 602 | } | 602 | } |
203 | 603 | 603 | ||
204 | 604 | // FIXME: Could use this | 604 | // FIXME: Could use this |
205 | 605 | if (greeter->priv->guest_account_authenticated) | 605 | if (greeter->priv->guest_account_authenticated) |
206 | 606 | { | 606 | { |
208 | 607 | g_debug ("Ignoring set language request for guest user"); | 607 | l_debug (greeter, "Ignoring set language request for guest user"); |
209 | 608 | return; | 608 | return; |
210 | 609 | } | 609 | } |
211 | 610 | 610 | ||
213 | 611 | g_debug ("Greeter sets language %s", language); | 611 | l_debug (greeter, "Greeter sets language %s", language); |
214 | 612 | user = session_get_user (greeter->priv->authentication_session); | 612 | user = session_get_user (greeter->priv->authentication_session); |
215 | 613 | user_set_language (user, language); | 613 | user_set_language (user, language); |
216 | 614 | } | 614 | } |
217 | @@ -620,7 +620,7 @@ | |||
218 | 620 | guint8 *buffer; | 620 | guint8 *buffer; |
219 | 621 | if (greeter->priv->n_read - *offset < sizeof (guint32)) | 621 | if (greeter->priv->n_read - *offset < sizeof (guint32)) |
220 | 622 | { | 622 | { |
222 | 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); |
223 | 624 | return 0; | 624 | return 0; |
224 | 625 | } | 625 | } |
225 | 626 | buffer = greeter->priv->read_buffer + *offset; | 626 | buffer = greeter->priv->read_buffer + *offset; |
226 | @@ -640,7 +640,7 @@ | |||
227 | 640 | 640 | ||
228 | 641 | if (HEADER_SIZE + payload_length < HEADER_SIZE) | 641 | if (HEADER_SIZE + payload_length < HEADER_SIZE) |
229 | 642 | { | 642 | { |
231 | 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); |
232 | 644 | return HEADER_SIZE; | 644 | return HEADER_SIZE; |
233 | 645 | } | 645 | } |
234 | 646 | 646 | ||
235 | @@ -656,7 +656,7 @@ | |||
236 | 656 | length = read_int (greeter, offset); | 656 | length = read_int (greeter, offset); |
237 | 657 | if (greeter->priv->n_read - *offset < length) | 657 | if (greeter->priv->n_read - *offset < length) |
238 | 658 | { | 658 | { |
240 | 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); |
241 | 660 | return g_strdup (""); | 660 | return g_strdup (""); |
242 | 661 | } | 661 | } |
243 | 662 | 662 | ||
244 | @@ -697,7 +697,7 @@ | |||
245 | 697 | 697 | ||
246 | 698 | if (condition == G_IO_HUP) | 698 | if (condition == G_IO_HUP) |
247 | 699 | { | 699 | { |
249 | 700 | g_debug ("Greeter closed communication channel"); | 700 | l_debug (greeter, "Greeter closed communication channel"); |
250 | 701 | return FALSE; | 701 | return FALSE; |
251 | 702 | } | 702 | } |
252 | 703 | 703 | ||
253 | @@ -715,7 +715,7 @@ | |||
254 | 715 | &n_read, | 715 | &n_read, |
255 | 716 | &error); | 716 | &error); |
256 | 717 | if (error) | 717 | if (error) |
258 | 718 | g_warning ("Error reading from greeter: %s", error->message); | 718 | l_warning (greeter, "Error reading from greeter: %s", error->message); |
259 | 719 | g_clear_error (&error); | 719 | g_clear_error (&error); |
260 | 720 | if (status != G_IO_STATUS_NORMAL) | 720 | if (status != G_IO_STATUS_NORMAL) |
261 | 721 | return TRUE; | 721 | return TRUE; |
262 | @@ -767,7 +767,7 @@ | |||
263 | 767 | max_secrets = (G_MAXUINT32 - 1) / sizeof (gchar *); | 767 | max_secrets = (G_MAXUINT32 - 1) / sizeof (gchar *); |
264 | 768 | if (n_secrets > max_secrets) | 768 | if (n_secrets > max_secrets) |
265 | 769 | { | 769 | { |
267 | 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); |
268 | 771 | return FALSE; | 771 | return FALSE; |
269 | 772 | } | 772 | } |
270 | 773 | secrets = g_malloc (sizeof (gchar *) * (n_secrets + 1)); | 773 | secrets = g_malloc (sizeof (gchar *) * (n_secrets + 1)); |
271 | @@ -793,7 +793,7 @@ | |||
272 | 793 | g_free (language); | 793 | g_free (language); |
273 | 794 | break; | 794 | break; |
274 | 795 | default: | 795 | default: |
276 | 796 | g_warning ("Unknown message from greeter: %d", id); | 796 | l_warning (greeter, "Unknown message from greeter: %d", id); |
277 | 797 | break; | 797 | break; |
278 | 798 | } | 798 | } |
279 | 799 | 799 | ||
280 | 800 | 800 | ||
281 | === modified file 'src/lightdm.c' | |||
282 | --- src/lightdm.c 2013-07-24 03:02:30 +0000 | |||
283 | +++ src/lightdm.c 2013-08-18 23:34:47 +0000 | |||
284 | @@ -1168,8 +1168,9 @@ | |||
285 | 1168 | gchar *config_section = *i; | 1168 | gchar *config_section = *i; |
286 | 1169 | gchar *type; | 1169 | gchar *type; |
287 | 1170 | Seat *seat; | 1170 | Seat *seat; |
288 | 1171 | const gchar *const seatpfx = "Seat:"; | ||
289 | 1171 | 1172 | ||
291 | 1172 | if (!g_str_has_prefix (config_section, "Seat:")) | 1173 | if (!g_str_has_prefix (config_section, seatpfx)) |
292 | 1173 | continue; | 1174 | continue; |
293 | 1174 | 1175 | ||
294 | 1175 | g_debug ("Loading seat %s", config_section); | 1176 | g_debug ("Loading seat %s", config_section); |
295 | @@ -1180,6 +1181,11 @@ | |||
296 | 1180 | g_free (type); | 1181 | g_free (type); |
297 | 1181 | if (seat) | 1182 | if (seat) |
298 | 1182 | { | 1183 | { |
299 | 1184 | const gsize seatpfxlen = strlen(seatpfx); | ||
300 | 1185 | gchar *seatname = config_section + seatpfxlen; | ||
301 | 1186 | |||
302 | 1187 | seat_set_property (seat, "seat-name", seatname); | ||
303 | 1188 | |||
304 | 1183 | set_seat_properties (seat, config_section); | 1189 | set_seat_properties (seat, config_section); |
305 | 1184 | display_manager_add_seat (display_manager, seat); | 1190 | display_manager_add_seat (display_manager, seat); |
306 | 1185 | g_object_unref (seat); | 1191 | g_object_unref (seat); |
307 | 1186 | 1192 | ||
308 | === added file 'src/logger.c' | |||
309 | --- src/logger.c 1970-01-01 00:00:00 +0000 | |||
310 | +++ src/logger.c 2013-08-18 23:34:47 +0000 | |||
311 | @@ -0,0 +1,81 @@ | |||
312 | 1 | #include "logger.h" | ||
313 | 2 | |||
314 | 3 | G_DEFINE_INTERFACE (Logger, logger, G_TYPE_INVALID); | ||
315 | 4 | |||
316 | 5 | static void | ||
317 | 6 | logger_logv_default (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap); | ||
318 | 7 | |||
319 | 8 | static void | ||
320 | 9 | logger_default_init (LoggerInterface *iface) | ||
321 | 10 | { | ||
322 | 11 | iface->logv = &logger_logv_default; | ||
323 | 12 | } | ||
324 | 13 | |||
325 | 14 | gint | ||
326 | 15 | logger_logprefix (Logger *self, gchar *buf, gulong buflen) | ||
327 | 16 | { | ||
328 | 17 | g_return_val_if_fail (IS_LOGGER (self), -1); | ||
329 | 18 | return LOGGER_GET_INTERFACE (self)->logprefix (self, buf, buflen); | ||
330 | 19 | } | ||
331 | 20 | |||
332 | 21 | void | ||
333 | 22 | logger_logv (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap) | ||
334 | 23 | { | ||
335 | 24 | g_return_if_fail (IS_LOGGER (self)); | ||
336 | 25 | LOGGER_GET_INTERFACE (self)->logv (self, log_level, format, ap); | ||
337 | 26 | } | ||
338 | 27 | |||
339 | 28 | void | ||
340 | 29 | logger_logv_default (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap) | ||
341 | 30 | { | ||
342 | 31 | va_list ap_copy; | ||
343 | 32 | gint tmp; | ||
344 | 33 | |||
345 | 34 | /* figure out how long the prefix is */ | ||
346 | 35 | tmp = logger_logprefix (self, NULL, 0); | ||
347 | 36 | if (tmp < 0) | ||
348 | 37 | { | ||
349 | 38 | g_error ("failed to get log prefix"); | ||
350 | 39 | return; | ||
351 | 40 | } | ||
352 | 41 | |||
353 | 42 | /* print the prefix to a variable length array (to avoid malloc) */ | ||
354 | 43 | gchar pfx[tmp + 1]; | ||
355 | 44 | tmp = logger_logprefix (self, pfx, sizeof(pfx)); | ||
356 | 45 | if (tmp < 0) | ||
357 | 46 | { | ||
358 | 47 | g_error ("failed to get log prefix"); | ||
359 | 48 | return; | ||
360 | 49 | } | ||
361 | 50 | |||
362 | 51 | /* figure out how long the formatted message is */ | ||
363 | 52 | va_copy (ap_copy, ap); | ||
364 | 53 | tmp = g_vsnprintf (NULL, 0, format, ap_copy); | ||
365 | 54 | va_end (ap_copy); | ||
366 | 55 | if (tmp < 0) | ||
367 | 56 | { | ||
368 | 57 | g_error ("failed to format log message"); | ||
369 | 58 | return; | ||
370 | 59 | } | ||
371 | 60 | |||
372 | 61 | /* print the message to a variable length array (to avoid malloc) */ | ||
373 | 62 | gchar msg[tmp+1]; | ||
374 | 63 | tmp = g_vsnprintf (msg, sizeof(msg), format, ap); | ||
375 | 64 | if (tmp < 0) | ||
376 | 65 | { | ||
377 | 66 | g_error ("failed to format log message"); | ||
378 | 67 | return; | ||
379 | 68 | } | ||
380 | 69 | |||
381 | 70 | /* log the message with the prefix */ | ||
382 | 71 | g_log (G_LOG_DOMAIN, log_level, "%s%s", pfx, msg); | ||
383 | 72 | } | ||
384 | 73 | |||
385 | 74 | void | ||
386 | 75 | logger_log (Logger *self, GLogLevelFlags log_level, const gchar *format, ...) | ||
387 | 76 | { | ||
388 | 77 | va_list ap; | ||
389 | 78 | va_start (ap, format); | ||
390 | 79 | logger_logv (self, log_level, format, ap); | ||
391 | 80 | va_end (ap); | ||
392 | 81 | } | ||
393 | 0 | 82 | ||
394 | === added file 'src/logger.h' | |||
395 | --- src/logger.h 1970-01-01 00:00:00 +0000 | |||
396 | +++ src/logger.h 2013-08-18 23:34:47 +0000 | |||
397 | @@ -0,0 +1,60 @@ | |||
398 | 1 | #ifndef LOGGER_H_ | ||
399 | 2 | #define LOGGER_H_ | ||
400 | 3 | |||
401 | 4 | #include <glib-object.h> | ||
402 | 5 | |||
403 | 6 | #ifdef __cplusplus | ||
404 | 7 | #include <cstdarg> /* for va_list */ | ||
405 | 8 | #else | ||
406 | 9 | #include <stdarg.h> /* for va_list */ | ||
407 | 10 | #endif | ||
408 | 11 | |||
409 | 12 | G_BEGIN_DECLS | ||
410 | 13 | |||
411 | 14 | #define LOGGER_TYPE (logger_get_type ()) | ||
412 | 15 | #define LOGGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LOGGER_TYPE, Logger)) | ||
413 | 16 | #define IS_LOGGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LOGGER_TYPE)) | ||
414 | 17 | #define LOGGER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), LOGGER_TYPE, LoggerInterface)) | ||
415 | 18 | |||
416 | 19 | typedef struct Logger Logger; | ||
417 | 20 | |||
418 | 21 | typedef struct { | ||
419 | 22 | GTypeInterface parent; | ||
420 | 23 | |||
421 | 24 | gint (*logprefix) (Logger *self, gchar *buf, gulong buflen); | ||
422 | 25 | void (*logv) (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap); | ||
423 | 26 | } LoggerInterface; | ||
424 | 27 | |||
425 | 28 | GType logger_get_type (void); | ||
426 | 29 | |||
427 | 30 | /*! | ||
428 | 31 | * \brief instruct \c self to generate a log message prefix | ||
429 | 32 | * | ||
430 | 33 | * the semantics of the \c buf and \c buflen arguments and the return | ||
431 | 34 | * value are the same as g_snprintf() | ||
432 | 35 | * | ||
433 | 36 | * there is no default implementation | ||
434 | 37 | */ | ||
435 | 38 | gint logger_logprefix (Logger *self, gchar *buf, gulong buflen); | ||
436 | 39 | |||
437 | 40 | /*! | ||
438 | 41 | * \brief instruct \c self to log the given message | ||
439 | 42 | * | ||
440 | 43 | * the default implementation prefixes the log message with the | ||
441 | 44 | * output of logger_logprefix() and then passes the result to | ||
442 | 45 | * g_log() | ||
443 | 46 | */ | ||
444 | 47 | void logger_logv (Logger *self, GLogLevelFlags log_level, const gchar *format, va_list ap); | ||
445 | 48 | |||
446 | 49 | /*! \brief convenience wrapper around \c logger_logv() */ | ||
447 | 50 | void logger_log (Logger *self, GLogLevelFlags log_level, const gchar *format, ...); | ||
448 | 51 | |||
449 | 52 | /* convenience wrappers around logger_log() */ | ||
450 | 53 | #define l_debug(self, ...) \ | ||
451 | 54 | logger_log (LOGGER (self), G_LOG_LEVEL_DEBUG, __VA_ARGS__) | ||
452 | 55 | #define l_warning(self, ...) \ | ||
453 | 56 | logger_log (LOGGER (self), G_LOG_LEVEL_WARNING, __VA_ARGS__) | ||
454 | 57 | |||
455 | 58 | G_END_DECLS | ||
456 | 59 | |||
457 | 60 | #endif /* !LOGGER_H_ */ | ||
458 | 0 | 61 | ||
459 | === modified file 'src/seat-unity.c' | |||
460 | --- src/seat-unity.c 2013-08-14 20:14:01 +0000 | |||
461 | +++ src/seat-unity.c 2013-08-18 23:34:47 +0000 | |||
462 | @@ -108,13 +108,13 @@ | |||
463 | 108 | /* If stopped before it was ready, then revert to VT mode */ | 108 | /* If stopped before it was ready, then revert to VT mode */ |
464 | 109 | if (!seat->priv->compositor_ready) | 109 | if (!seat->priv->compositor_ready) |
465 | 110 | { | 110 | { |
467 | 111 | g_debug ("Compositor failed to start, switching to VT mode"); | 111 | l_debug (seat, "Compositor failed to start, switching to VT mode"); |
468 | 112 | seat->priv->use_vt_switching = TRUE; | 112 | seat->priv->use_vt_switching = TRUE; |
469 | 113 | SEAT_CLASS (seat_unity_parent_class)->start (SEAT (seat)); | 113 | SEAT_CLASS (seat_unity_parent_class)->start (SEAT (seat)); |
470 | 114 | return; | 114 | return; |
471 | 115 | } | 115 | } |
472 | 116 | 116 | ||
474 | 117 | g_debug ("Stopping Unity seat, compositor terminated"); | 117 | l_debug (seat, "Stopping Unity seat, compositor terminated"); |
475 | 118 | 118 | ||
476 | 119 | seat_stop (SEAT (seat)); | 119 | seat_stop (SEAT (seat)); |
477 | 120 | } | 120 | } |
478 | @@ -136,7 +136,7 @@ | |||
479 | 136 | 136 | ||
480 | 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); |
481 | 138 | if (fd < 0) | 138 | if (fd < 0) |
483 | 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)); |
484 | 140 | else | 140 | else |
485 | 141 | { | 141 | { |
486 | 142 | dup2 (fd, STDOUT_FILENO); | 142 | dup2 (fd, STDOUT_FILENO); |
487 | @@ -161,7 +161,7 @@ | |||
488 | 161 | 161 | ||
489 | 162 | errno = 0; | 162 | errno = 0; |
490 | 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) |
492 | 164 | g_warning ("Failed to write to compositor: %s", strerror (errno)); | 164 | l_warning (seat, "Failed to write to compositor: %s", strerror (errno)); |
493 | 165 | } | 165 | } |
494 | 166 | 166 | ||
495 | 167 | static gboolean | 167 | static gboolean |
496 | @@ -174,7 +174,7 @@ | |||
497 | 174 | 174 | ||
498 | 175 | if (condition == G_IO_HUP) | 175 | if (condition == G_IO_HUP) |
499 | 176 | { | 176 | { |
501 | 177 | g_debug ("Compositor closed communication channel"); | 177 | l_debug (seat, "Compositor closed communication channel"); |
502 | 178 | return FALSE; | 178 | return FALSE; |
503 | 179 | } | 179 | } |
504 | 180 | 180 | ||
505 | @@ -204,7 +204,7 @@ | |||
506 | 204 | &n_read, | 204 | &n_read, |
507 | 205 | &error); | 205 | &error); |
508 | 206 | if (error) | 206 | if (error) |
510 | 207 | g_warning ("Failed to read from compositor: %s", error->message); | 207 | l_warning (seat, "Failed to read from compositor: %s", error->message); |
511 | 208 | if (status != G_IO_STATUS_NORMAL) | 208 | if (status != G_IO_STATUS_NORMAL) |
512 | 209 | return TRUE; | 209 | return TRUE; |
513 | 210 | g_clear_error (&error); | 210 | g_clear_error (&error); |
514 | @@ -225,28 +225,28 @@ | |||
515 | 225 | switch (id) | 225 | switch (id) |
516 | 226 | { | 226 | { |
517 | 227 | case USC_MESSAGE_PING: | 227 | case USC_MESSAGE_PING: |
519 | 228 | g_debug ("PING!"); | 228 | l_debug (seat, "PING!"); |
520 | 229 | write_message (seat, USC_MESSAGE_PONG, NULL, 0); | 229 | write_message (seat, USC_MESSAGE_PONG, NULL, 0); |
521 | 230 | break; | 230 | break; |
522 | 231 | case USC_MESSAGE_PONG: | 231 | case USC_MESSAGE_PONG: |
524 | 232 | g_debug ("PONG!"); | 232 | l_debug (seat, "PONG!"); |
525 | 233 | break; | 233 | break; |
526 | 234 | case USC_MESSAGE_READY: | 234 | case USC_MESSAGE_READY: |
528 | 235 | g_debug ("READY"); | 235 | l_debug (seat, "READY"); |
529 | 236 | if (!seat->priv->compositor_ready) | 236 | if (!seat->priv->compositor_ready) |
530 | 237 | { | 237 | { |
531 | 238 | seat->priv->compositor_ready = TRUE; | 238 | seat->priv->compositor_ready = TRUE; |
533 | 239 | g_debug ("Compositor ready"); | 239 | l_debug (seat, "Compositor ready"); |
534 | 240 | g_source_remove (seat->priv->compositor_timeout); | 240 | g_source_remove (seat->priv->compositor_timeout); |
535 | 241 | seat->priv->compositor_timeout = 0; | 241 | seat->priv->compositor_timeout = 0; |
536 | 242 | SEAT_CLASS (seat_unity_parent_class)->start (SEAT (seat)); | 242 | SEAT_CLASS (seat_unity_parent_class)->start (SEAT (seat)); |
537 | 243 | } | 243 | } |
538 | 244 | break; | 244 | break; |
539 | 245 | case USC_MESSAGE_SESSION_CONNECTED: | 245 | case USC_MESSAGE_SESSION_CONNECTED: |
541 | 246 | g_debug ("SESSION CONNECTED"); | 246 | l_debug (seat, "SESSION CONNECTED"); |
542 | 247 | break; | 247 | break; |
543 | 248 | default: | 248 | default: |
545 | 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); |
546 | 250 | break; | 250 | break; |
547 | 251 | } | 251 | } |
548 | 252 | 252 | ||
549 | @@ -310,7 +310,7 @@ | |||
550 | 310 | plymouth_quit (TRUE); | 310 | plymouth_quit (TRUE); |
551 | 311 | } | 311 | } |
552 | 312 | else | 312 | else |
554 | 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 ()); |
555 | 314 | } | 314 | } |
556 | 315 | if (plymouth_get_is_active ()) | 315 | if (plymouth_get_is_active ()) |
557 | 316 | plymouth_quit (FALSE); | 316 | plymouth_quit (FALSE); |
558 | @@ -318,7 +318,7 @@ | |||
559 | 318 | SEAT_UNITY (seat)->priv->vt = vt_get_unused (); | 318 | SEAT_UNITY (seat)->priv->vt = vt_get_unused (); |
560 | 319 | if (SEAT_UNITY (seat)->priv->vt < 0) | 319 | if (SEAT_UNITY (seat)->priv->vt < 0) |
561 | 320 | { | 320 | { |
563 | 321 | g_debug ("Failed to get a VT to run on"); | 321 | l_debug (seat, "Failed to get a VT to run on"); |
564 | 322 | return FALSE; | 322 | return FALSE; |
565 | 323 | } | 323 | } |
566 | 324 | vt_ref (SEAT_UNITY (seat)->priv->vt); | 324 | vt_ref (SEAT_UNITY (seat)->priv->vt); |
567 | @@ -326,7 +326,7 @@ | |||
568 | 326 | /* Create pipes to talk to compositor */ | 326 | /* Create pipes to talk to compositor */ |
569 | 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) |
570 | 328 | { | 328 | { |
572 | 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)); |
573 | 330 | return FALSE; | 330 | return FALSE; |
574 | 331 | } | 331 | } |
575 | 332 | 332 | ||
576 | @@ -341,7 +341,7 @@ | |||
577 | 341 | /* Setup logging */ | 341 | /* Setup logging */ |
578 | 342 | dir = config_get_string (config_get_instance (), "LightDM", "log-directory"); | 342 | dir = config_get_string (config_get_instance (), "LightDM", "log-directory"); |
579 | 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); |
581 | 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); |
582 | 345 | g_free (dir); | 345 | g_free (dir); |
583 | 346 | 346 | ||
584 | 347 | SEAT_UNITY (seat)->priv->mir_socket_filename = g_strdup ("/tmp/mir_socket"); // FIXME: Use this socket by default as XMir is hardcoded to this | 347 | SEAT_UNITY (seat)->priv->mir_socket_filename = g_strdup ("/tmp/mir_socket"); // FIXME: Use this socket by default as XMir is hardcoded to this |
585 | @@ -372,7 +372,7 @@ | |||
586 | 372 | timeout = seat_get_integer_property (seat, "unity-compositor-timeout"); | 372 | timeout = seat_get_integer_property (seat, "unity-compositor-timeout"); |
587 | 373 | if (timeout <= 0) | 373 | if (timeout <= 0) |
588 | 374 | timeout = 60; | 374 | timeout = 60; |
590 | 375 | g_debug ("Waiting for system compositor for %ds", timeout); | 375 | l_debug (seat, "Waiting for system compositor for %ds", timeout); |
591 | 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); |
592 | 377 | 377 | ||
593 | 378 | return TRUE; | 378 | return TRUE; |
594 | @@ -386,7 +386,7 @@ | |||
595 | 386 | gboolean allow_tcp; | 386 | gboolean allow_tcp; |
596 | 387 | gint port = 0; | 387 | gint port = 0; |
597 | 388 | 388 | ||
599 | 389 | g_debug ("Starting X server on Unity compositor"); | 389 | l_debug (seat, "Starting X server on Unity compositor"); |
600 | 390 | 390 | ||
601 | 391 | x_server = x_server_local_new (); | 391 | x_server = x_server_local_new (); |
602 | 392 | 392 | ||
603 | @@ -441,7 +441,7 @@ | |||
604 | 441 | keys = g_key_file_new (); | 441 | keys = g_key_file_new (); |
605 | 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); |
606 | 443 | if (error) | 443 | if (error) |
608 | 444 | g_debug ("Error getting key %s", error->message); | 444 | l_debug (seat, "Error getting key %s", error->message); |
609 | 445 | g_clear_error (&error); | 445 | g_clear_error (&error); |
610 | 446 | 446 | ||
611 | 447 | if (result) | 447 | if (result) |
612 | @@ -451,7 +451,7 @@ | |||
613 | 451 | if (g_key_file_has_key (keys, "keyring", key_name, NULL)) | 451 | if (g_key_file_has_key (keys, "keyring", key_name, NULL)) |
614 | 452 | key = g_key_file_get_string (keys, "keyring", key_name, NULL); | 452 | key = g_key_file_get_string (keys, "keyring", key_name, NULL); |
615 | 453 | else | 453 | else |
617 | 454 | g_debug ("Key %s not defined", key_name); | 454 | l_debug (seat, "Key %s not defined", key_name); |
618 | 455 | 455 | ||
619 | 456 | if (key) | 456 | if (key) |
620 | 457 | x_server_local_set_xdmcp_key (x_server, key); | 457 | x_server_local_set_xdmcp_key (x_server, key); |
621 | @@ -498,7 +498,7 @@ | |||
622 | 498 | return create_mir_server (seat); | 498 | return create_mir_server (seat); |
623 | 499 | else | 499 | else |
624 | 500 | { | 500 | { |
626 | 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); |
627 | 502 | return NULL; | 502 | return NULL; |
628 | 503 | } | 503 | } |
629 | 504 | } | 504 | } |
630 | @@ -507,15 +507,21 @@ | |||
631 | 507 | seat_unity_create_greeter_session (Seat *seat) | 507 | seat_unity_create_greeter_session (Seat *seat) |
632 | 508 | { | 508 | { |
633 | 509 | Greeter *greeter_session; | 509 | Greeter *greeter_session; |
634 | 510 | const gchar *xdg_seat; | ||
635 | 510 | 511 | ||
636 | 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); |
638 | 512 | session_set_env (SESSION (greeter_session), "XDG_SEAT", "seat0"); | 513 | xdg_seat = "seat0"; |
639 | 514 | l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat); | ||
640 | 515 | session_set_env (SESSION (greeter_session), "XDG_SEAT", xdg_seat); | ||
641 | 513 | if (!SEAT_UNITY (seat)->priv->use_vt_switching) | 516 | if (!SEAT_UNITY (seat)->priv->use_vt_switching) |
642 | 514 | { | 517 | { |
643 | 515 | gchar *value = g_strdup_printf ("%d", SEAT_UNITY (seat)->priv->vt); | 518 | gchar *value = g_strdup_printf ("%d", SEAT_UNITY (seat)->priv->vt); |
644 | 519 | l_debug (seat, "Setting XDG_VTNR=%s", value); | ||
645 | 516 | session_set_env (SESSION (greeter_session), "XDG_VTNR", value); | 520 | session_set_env (SESSION (greeter_session), "XDG_VTNR", value); |
646 | 517 | g_free (value); | 521 | g_free (value); |
647 | 518 | } | 522 | } |
648 | 523 | else | ||
649 | 524 | l_debug (seat, "Not setting XDG_VTNR"); | ||
650 | 519 | 525 | ||
651 | 520 | return greeter_session; | 526 | return greeter_session; |
652 | 521 | } | 527 | } |
653 | @@ -524,15 +530,21 @@ | |||
654 | 524 | seat_unity_create_session (Seat *seat) | 530 | seat_unity_create_session (Seat *seat) |
655 | 525 | { | 531 | { |
656 | 526 | Session *session; | 532 | Session *session; |
657 | 533 | const gchar *xdg_seat; | ||
658 | 527 | 534 | ||
659 | 528 | session = SEAT_CLASS (seat_unity_parent_class)->create_session (seat); | 535 | session = SEAT_CLASS (seat_unity_parent_class)->create_session (seat); |
661 | 529 | session_set_env (session, "XDG_SEAT", "seat0"); | 536 | xdg_seat = "seat0"; |
662 | 537 | l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat); | ||
663 | 538 | session_set_env (session, "XDG_SEAT", xdg_seat); | ||
664 | 530 | if (!SEAT_UNITY (seat)->priv->use_vt_switching) | 539 | if (!SEAT_UNITY (seat)->priv->use_vt_switching) |
665 | 531 | { | 540 | { |
666 | 532 | gchar *value = g_strdup_printf ("%d", SEAT_UNITY (seat)->priv->vt); | 541 | gchar *value = g_strdup_printf ("%d", SEAT_UNITY (seat)->priv->vt); |
667 | 542 | l_debug (seat, "Setting XDG_VTNR=%s", value); | ||
668 | 533 | session_set_env (SESSION (session), "XDG_VTNR", value); | 543 | session_set_env (SESSION (session), "XDG_VTNR", value); |
669 | 534 | g_free (value); | 544 | g_free (value); |
670 | 535 | } | 545 | } |
671 | 546 | else | ||
672 | 547 | l_debug (seat, "Not setting XDG_VTNR"); | ||
673 | 536 | 548 | ||
674 | 537 | return session; | 549 | return session; |
675 | 538 | } | 550 | } |
676 | @@ -571,11 +583,11 @@ | |||
677 | 571 | 583 | ||
678 | 572 | if (id) | 584 | if (id) |
679 | 573 | { | 585 | { |
681 | 574 | g_debug ("Switching to Mir session %s", id); | 586 | l_debug (seat, "Switching to Mir session %s", id); |
682 | 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)); |
683 | 576 | } | 588 | } |
684 | 577 | else | 589 | else |
686 | 578 | g_warning ("Failed to work out session ID"); | 590 | l_warning (seat, "Failed to work out session ID"); |
687 | 579 | } | 591 | } |
688 | 580 | 592 | ||
689 | 581 | SEAT_CLASS (seat_unity_parent_class)->set_active_session (seat, session); | 593 | SEAT_CLASS (seat_unity_parent_class)->set_active_session (seat, session); |
690 | 582 | 594 | ||
691 | === modified file 'src/seat-xlocal.c' | |||
692 | --- src/seat-xlocal.c 2013-07-26 04:52:07 +0000 | |||
693 | +++ src/seat-xlocal.c 2013-08-18 23:34:47 +0000 | |||
694 | @@ -69,9 +69,9 @@ | |||
695 | 69 | gint vt = -1, port = 0; | 69 | gint vt = -1, port = 0; |
696 | 70 | 70 | ||
697 | 71 | if (vt > 0) | 71 | if (vt > 0) |
699 | 72 | g_debug ("Starting local X display on VT %d", vt); | 72 | l_debug (seat, "Starting local X display on VT %d", vt); |
700 | 73 | else | 73 | else |
702 | 74 | g_debug ("Starting local X display"); | 74 | l_debug (seat, "Starting local X display"); |
703 | 75 | 75 | ||
704 | 76 | x_server = x_server_local_new (); | 76 | x_server = x_server_local_new (); |
705 | 77 | 77 | ||
706 | @@ -95,7 +95,7 @@ | |||
707 | 95 | plymouth_deactivate (); | 95 | plymouth_deactivate (); |
708 | 96 | } | 96 | } |
709 | 97 | else | 97 | else |
711 | 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 ()); |
712 | 99 | } | 99 | } |
713 | 100 | if (plymouth_get_is_active ()) | 100 | if (plymouth_get_is_active ()) |
714 | 101 | plymouth_quit (FALSE); | 101 | plymouth_quit (FALSE); |
715 | @@ -138,7 +138,7 @@ | |||
716 | 138 | keys = g_key_file_new (); | 138 | keys = g_key_file_new (); |
717 | 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); |
718 | 140 | if (error) | 140 | if (error) |
720 | 141 | g_debug ("Error getting key %s", error->message); | 141 | l_debug (seat, "Error getting key %s", error->message); |
721 | 142 | g_clear_error (&error); | 142 | g_clear_error (&error); |
722 | 143 | 143 | ||
723 | 144 | if (result) | 144 | if (result) |
724 | @@ -148,7 +148,7 @@ | |||
725 | 148 | if (g_key_file_has_key (keys, "keyring", key_name, NULL)) | 148 | if (g_key_file_has_key (keys, "keyring", key_name, NULL)) |
726 | 149 | key = g_key_file_get_string (keys, "keyring", key_name, NULL); | 149 | key = g_key_file_get_string (keys, "keyring", key_name, NULL); |
727 | 150 | else | 150 | else |
729 | 151 | g_debug ("Key %s not defined", key_name); | 151 | l_debug (seat, "Key %s not defined", key_name); |
730 | 152 | 152 | ||
731 | 153 | if (key) | 153 | if (key) |
732 | 154 | x_server_local_set_xdmcp_key (x_server, key); | 154 | x_server_local_set_xdmcp_key (x_server, key); |
733 | @@ -166,9 +166,12 @@ | |||
734 | 166 | seat_xlocal_create_greeter_session (Seat *seat) | 166 | seat_xlocal_create_greeter_session (Seat *seat) |
735 | 167 | { | 167 | { |
736 | 168 | Greeter *greeter_session; | 168 | Greeter *greeter_session; |
737 | 169 | const gchar *xdg_seat; | ||
738 | 169 | 170 | ||
739 | 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); |
741 | 171 | session_set_env (SESSION (greeter_session), "XDG_SEAT", "seat0"); | 172 | xdg_seat = "seat0"; |
742 | 173 | l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat); | ||
743 | 174 | session_set_env (SESSION (greeter_session), "XDG_SEAT", xdg_seat); | ||
744 | 172 | 175 | ||
745 | 173 | return greeter_session; | 176 | return greeter_session; |
746 | 174 | } | 177 | } |
747 | @@ -177,9 +180,12 @@ | |||
748 | 177 | seat_xlocal_create_session (Seat *seat) | 180 | seat_xlocal_create_session (Seat *seat) |
749 | 178 | { | 181 | { |
750 | 179 | Session *session; | 182 | Session *session; |
751 | 183 | const gchar *xdg_seat; | ||
752 | 180 | 184 | ||
753 | 181 | session = SEAT_CLASS (seat_xlocal_parent_class)->create_session (seat); | 185 | session = SEAT_CLASS (seat_xlocal_parent_class)->create_session (seat); |
755 | 182 | session_set_env (SESSION (session), "XDG_SEAT", "seat0"); | 186 | xdg_seat = "seat0"; |
756 | 187 | l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat); | ||
757 | 188 | session_set_env (SESSION (session), "XDG_SEAT", xdg_seat); | ||
758 | 183 | 189 | ||
759 | 184 | return session; | 190 | return session; |
760 | 185 | } | 191 | } |
761 | 186 | 192 | ||
762 | === modified file 'src/seat-xremote.c' | |||
763 | --- src/seat-xremote.c 2013-07-24 23:53:37 +0000 | |||
764 | +++ src/seat-xremote.c 2013-08-18 23:34:47 +0000 | |||
765 | @@ -33,7 +33,7 @@ | |||
766 | 33 | 33 | ||
767 | 34 | if (strcmp (session_type, "x") != 0) | 34 | if (strcmp (session_type, "x") != 0) |
768 | 35 | { | 35 | { |
770 | 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); |
771 | 37 | return NULL; | 37 | return NULL; |
772 | 38 | } | 38 | } |
773 | 39 | 39 | ||
774 | @@ -42,7 +42,7 @@ | |||
775 | 42 | hostname = "localhost"; | 42 | hostname = "localhost"; |
776 | 43 | number = seat_get_integer_property (seat, "xserver-display-number"); | 43 | number = seat_get_integer_property (seat, "xserver-display-number"); |
777 | 44 | 44 | ||
779 | 45 | g_debug ("Starting remote X display %s:%d", hostname, number); | 45 | l_debug (seat, "Starting remote X display %s:%d", hostname, number); |
780 | 46 | 46 | ||
781 | 47 | x_server = x_server_remote_new (hostname, number, NULL); | 47 | x_server = x_server_remote_new (hostname, number, NULL); |
782 | 48 | 48 | ||
783 | @@ -53,9 +53,12 @@ | |||
784 | 53 | seat_xremote_create_greeter_session (Seat *seat) | 53 | seat_xremote_create_greeter_session (Seat *seat) |
785 | 54 | { | 54 | { |
786 | 55 | Greeter *greeter_session; | 55 | Greeter *greeter_session; |
787 | 56 | const gchar *xdg_seat; | ||
788 | 56 | 57 | ||
789 | 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); |
791 | 58 | session_set_env (SESSION (greeter_session), "XDG_SEAT", "seat0"); | 59 | xdg_seat = "seat0"; |
792 | 60 | l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat); | ||
793 | 61 | session_set_env (SESSION (greeter_session), "XDG_SEAT", xdg_seat); | ||
794 | 59 | 62 | ||
795 | 60 | return greeter_session; | 63 | return greeter_session; |
796 | 61 | } | 64 | } |
797 | @@ -64,9 +67,12 @@ | |||
798 | 64 | seat_xremote_create_session (Seat *seat) | 67 | seat_xremote_create_session (Seat *seat) |
799 | 65 | { | 68 | { |
800 | 66 | Session *session; | 69 | Session *session; |
801 | 70 | const gchar *xdg_seat; | ||
802 | 67 | 71 | ||
803 | 68 | session = SEAT_CLASS (seat_xremote_parent_class)->create_session (seat); | 72 | session = SEAT_CLASS (seat_xremote_parent_class)->create_session (seat); |
805 | 69 | session_set_env (SESSION (session), "XDG_SEAT", "seat0"); | 73 | xdg_seat = "seat0"; |
806 | 74 | l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat); | ||
807 | 75 | session_set_env (SESSION (session), "XDG_SEAT", xdg_seat); | ||
808 | 70 | 76 | ||
809 | 71 | return session; | 77 | return session; |
810 | 72 | } | 78 | } |
811 | 73 | 79 | ||
812 | === modified file 'src/seat.c' | |||
813 | --- src/seat.c 2013-08-08 10:10:19 +0000 | |||
814 | +++ src/seat.c 2013-08-18 23:34:47 +0000 | |||
815 | @@ -66,7 +66,11 @@ | |||
816 | 66 | #define USER_SERVICE "lightdm" | 66 | #define USER_SERVICE "lightdm" |
817 | 67 | #define AUTOLOGIN_SERVICE "lightdm-autologin" | 67 | #define AUTOLOGIN_SERVICE "lightdm-autologin" |
818 | 68 | 68 | ||
820 | 69 | G_DEFINE_TYPE (Seat, seat, G_TYPE_OBJECT); | 69 | static void seat_logger_iface_init (LoggerInterface *iface); |
821 | 70 | |||
822 | 71 | G_DEFINE_TYPE_WITH_CODE (Seat, seat, G_TYPE_OBJECT, | ||
823 | 72 | G_IMPLEMENT_INTERFACE ( | ||
824 | 73 | LOGGER_TYPE, seat_logger_iface_init)); | ||
825 | 70 | 74 | ||
826 | 71 | typedef struct | 75 | typedef struct |
827 | 72 | { | 76 | { |
828 | @@ -198,7 +202,7 @@ | |||
829 | 198 | 202 | ||
830 | 199 | if (IS_GREETER (s)) | 203 | if (IS_GREETER (s)) |
831 | 200 | { | 204 | { |
833 | 201 | g_debug ("Stopping greeter"); | 205 | l_debug (seat, "Stopping greeter"); |
834 | 202 | session_stop (s); | 206 | session_stop (s); |
835 | 203 | } | 207 | } |
836 | 204 | } | 208 | } |
837 | @@ -277,7 +281,7 @@ | |||
838 | 277 | exit_status = process_get_exit_status (script); | 281 | exit_status = process_get_exit_status (script); |
839 | 278 | if (WIFEXITED (exit_status)) | 282 | if (WIFEXITED (exit_status)) |
840 | 279 | { | 283 | { |
842 | 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)); |
843 | 281 | result = WEXITSTATUS (exit_status) == EXIT_SUCCESS; | 285 | result = WEXITSTATUS (exit_status) == EXIT_SUCCESS; |
844 | 282 | } | 286 | } |
845 | 283 | } | 287 | } |
846 | @@ -315,7 +319,7 @@ | |||
847 | 315 | g_list_length (seat->priv->sessions) == 0) | 319 | g_list_length (seat->priv->sessions) == 0) |
848 | 316 | { | 320 | { |
849 | 317 | seat->priv->stopped = TRUE; | 321 | seat->priv->stopped = TRUE; |
851 | 318 | g_debug ("Seat stopped"); | 322 | l_debug (seat, "Stopped"); |
852 | 319 | g_signal_emit (seat, signals[STOPPED], 0); | 323 | g_signal_emit (seat, signals[STOPPED], 0); |
853 | 320 | } | 324 | } |
854 | 321 | } | 325 | } |
855 | @@ -332,7 +336,7 @@ | |||
856 | 332 | GList *list, *link; | 336 | GList *list, *link; |
857 | 333 | Session *active_session; | 337 | Session *active_session; |
858 | 334 | 338 | ||
860 | 335 | g_debug ("Display server stopped"); | 339 | l_debug (seat, "Display server stopped"); |
861 | 336 | 340 | ||
862 | 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); |
863 | 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); |
864 | @@ -360,11 +364,11 @@ | |||
865 | 360 | !session_get_is_started (session) && | 364 | !session_get_is_started (session) && |
866 | 361 | g_list_length (seat->priv->display_servers) == 0) | 365 | g_list_length (seat->priv->display_servers) == 0) |
867 | 362 | { | 366 | { |
869 | 363 | g_debug ("Stopping seat, greeter display server failed to start"); | 367 | l_debug (seat, "Stopping; greeter display server failed to start"); |
870 | 364 | seat_stop (seat); | 368 | seat_stop (seat); |
871 | 365 | } | 369 | } |
872 | 366 | 370 | ||
874 | 367 | g_debug ("Stopping session"); | 371 | l_debug (seat, "Stopping session"); |
875 | 368 | session_stop (session); | 372 | session_stop (session); |
876 | 369 | } | 373 | } |
877 | 370 | g_list_free_full (list, g_object_unref); | 374 | g_list_free_full (list, g_object_unref); |
878 | @@ -375,7 +379,7 @@ | |||
879 | 375 | active_session = seat_get_active_session (seat); | 379 | active_session = seat_get_active_session (seat); |
880 | 376 | if (!active_session || session_get_display_server (active_session) == display_server) | 380 | if (!active_session || session_get_display_server (active_session) == display_server) |
881 | 377 | { | 381 | { |
883 | 378 | g_debug ("Active display server stopped, starting greeter"); | 382 | l_debug (seat, "Active display server stopped, starting greeter"); |
884 | 379 | seat_switch_to_greeter (seat); | 383 | seat_switch_to_greeter (seat); |
885 | 380 | } | 384 | } |
886 | 381 | } | 385 | } |
887 | @@ -412,7 +416,7 @@ | |||
888 | 412 | display_server = create_display_server (seat, session_get_session_type (session)); | 416 | display_server = create_display_server (seat, session_get_session_type (session)); |
889 | 413 | if (!display_server_start (display_server)) | 417 | if (!display_server_start (display_server)) |
890 | 414 | { | 418 | { |
892 | 415 | g_debug ("Failed to start display server for greeter"); | 419 | l_debug (seat, "Failed to start display server for greeter"); |
893 | 416 | seat_stop (seat); | 420 | seat_stop (seat); |
894 | 417 | } | 421 | } |
895 | 418 | 422 | ||
896 | @@ -447,12 +451,12 @@ | |||
897 | 447 | 451 | ||
898 | 448 | if (IS_GREETER (session)) | 452 | if (IS_GREETER (session)) |
899 | 449 | { | 453 | { |
901 | 450 | g_debug ("Failed to start greeter"); | 454 | l_debug (seat, "Failed to start greeter"); |
902 | 451 | display_server_stop (session_get_display_server (session)); | 455 | display_server_stop (session_get_display_server (session)); |
903 | 452 | return; | 456 | return; |
904 | 453 | } | 457 | } |
905 | 454 | 458 | ||
907 | 455 | g_debug ("Failed to start session, starting greeter"); | 459 | l_debug (seat, "Failed to start session, starting greeter"); |
908 | 456 | switch_to_greeter_from_failed_session (seat, session); | 460 | switch_to_greeter_from_failed_session (seat, session); |
909 | 457 | } | 461 | } |
910 | 458 | 462 | ||
911 | @@ -467,7 +471,7 @@ | |||
912 | 467 | script = seat_get_string_property (seat, "session-setup-script"); | 471 | script = seat_get_string_property (seat, "session-setup-script"); |
913 | 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)) |
914 | 469 | { | 473 | { |
916 | 470 | g_debug ("Switching to greeter due to failed setup script"); | 474 | l_debug (seat, "Switching to greeter due to failed setup script"); |
917 | 471 | switch_to_greeter_from_failed_session (seat, session); | 475 | switch_to_greeter_from_failed_session (seat, session); |
918 | 472 | return; | 476 | return; |
919 | 473 | } | 477 | } |
920 | @@ -495,17 +499,17 @@ | |||
921 | 495 | { | 499 | { |
922 | 496 | if (session_get_is_authenticated (session)) | 500 | if (session_get_is_authenticated (session)) |
923 | 497 | { | 501 | { |
925 | 498 | g_debug ("Session authenticated, running command"); | 502 | l_debug (seat, "Session authenticated, running command"); |
926 | 499 | run_session (seat, session); | 503 | run_session (seat, session); |
927 | 500 | } | 504 | } |
928 | 501 | else if (!IS_GREETER (session)) | 505 | else if (!IS_GREETER (session)) |
929 | 502 | { | 506 | { |
931 | 503 | g_debug ("Switching to greeter due to failed authentication"); | 507 | l_debug (seat, "Switching to greeter due to failed authentication"); |
932 | 504 | switch_to_greeter_from_failed_session (seat, session); | 508 | switch_to_greeter_from_failed_session (seat, session); |
933 | 505 | } | 509 | } |
934 | 506 | else | 510 | else |
935 | 507 | { | 511 | { |
937 | 508 | g_debug ("Stopping session that failed authentication"); | 512 | l_debug (seat, "Stopping session that failed authentication"); |
938 | 509 | session_stop (session); | 513 | session_stop (session); |
939 | 510 | } | 514 | } |
940 | 511 | } | 515 | } |
941 | @@ -515,7 +519,7 @@ | |||
942 | 515 | { | 519 | { |
943 | 516 | DisplayServer *display_server; | 520 | DisplayServer *display_server; |
944 | 517 | 521 | ||
946 | 518 | g_debug ("Session stopped"); | 522 | l_debug (seat, "Session stopped"); |
947 | 519 | 523 | ||
948 | 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); |
949 | 521 | seat->priv->sessions = g_list_remove (seat->priv->sessions, session); | 525 | seat->priv->sessions = g_list_remove (seat->priv->sessions, session); |
950 | @@ -578,12 +582,12 @@ | |||
951 | 578 | 582 | ||
952 | 579 | if (session_get_is_authenticated (s)) | 583 | if (session_get_is_authenticated (s)) |
953 | 580 | { | 584 | { |
955 | 581 | g_debug ("Greeter stopped, running session"); | 585 | l_debug (seat, "Greeter stopped, running session"); |
956 | 582 | run_session (seat, s); | 586 | run_session (seat, s); |
957 | 583 | } | 587 | } |
958 | 584 | else | 588 | else |
959 | 585 | { | 589 | { |
961 | 586 | g_debug ("Greeter stopped, starting session authentication"); | 590 | l_debug (seat, "Greeter stopped, starting session authentication"); |
962 | 587 | start_session (seat, s); | 591 | start_session (seat, s); |
963 | 588 | } | 592 | } |
964 | 589 | break; | 593 | break; |
965 | @@ -595,13 +599,13 @@ | |||
966 | 595 | g_list_length (seat->priv->display_servers) == 1 && | 599 | g_list_length (seat->priv->display_servers) == 1 && |
967 | 596 | g_list_nth_data (seat->priv->display_servers, 0) == display_server) | 600 | g_list_nth_data (seat->priv->display_servers, 0) == display_server) |
968 | 597 | { | 601 | { |
970 | 598 | g_debug ("Stopping seat, failed to start a greeter"); | 602 | l_debug (seat, "Stopping; failed to start a greeter"); |
971 | 599 | seat_stop (seat); | 603 | seat_stop (seat); |
972 | 600 | } | 604 | } |
973 | 601 | /* If we were the active session, switch to a greeter */ | 605 | /* If we were the active session, switch to a greeter */ |
974 | 602 | else if (!IS_GREETER (session) && session == seat_get_active_session (seat)) | 606 | else if (!IS_GREETER (session) && session == seat_get_active_session (seat)) |
975 | 603 | { | 607 | { |
977 | 604 | g_debug ("Active session stopped, starting greeter"); | 608 | l_debug (seat, "Active session stopped, starting greeter"); |
978 | 605 | seat_switch_to_greeter (seat); | 609 | seat_switch_to_greeter (seat); |
979 | 606 | } | 610 | } |
980 | 607 | 611 | ||
981 | @@ -621,7 +625,7 @@ | |||
982 | 621 | } | 625 | } |
983 | 622 | if (n_sessions == 0) | 626 | if (n_sessions == 0) |
984 | 623 | { | 627 | { |
986 | 624 | g_debug ("Stopping display server, no sessions require it"); | 628 | l_debug (seat, "Stopping display server, no sessions require it"); |
987 | 625 | display_server_stop (display_server); | 629 | display_server_stop (display_server); |
988 | 626 | } | 630 | } |
989 | 627 | } | 631 | } |
990 | @@ -678,7 +682,7 @@ | |||
991 | 678 | } | 682 | } |
992 | 679 | 683 | ||
993 | 680 | static gchar ** | 684 | static gchar ** |
995 | 681 | get_session_argv (SessionConfig *session_config, const gchar *session_wrapper) | 685 | get_session_argv (Seat *seat, SessionConfig *session_config, const gchar *session_wrapper) |
996 | 682 | { | 686 | { |
997 | 683 | gboolean result; | 687 | gboolean result; |
998 | 684 | int argc; | 688 | int argc; |
999 | @@ -699,7 +703,7 @@ | |||
1000 | 699 | /* Split command into an array listing and make command absolute */ | 703 | /* Split command into an array listing and make command absolute */ |
1001 | 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); |
1002 | 701 | if (error) | 705 | if (error) |
1004 | 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); |
1005 | 703 | g_clear_error (&error); | 707 | g_clear_error (&error); |
1006 | 704 | if (!result) | 708 | if (!result) |
1007 | 705 | return NULL; | 709 | return NULL; |
1008 | @@ -714,7 +718,7 @@ | |||
1009 | 714 | } | 718 | } |
1010 | 715 | 719 | ||
1011 | 716 | static SessionConfig * | 720 | static SessionConfig * |
1013 | 717 | find_session_config (const gchar *sessions_dir, const gchar *session_name) | 721 | find_session_config (Seat *seat, const gchar *sessions_dir, const gchar *session_name) |
1014 | 718 | { | 722 | { |
1015 | 719 | gchar **dirs; | 723 | gchar **dirs; |
1016 | 720 | SessionConfig *session_config = NULL; | 724 | SessionConfig *session_config = NULL; |
1017 | @@ -738,7 +742,7 @@ | |||
1018 | 738 | break; | 742 | break; |
1019 | 739 | 743 | ||
1020 | 740 | if (dirs[i+1] == NULL) | 744 | if (dirs[i+1] == NULL) |
1022 | 741 | g_debug ("Failed to find session configuration %s", session_name); | 745 | l_debug (seat, "Failed to find session configuration %s", session_name); |
1023 | 742 | g_clear_error (&error); | 746 | g_clear_error (&error); |
1024 | 743 | } | 747 | } |
1025 | 744 | g_strfreev (dirs); | 748 | g_strfreev (dirs); |
1026 | @@ -755,13 +759,13 @@ | |||
1027 | 755 | SessionConfig *session_config; | 759 | SessionConfig *session_config; |
1028 | 756 | Session *session = NULL; | 760 | Session *session = NULL; |
1029 | 757 | 761 | ||
1031 | 758 | g_debug ("Creating user session"); | 762 | l_debug (seat, "Creating user session"); |
1032 | 759 | 763 | ||
1033 | 760 | /* Load user preferences */ | 764 | /* Load user preferences */ |
1034 | 761 | user = accounts_get_user_by_name (username); | 765 | user = accounts_get_user_by_name (username); |
1035 | 762 | if (!user) | 766 | if (!user) |
1036 | 763 | { | 767 | { |
1038 | 764 | g_debug ("Can't login unknown user '%s'", username); | 768 | l_debug (seat, "Can't login unknown user '%s'", username); |
1039 | 765 | return NULL; | 769 | return NULL; |
1040 | 766 | } | 770 | } |
1041 | 767 | session_name = user_get_xsession (user); | 771 | session_name = user_get_xsession (user); |
1042 | @@ -770,7 +774,7 @@ | |||
1043 | 770 | if (!session_name) | 774 | if (!session_name) |
1044 | 771 | session_name = seat_get_string_property (seat, "user-session"); | 775 | session_name = seat_get_string_property (seat, "user-session"); |
1045 | 772 | sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory"); | 776 | sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory"); |
1047 | 773 | session_config = find_session_config (sessions_dir, session_name); | 777 | session_config = find_session_config (seat, sessions_dir, session_name); |
1048 | 774 | g_free (sessions_dir); | 778 | g_free (sessions_dir); |
1049 | 775 | if (session_config) | 779 | if (session_config) |
1050 | 776 | { | 780 | { |
1051 | @@ -788,14 +792,14 @@ | |||
1052 | 788 | session_set_pam_service (session, AUTOLOGIN_SERVICE); | 792 | session_set_pam_service (session, AUTOLOGIN_SERVICE); |
1053 | 789 | session_set_username (session, username); | 793 | session_set_username (session, username); |
1054 | 790 | session_set_do_authenticate (session, TRUE); | 794 | session_set_do_authenticate (session, TRUE); |
1056 | 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")); |
1057 | 792 | session_set_argv (session, argv); | 796 | session_set_argv (session, argv); |
1058 | 793 | g_strfreev (argv); | 797 | g_strfreev (argv); |
1059 | 794 | 798 | ||
1060 | 795 | g_object_unref (session_config); | 799 | g_object_unref (session_config); |
1061 | 796 | } | 800 | } |
1062 | 797 | else | 801 | else |
1064 | 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")); |
1065 | 799 | 803 | ||
1066 | 800 | 804 | ||
1067 | 801 | g_object_unref (user); | 805 | g_object_unref (user); |
1068 | @@ -811,11 +815,11 @@ | |||
1069 | 811 | Session *session; | 815 | Session *session; |
1070 | 812 | 816 | ||
1071 | 813 | sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory"); | 817 | sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory"); |
1073 | 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")); |
1074 | 815 | g_free (sessions_dir); | 819 | g_free (sessions_dir); |
1075 | 816 | if (!session_config) | 820 | if (!session_config) |
1076 | 817 | { | 821 | { |
1078 | 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")); |
1079 | 819 | return NULL; | 823 | return NULL; |
1080 | 820 | } | 824 | } |
1081 | 821 | 825 | ||
1082 | @@ -823,7 +827,7 @@ | |||
1083 | 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)); |
1084 | 824 | session_set_do_authenticate (session, TRUE); | 828 | session_set_do_authenticate (session, TRUE); |
1085 | 825 | session_set_is_guest (session, TRUE); | 829 | session_set_is_guest (session, TRUE); |
1087 | 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")); |
1088 | 827 | g_object_unref (session_config); | 831 | g_object_unref (session_config); |
1089 | 828 | session_set_argv (session, argv); | 832 | session_set_argv (session, argv); |
1090 | 829 | g_strfreev (argv); | 833 | g_strfreev (argv); |
1091 | @@ -911,7 +915,7 @@ | |||
1092 | 911 | existing_session = find_user_session (seat, username); | 915 | existing_session = find_user_session (seat, username); |
1093 | 912 | if (existing_session && session != existing_session) | 916 | if (existing_session && session != existing_session) |
1094 | 913 | { | 917 | { |
1096 | 914 | g_debug ("Returning to existing user session %s", username); | 918 | l_debug (seat, "Returning to existing user session %s", username); |
1097 | 915 | session_stop (session); | 919 | session_stop (session); |
1098 | 916 | seat_set_active_session (seat, existing_session); | 920 | seat_set_active_session (seat, existing_session); |
1099 | 917 | return TRUE; | 921 | return TRUE; |
1100 | @@ -942,16 +946,16 @@ | |||
1101 | 942 | if (user) | 946 | if (user) |
1102 | 943 | user_set_xsession (session_get_user (session), session_name); | 947 | user_set_xsession (session_get_user (session), session_name); |
1103 | 944 | 948 | ||
1105 | 945 | session_config = find_session_config (sessions_dir, session_name); | 949 | session_config = find_session_config (seat, sessions_dir, session_name); |
1106 | 946 | g_free (sessions_dir); | 950 | g_free (sessions_dir); |
1107 | 947 | if (!session_config) | 951 | if (!session_config) |
1108 | 948 | { | 952 | { |
1110 | 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")); |
1111 | 950 | return FALSE; | 954 | return FALSE; |
1112 | 951 | } | 955 | } |
1113 | 952 | 956 | ||
1114 | 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)); |
1116 | 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")); |
1117 | 955 | session_set_argv (session, argv); | 959 | session_set_argv (session, argv); |
1118 | 956 | g_strfreev (argv); | 960 | g_strfreev (argv); |
1119 | 957 | session_set_env (session, "DESKTOP_SESSION", session_name); | 961 | session_set_env (session, "DESKTOP_SESSION", session_name); |
1120 | @@ -969,7 +973,7 @@ | |||
1121 | 969 | if (can_share_display_server (seat, display_server) && | 973 | if (can_share_display_server (seat, display_server) && |
1122 | 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) |
1123 | 971 | { | 975 | { |
1125 | 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"); |
1126 | 973 | 977 | ||
1127 | 974 | /* Run on the same display server after the greeter has stopped */ | 978 | /* Run on the same display server after the greeter has stopped */ |
1128 | 975 | session_set_display_server (session, display_server); | 979 | session_set_display_server (session, display_server); |
1129 | @@ -986,7 +990,7 @@ | |||
1130 | 986 | session_set_display_server (session, display_server); | 990 | session_set_display_server (session, display_server); |
1131 | 987 | if (!display_server_start (display_server)) | 991 | if (!display_server_start (display_server)) |
1132 | 988 | { | 992 | { |
1134 | 989 | g_debug ("Failed to start display server for new session"); | 993 | l_debug (seat, "Failed to start display server for new session"); |
1135 | 990 | return FALSE; | 994 | return FALSE; |
1136 | 991 | } | 995 | } |
1137 | 992 | 996 | ||
1138 | @@ -1003,15 +1007,15 @@ | |||
1139 | 1003 | gchar *greeter_user; | 1007 | gchar *greeter_user; |
1140 | 1004 | const gchar *greeter_wrapper; | 1008 | const gchar *greeter_wrapper; |
1141 | 1005 | 1009 | ||
1143 | 1006 | g_debug ("Creating greeter session"); | 1010 | l_debug (seat, "Creating greeter session"); |
1144 | 1007 | 1011 | ||
1145 | 1008 | sessions_dir = config_get_string (config_get_instance (), "LightDM", "greeters-directory"); | 1012 | sessions_dir = config_get_string (config_get_instance (), "LightDM", "greeters-directory"); |
1147 | 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")); |
1148 | 1010 | g_free (sessions_dir); | 1014 | g_free (sessions_dir); |
1149 | 1011 | if (!session_config) | 1015 | if (!session_config) |
1150 | 1012 | return NULL; | 1016 | return NULL; |
1151 | 1013 | 1017 | ||
1153 | 1014 | argv = get_session_argv (session_config, NULL); | 1018 | argv = get_session_argv (seat, session_config, NULL); |
1154 | 1015 | greeter_wrapper = seat_get_string_property (seat, "greeter-wrapper"); | 1019 | greeter_wrapper = seat_get_string_property (seat, "greeter-wrapper"); |
1155 | 1016 | if (greeter_wrapper) | 1020 | if (greeter_wrapper) |
1156 | 1017 | { | 1021 | { |
1157 | @@ -1078,7 +1082,7 @@ | |||
1158 | 1078 | script = seat_get_string_property (seat, "display-setup-script"); | 1082 | script = seat_get_string_property (seat, "display-setup-script"); |
1159 | 1079 | if (script && !run_script (seat, display_server, script, NULL)) | 1083 | if (script && !run_script (seat, display_server, script, NULL)) |
1160 | 1080 | { | 1084 | { |
1162 | 1081 | g_debug ("Stopping display server due to failed setup script"); | 1085 | l_debug (seat, "Stopping display server due to failed setup script"); |
1163 | 1082 | display_server_stop (display_server); | 1086 | display_server_stop (display_server); |
1164 | 1083 | return; | 1087 | return; |
1165 | 1084 | } | 1088 | } |
1166 | @@ -1095,18 +1099,18 @@ | |||
1167 | 1095 | { | 1099 | { |
1168 | 1096 | if (session_get_is_authenticated (session)) | 1100 | if (session_get_is_authenticated (session)) |
1169 | 1097 | { | 1101 | { |
1171 | 1098 | g_debug ("Display server ready, running session"); | 1102 | l_debug (seat, "Display server ready, running session"); |
1172 | 1099 | run_session (seat, session); | 1103 | run_session (seat, session); |
1173 | 1100 | } | 1104 | } |
1174 | 1101 | else | 1105 | else |
1175 | 1102 | { | 1106 | { |
1177 | 1103 | g_debug ("Display server ready, starting session authentication"); | 1107 | l_debug (seat, "Display server ready, starting session authentication"); |
1178 | 1104 | start_session (seat, session); | 1108 | start_session (seat, session); |
1179 | 1105 | } | 1109 | } |
1180 | 1106 | } | 1110 | } |
1181 | 1107 | else | 1111 | else |
1182 | 1108 | { | 1112 | { |
1184 | 1109 | g_debug ("Stopping not required display server"); | 1113 | l_debug (seat, "Stopping not required display server"); |
1185 | 1110 | display_server_stop (display_server); | 1114 | display_server_stop (display_server); |
1186 | 1111 | } | 1115 | } |
1187 | 1112 | } | 1116 | } |
1188 | @@ -1116,7 +1120,7 @@ | |||
1189 | 1116 | { | 1120 | { |
1190 | 1117 | DisplayServer *display_server; | 1121 | DisplayServer *display_server; |
1191 | 1118 | 1122 | ||
1193 | 1119 | g_debug ("Creating display server of type %s", session_type); | 1123 | l_debug (seat, "Creating display server of type %s", session_type); |
1194 | 1120 | 1124 | ||
1195 | 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); |
1196 | 1122 | if (!display_server) | 1126 | if (!display_server) |
1197 | @@ -1159,7 +1163,7 @@ | |||
1198 | 1159 | greeter_session = find_greeter_session (seat); | 1163 | greeter_session = find_greeter_session (seat); |
1199 | 1160 | if (greeter_session) | 1164 | if (greeter_session) |
1200 | 1161 | { | 1165 | { |
1202 | 1162 | g_debug ("Switching to existing greeter"); | 1166 | l_debug (seat, "Switching to existing greeter"); |
1203 | 1163 | seat_set_active_session (seat, SESSION (greeter_session)); | 1167 | seat_set_active_session (seat, SESSION (greeter_session)); |
1204 | 1164 | return TRUE; | 1168 | return TRUE; |
1205 | 1165 | } | 1169 | } |
1206 | @@ -1189,12 +1193,12 @@ | |||
1207 | 1189 | if (!seat->priv->can_switch) | 1193 | if (!seat->priv->can_switch) |
1208 | 1190 | return FALSE; | 1194 | return FALSE; |
1209 | 1191 | 1195 | ||
1211 | 1192 | g_debug ("Switching to user %s", username); | 1196 | l_debug (seat, "Switching to user %s", username); |
1212 | 1193 | 1197 | ||
1213 | 1194 | session = find_user_session (seat, username); | 1198 | session = find_user_session (seat, username); |
1214 | 1195 | if (session) | 1199 | if (session) |
1215 | 1196 | { | 1200 | { |
1217 | 1197 | g_debug ("Switching to existing user session %s", username); | 1201 | l_debug (seat, "Switching to existing user session %s", username); |
1218 | 1198 | seat_set_active_session (seat, session); | 1202 | seat_set_active_session (seat, session); |
1219 | 1199 | return TRUE; | 1203 | return TRUE; |
1220 | 1200 | } | 1204 | } |
1221 | @@ -1245,7 +1249,7 @@ | |||
1222 | 1245 | session = find_guest_session (seat); | 1249 | session = find_guest_session (seat); |
1223 | 1246 | if (session) | 1250 | if (session) |
1224 | 1247 | { | 1251 | { |
1226 | 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)); |
1227 | 1249 | seat_set_active_session (seat, session); | 1253 | seat_set_active_session (seat, session); |
1228 | 1250 | return TRUE; | 1254 | return TRUE; |
1229 | 1251 | } | 1255 | } |
1230 | @@ -1278,13 +1282,13 @@ | |||
1231 | 1278 | if (!seat->priv->can_switch) | 1282 | if (!seat->priv->can_switch) |
1232 | 1279 | return FALSE; | 1283 | return FALSE; |
1233 | 1280 | 1284 | ||
1235 | 1281 | g_debug ("Locking seat"); | 1285 | l_debug (seat, "Locking"); |
1236 | 1282 | 1286 | ||
1237 | 1283 | /* Switch to greeter if one open (shouldn't be though) */ | 1287 | /* Switch to greeter if one open (shouldn't be though) */ |
1238 | 1284 | greeter_session = find_greeter_session (seat); | 1288 | greeter_session = find_greeter_session (seat); |
1239 | 1285 | if (greeter_session) | 1289 | if (greeter_session) |
1240 | 1286 | { | 1290 | { |
1242 | 1287 | g_debug ("Switching to existing greeter"); | 1291 | l_debug (seat, "Switching to existing greeter"); |
1243 | 1288 | seat_set_active_session (seat, SESSION (greeter_session)); | 1292 | seat_set_active_session (seat, SESSION (greeter_session)); |
1244 | 1289 | return TRUE; | 1293 | return TRUE; |
1245 | 1290 | } | 1294 | } |
1246 | @@ -1316,7 +1320,7 @@ | |||
1247 | 1316 | if (seat->priv->stopping) | 1320 | if (seat->priv->stopping) |
1248 | 1317 | return; | 1321 | return; |
1249 | 1318 | 1322 | ||
1251 | 1319 | g_debug ("Stopping seat"); | 1323 | l_debug (seat, "Stopping"); |
1252 | 1320 | seat->priv->stopping = TRUE; | 1324 | seat->priv->stopping = TRUE; |
1253 | 1321 | SEAT_GET_CLASS (seat)->stop (seat); | 1325 | SEAT_GET_CLASS (seat)->stop (seat); |
1254 | 1322 | } | 1326 | } |
1255 | @@ -1348,7 +1352,7 @@ | |||
1256 | 1348 | gboolean autologin_in_background; | 1352 | gboolean autologin_in_background; |
1257 | 1349 | Session *session = NULL, *background_session = NULL; | 1353 | Session *session = NULL, *background_session = NULL; |
1258 | 1350 | 1354 | ||
1260 | 1351 | g_debug ("Starting seat"); | 1355 | l_debug (seat, "Starting"); |
1261 | 1352 | 1356 | ||
1262 | 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 */ |
1263 | 1354 | if (!get_start_local_sessions (seat)) | 1358 | if (!get_start_local_sessions (seat)) |
1264 | @@ -1396,7 +1400,7 @@ | |||
1265 | 1396 | session_set_display_server (session, display_server); | 1400 | session_set_display_server (session, display_server); |
1266 | 1397 | if (!display_server || !display_server_start (display_server)) | 1401 | if (!display_server || !display_server_start (display_server)) |
1267 | 1398 | { | 1402 | { |
1269 | 1399 | g_debug ("Can't create display server for automatic login"); | 1403 | l_debug (seat, "Can't create display server for automatic login"); |
1270 | 1400 | session_stop (session); | 1404 | session_stop (session); |
1271 | 1401 | if (display_server) | 1405 | if (display_server) |
1272 | 1402 | display_server_stop (display_server); | 1406 | display_server_stop (display_server); |
1273 | @@ -1414,7 +1418,7 @@ | |||
1274 | 1414 | greeter_session = create_greeter_session (seat); | 1418 | greeter_session = create_greeter_session (seat); |
1275 | 1415 | if (!greeter_session) | 1419 | if (!greeter_session) |
1276 | 1416 | { | 1420 | { |
1278 | 1417 | g_debug ("Failed to create greeter session"); | 1421 | l_debug (seat, "Failed to create greeter session"); |
1279 | 1418 | return FALSE; | 1422 | return FALSE; |
1280 | 1419 | } | 1423 | } |
1281 | 1420 | 1424 | ||
1282 | @@ -1440,7 +1444,7 @@ | |||
1283 | 1440 | session_set_display_server (session, display_server); | 1444 | session_set_display_server (session, display_server); |
1284 | 1441 | if (!display_server || !display_server_start (display_server)) | 1445 | if (!display_server || !display_server_start (display_server)) |
1285 | 1442 | { | 1446 | { |
1287 | 1443 | g_debug ("Can't create display server for greeter"); | 1447 | l_debug (seat, "Can't create display server for greeter"); |
1288 | 1444 | session_stop (session); | 1448 | session_stop (session); |
1289 | 1445 | if (display_server) | 1449 | if (display_server) |
1290 | 1446 | display_server_stop (display_server); | 1450 | display_server_stop (display_server); |
1291 | @@ -1463,7 +1467,7 @@ | |||
1292 | 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)); |
1293 | 1464 | session_set_display_server (background_session, background_display_server); | 1468 | session_set_display_server (background_session, background_display_server); |
1294 | 1465 | if (!display_server_start (background_display_server)) | 1469 | if (!display_server_start (background_display_server)) |
1296 | 1466 | g_warning ("Failed to start display server for background session"); | 1470 | l_warning (seat, "Failed to start display server for background session"); |
1297 | 1467 | } | 1471 | } |
1298 | 1468 | 1472 | ||
1299 | 1469 | seat->priv->started = TRUE; | 1473 | seat->priv->started = TRUE; |
1300 | @@ -1512,7 +1516,7 @@ | |||
1301 | 1512 | DisplayServer *display_server = link->data; | 1516 | DisplayServer *display_server = link->data; |
1302 | 1513 | if (!display_server_get_is_stopping (display_server)) | 1517 | if (!display_server_get_is_stopping (display_server)) |
1303 | 1514 | { | 1518 | { |
1305 | 1515 | g_debug ("Stopping display server"); | 1519 | l_debug (seat, "Stopping display server"); |
1306 | 1516 | display_server_stop (display_server); | 1520 | display_server_stop (display_server); |
1307 | 1517 | } | 1521 | } |
1308 | 1518 | } | 1522 | } |
1309 | @@ -1525,7 +1529,7 @@ | |||
1310 | 1525 | Session *session = link->data; | 1529 | Session *session = link->data; |
1311 | 1526 | if (!session_get_is_stopping (session)) | 1530 | if (!session_get_is_stopping (session)) |
1312 | 1527 | { | 1531 | { |
1314 | 1528 | g_debug ("Stopping session"); | 1532 | l_debug (seat, "Stopping session"); |
1315 | 1529 | session_stop (session); | 1533 | session_stop (session); |
1316 | 1530 | } | 1534 | } |
1317 | 1531 | } | 1535 | } |
1318 | @@ -1621,3 +1625,20 @@ | |||
1319 | 1621 | NULL, | 1625 | NULL, |
1320 | 1622 | G_TYPE_NONE, 0); | 1626 | G_TYPE_NONE, 0); |
1321 | 1623 | } | 1627 | } |
1322 | 1628 | |||
1323 | 1629 | static gint | ||
1324 | 1630 | seat_real_logprefix (Logger *self, gchar *buf, gulong buflen) | ||
1325 | 1631 | { | ||
1326 | 1632 | Seat *seat = SEAT (self); | ||
1327 | 1633 | const gchar *name = seat_get_string_property (seat, "seat-name"); | ||
1328 | 1634 | if (name) | ||
1329 | 1635 | return g_snprintf (buf, buflen, "Seat %s: ", name); | ||
1330 | 1636 | else | ||
1331 | 1637 | return g_snprintf (buf, buflen, "Seat: "); | ||
1332 | 1638 | } | ||
1333 | 1639 | |||
1334 | 1640 | static void | ||
1335 | 1641 | seat_logger_iface_init (LoggerInterface *iface) | ||
1336 | 1642 | { | ||
1337 | 1643 | iface->logprefix = &seat_real_logprefix; | ||
1338 | 1644 | } | ||
1339 | 1624 | 1645 | ||
1340 | === modified file 'src/seat.h' | |||
1341 | --- src/seat.h 2013-07-25 23:40:02 +0000 | |||
1342 | +++ src/seat.h 2013-08-18 23:34:47 +0000 | |||
1343 | @@ -17,6 +17,7 @@ | |||
1344 | 17 | #include "greeter.h" | 17 | #include "greeter.h" |
1345 | 18 | #include "session.h" | 18 | #include "session.h" |
1346 | 19 | #include "process.h" | 19 | #include "process.h" |
1347 | 20 | #include "logger.h" | ||
1348 | 20 | 21 | ||
1349 | 21 | G_BEGIN_DECLS | 22 | G_BEGIN_DECLS |
1350 | 22 | 23 | ||
1351 | 23 | 24 | ||
1352 | === modified file 'src/session.c' | |||
1353 | --- src/session.c 2013-08-08 10:10:19 +0000 | |||
1354 | +++ src/session.c 2013-08-18 23:34:47 +0000 | |||
1355 | @@ -120,7 +120,11 @@ | |||
1356 | 120 | /* Maximum length of a string to pass between daemon and session */ | 120 | /* Maximum length of a string to pass between daemon and session */ |
1357 | 121 | #define MAX_STRING_LENGTH 65535 | 121 | #define MAX_STRING_LENGTH 65535 |
1358 | 122 | 122 | ||
1360 | 123 | G_DEFINE_TYPE (Session, session, G_TYPE_OBJECT); | 123 | static void session_logger_iface_init (LoggerInterface *iface); |
1361 | 124 | |||
1362 | 125 | G_DEFINE_TYPE_WITH_CODE (Session, session, G_TYPE_OBJECT, | ||
1363 | 126 | G_IMPLEMENT_INTERFACE ( | ||
1364 | 127 | LOGGER_TYPE, session_logger_iface_init)); | ||
1365 | 124 | 128 | ||
1366 | 125 | Session * | 129 | Session * |
1367 | 126 | session_new (void) | 130 | session_new (void) |
1368 | @@ -338,7 +342,7 @@ | |||
1369 | 338 | write_data (Session *session, const void *buf, size_t count) | 342 | write_data (Session *session, const void *buf, size_t count) |
1370 | 339 | { | 343 | { |
1371 | 340 | if (write (session->priv->to_child_input, buf, count) != count) | 344 | if (write (session->priv->to_child_input, buf, count) != count) |
1373 | 341 | g_warning ("Error writing to session: %s", strerror (errno)); | 345 | l_warning (session, "Error writing to session: %s", strerror (errno)); |
1374 | 342 | } | 346 | } |
1375 | 343 | 347 | ||
1376 | 344 | static void | 348 | static void |
1377 | @@ -382,7 +386,7 @@ | |||
1378 | 382 | ssize_t n_read; | 386 | ssize_t n_read; |
1379 | 383 | n_read = read (session->priv->from_child_output, buf, count); | 387 | n_read = read (session->priv->from_child_output, buf, count); |
1380 | 384 | if (n_read < 0) | 388 | if (n_read < 0) |
1382 | 385 | g_warning ("Error reading from session: %s", strerror (errno)); | 389 | l_warning (session, "Error reading from session: %s", strerror (errno)); |
1383 | 386 | return n_read; | 390 | return n_read; |
1384 | 387 | } | 391 | } |
1385 | 388 | 392 | ||
1386 | @@ -398,7 +402,7 @@ | |||
1387 | 398 | return NULL; | 402 | return NULL; |
1388 | 399 | if (length > MAX_STRING_LENGTH) | 403 | if (length > MAX_STRING_LENGTH) |
1389 | 400 | { | 404 | { |
1391 | 401 | g_warning ("Invalid string length %d from child", length); | 405 | l_warning (session, "Invalid string length %d from child", length); |
1392 | 402 | return NULL; | 406 | return NULL; |
1393 | 403 | } | 407 | } |
1394 | 404 | 408 | ||
1395 | @@ -414,17 +418,18 @@ | |||
1396 | 414 | { | 418 | { |
1397 | 415 | Session *session = data; | 419 | Session *session = data; |
1398 | 416 | 420 | ||
1399 | 417 | session->priv->pid = 0; | ||
1400 | 418 | |||
1401 | 419 | if (WIFEXITED (status)) | 421 | if (WIFEXITED (status)) |
1403 | 420 | g_debug ("Session %d exited with return value %d", pid, WEXITSTATUS (status)); | 422 | l_debug (session, "Exited with return value %d", WEXITSTATUS (status)); |
1404 | 421 | else if (WIFSIGNALED (status)) | 423 | else if (WIFSIGNALED (status)) |
1406 | 422 | g_debug ("Session %d terminated with signal %d", pid, WTERMSIG (status)); | 424 | l_debug (session, "Terminated with signal %d", WTERMSIG (status)); |
1407 | 425 | |||
1408 | 426 | /* do this as late as possible for log messages prefix */ | ||
1409 | 427 | session->priv->pid = 0; | ||
1410 | 423 | 428 | ||
1411 | 424 | /* If failed during authentication then report this as an authentication failure */ | 429 | /* If failed during authentication then report this as an authentication failure */ |
1412 | 425 | if (session->priv->authentication_started && !session->priv->authentication_complete) | 430 | if (session->priv->authentication_started && !session->priv->authentication_complete) |
1413 | 426 | { | 431 | { |
1415 | 427 | g_debug ("Session %d failed during authentication", pid); | 432 | l_debug (session, "Failed during authentication"); |
1416 | 428 | session->priv->authentication_complete = TRUE; | 433 | session->priv->authentication_complete = TRUE; |
1417 | 429 | session->priv->authentication_result = PAM_CONV_ERR; | 434 | session->priv->authentication_result = PAM_CONV_ERR; |
1418 | 430 | g_free (session->priv->authentication_result_string); | 435 | g_free (session->priv->authentication_result_string); |
1419 | @@ -473,7 +478,7 @@ | |||
1420 | 473 | /* Check if authentication completed */ | 478 | /* Check if authentication completed */ |
1421 | 474 | n_read = read_from_child (session, &auth_complete, sizeof (auth_complete)); | 479 | n_read = read_from_child (session, &auth_complete, sizeof (auth_complete)); |
1422 | 475 | if (n_read < 0) | 480 | if (n_read < 0) |
1424 | 476 | g_debug ("Error reading from child: %s", strerror (errno)); | 481 | l_debug (session, "Error reading from child: %s", strerror (errno)); |
1425 | 477 | if (n_read <= 0) | 482 | if (n_read <= 0) |
1426 | 478 | { | 483 | { |
1427 | 479 | session->priv->from_child_watch = 0; | 484 | session->priv->from_child_watch = 0; |
1428 | @@ -487,7 +492,7 @@ | |||
1429 | 487 | g_free (session->priv->authentication_result_string); | 492 | g_free (session->priv->authentication_result_string); |
1430 | 488 | session->priv->authentication_result_string = read_string_from_child (session); | 493 | session->priv->authentication_result_string = read_string_from_child (session); |
1431 | 489 | 494 | ||
1433 | 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); |
1434 | 491 | 496 | ||
1435 | 492 | /* No longer expect any more messages */ | 497 | /* No longer expect any more messages */ |
1436 | 493 | session->priv->from_child_watch = 0; | 498 | session->priv->from_child_watch = 0; |
1437 | @@ -510,7 +515,7 @@ | |||
1438 | 510 | m->msg = read_string_from_child (session); | 515 | m->msg = read_string_from_child (session); |
1439 | 511 | } | 516 | } |
1440 | 512 | 517 | ||
1442 | 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); |
1443 | 514 | 519 | ||
1444 | 515 | g_signal_emit (G_OBJECT (session), signals[GOT_MESSAGES], 0); | 520 | g_signal_emit (G_OBJECT (session), signals[GOT_MESSAGES], 0); |
1445 | 516 | } | 521 | } |
1446 | @@ -616,7 +621,7 @@ | |||
1447 | 616 | write_string (session, session->priv->xdisplay); | 621 | write_string (session, session->priv->xdisplay); |
1448 | 617 | write_xauth (session, session->priv->x_authority); | 622 | write_xauth (session, session->priv->x_authority); |
1449 | 618 | 623 | ||
1451 | 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); |
1452 | 620 | 625 | ||
1453 | 621 | return TRUE; | 626 | return TRUE; |
1454 | 622 | } | 627 | } |
1455 | @@ -727,7 +732,7 @@ | |||
1456 | 727 | session->priv->command_run = TRUE; | 732 | session->priv->command_run = TRUE; |
1457 | 728 | 733 | ||
1458 | 729 | command = g_strjoinv (" ", session->priv->argv); | 734 | command = g_strjoinv (" ", session->priv->argv); |
1460 | 730 | g_debug ("Session %d running command %s", session->priv->pid, command); | 735 | l_debug (session, "Running command %s", command); |
1461 | 731 | g_free (command); | 736 | g_free (command); |
1462 | 732 | 737 | ||
1463 | 733 | /* Create authority location */ | 738 | /* Create authority location */ |
1464 | @@ -740,11 +745,11 @@ | |||
1465 | 740 | g_free (run_dir); | 745 | g_free (run_dir); |
1466 | 741 | 746 | ||
1467 | 742 | if (g_mkdir_with_parents (dir, S_IRWXU) < 0) | 747 | if (g_mkdir_with_parents (dir, S_IRWXU) < 0) |
1469 | 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)); |
1470 | 744 | if (getuid () == 0) | 749 | if (getuid () == 0) |
1471 | 745 | { | 750 | { |
1472 | 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) |
1474 | 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)); |
1475 | 748 | } | 753 | } |
1476 | 749 | 754 | ||
1477 | 750 | x_authority_filename = g_build_filename (dir, "xauthority", NULL); | 755 | x_authority_filename = g_build_filename (dir, "xauthority", NULL); |
1478 | @@ -819,7 +824,7 @@ | |||
1479 | 819 | 824 | ||
1480 | 820 | if (session->priv->pid > 0) | 825 | if (session->priv->pid > 0) |
1481 | 821 | { | 826 | { |
1483 | 822 | g_debug ("Session %d: Sending SIGTERM", session->priv->pid); | 827 | l_debug (session, "Sending SIGTERM"); |
1484 | 823 | kill (session->priv->pid, SIGTERM); | 828 | kill (session->priv->pid, SIGTERM); |
1485 | 824 | // FIXME: Handle timeout | 829 | // FIXME: Handle timeout |
1486 | 825 | } | 830 | } |
1487 | @@ -920,3 +925,19 @@ | |||
1488 | 920 | NULL, | 925 | NULL, |
1489 | 921 | G_TYPE_NONE, 0); | 926 | G_TYPE_NONE, 0); |
1490 | 922 | } | 927 | } |
1491 | 928 | |||
1492 | 929 | static gint | ||
1493 | 930 | session_real_logprefix (Logger *self, gchar *buf, gulong buflen) | ||
1494 | 931 | { | ||
1495 | 932 | Session *session = SESSION (self); | ||
1496 | 933 | if (session->priv->pid != 0) | ||
1497 | 934 | return g_snprintf (buf, buflen, "Session pid=%d: ", session->priv->pid); | ||
1498 | 935 | else | ||
1499 | 936 | return g_snprintf (buf, buflen, "Session: "); | ||
1500 | 937 | } | ||
1501 | 938 | |||
1502 | 939 | static void | ||
1503 | 940 | session_logger_iface_init (LoggerInterface *iface) | ||
1504 | 941 | { | ||
1505 | 942 | iface->logprefix = &session_real_logprefix; | ||
1506 | 943 | } | ||
1507 | 923 | 944 | ||
1508 | === modified file 'src/session.h' | |||
1509 | --- src/session.h 2013-07-26 02:27:41 +0000 | |||
1510 | +++ src/session.h 2013-08-18 23:34:47 +0000 | |||
1511 | @@ -21,6 +21,7 @@ | |||
1512 | 21 | #include "display-server.h" | 21 | #include "display-server.h" |
1513 | 22 | #include "accounts.h" | 22 | #include "accounts.h" |
1514 | 23 | #include "x-authority.h" | 23 | #include "x-authority.h" |
1515 | 24 | #include "logger.h" | ||
1516 | 24 | 25 | ||
1517 | 25 | G_BEGIN_DECLS | 26 | G_BEGIN_DECLS |
1518 | 26 | 27 | ||
1519 | 27 | 28 | ||
1520 | === modified file 'src/x-server-local.c' | |||
1521 | --- src/x-server-local.c 2013-07-26 01:23:05 +0000 | |||
1522 | +++ src/x-server-local.c 2013-08-18 23:34:47 +0000 | |||
1523 | @@ -333,7 +333,7 @@ | |||
1524 | 333 | 333 | ||
1525 | 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); |
1526 | 335 | if (fd < 0) | 335 | if (fd < 0) |
1528 | 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)); |
1529 | 337 | else | 337 | else |
1530 | 338 | { | 338 | { |
1531 | 339 | dup2 (fd, STDOUT_FILENO); | 339 | dup2 (fd, STDOUT_FILENO); |
1532 | @@ -352,7 +352,7 @@ | |||
1533 | 352 | if (signum == SIGUSR1 && !server->priv->got_signal) | 352 | if (signum == SIGUSR1 && !server->priv->got_signal) |
1534 | 353 | { | 353 | { |
1535 | 354 | server->priv->got_signal = TRUE; | 354 | server->priv->got_signal = TRUE; |
1537 | 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))); |
1538 | 356 | 356 | ||
1539 | 357 | // FIXME: Check return value | 357 | // FIXME: Check return value |
1540 | 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)); |
1541 | @@ -362,7 +362,7 @@ | |||
1542 | 362 | static void | 362 | static void |
1543 | 363 | stopped_cb (Process *process, XServerLocal *server) | 363 | stopped_cb (Process *process, XServerLocal *server) |
1544 | 364 | { | 364 | { |
1546 | 365 | g_debug ("X server stopped"); | 365 | l_debug (server, "X server stopped"); |
1547 | 366 | 366 | ||
1548 | 367 | /* Release VT and display number for re-use */ | 367 | /* Release VT and display number for re-use */ |
1549 | 368 | if (server->priv->have_vt_ref) | 368 | if (server->priv->have_vt_ref) |
1550 | @@ -374,7 +374,7 @@ | |||
1551 | 374 | 374 | ||
1552 | 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) |
1553 | 376 | { | 376 | { |
1555 | 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); |
1556 | 378 | 378 | ||
1557 | 379 | g_unlink (server->priv->authority_file); | 379 | g_unlink (server->priv->authority_file); |
1558 | 380 | 380 | ||
1559 | @@ -404,17 +404,17 @@ | |||
1560 | 404 | dir = g_build_filename (run_dir, "root", NULL); | 404 | dir = g_build_filename (run_dir, "root", NULL); |
1561 | 405 | g_free (run_dir); | 405 | g_free (run_dir); |
1562 | 406 | if (g_mkdir_with_parents (dir, S_IRWXU) < 0) | 406 | if (g_mkdir_with_parents (dir, S_IRWXU) < 0) |
1564 | 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)); |
1565 | 408 | 408 | ||
1566 | 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); |
1567 | 410 | g_free (dir); | 410 | g_free (dir); |
1568 | 411 | } | 411 | } |
1569 | 412 | 412 | ||
1571 | 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); |
1572 | 414 | 414 | ||
1573 | 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); |
1574 | 416 | if (error) | 416 | if (error) |
1576 | 417 | g_warning ("Failed to write authority: %s", error->message); | 417 | l_warning (server, "Failed to write authority: %s", error->message); |
1577 | 418 | g_clear_error (&error); | 418 | g_clear_error (&error); |
1578 | 419 | } | 419 | } |
1579 | 420 | 420 | ||
1580 | @@ -442,14 +442,14 @@ | |||
1581 | 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)); |
1582 | 443 | dir = config_get_string (config_get_instance (), "LightDM", "log-directory"); | 443 | dir = config_get_string (config_get_instance (), "LightDM", "log-directory"); |
1583 | 444 | server->priv->log_file = g_build_filename (dir, filename, NULL); | 444 | server->priv->log_file = g_build_filename (dir, filename, NULL); |
1585 | 445 | g_debug ("Logging to %s", server->priv->log_file); | 445 | l_debug (display_server, "Logging to %s", server->priv->log_file); |
1586 | 446 | g_free (filename); | 446 | g_free (filename); |
1587 | 447 | g_free (dir); | 447 | g_free (dir); |
1588 | 448 | 448 | ||
1589 | 449 | absolute_command = get_absolute_command (server->priv->command); | 449 | absolute_command = get_absolute_command (server->priv->command); |
1590 | 450 | if (!absolute_command) | 450 | if (!absolute_command) |
1591 | 451 | { | 451 | { |
1593 | 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); |
1594 | 453 | stopped_cb (server->priv->x_server_process, X_SERVER_LOCAL (server)); | 453 | stopped_cb (server->priv->x_server_process, X_SERVER_LOCAL (server)); |
1595 | 454 | return FALSE; | 454 | return FALSE; |
1596 | 455 | } | 455 | } |
1597 | @@ -496,7 +496,7 @@ | |||
1598 | 496 | process_set_command (server->priv->x_server_process, command->str); | 496 | process_set_command (server->priv->x_server_process, command->str); |
1599 | 497 | g_string_free (command, TRUE); | 497 | g_string_free (command, TRUE); |
1600 | 498 | 498 | ||
1602 | 499 | g_debug ("Launching X Server"); | 499 | l_debug (display_server, "Launching X Server"); |
1603 | 500 | 500 | ||
1604 | 501 | /* If running inside another display then pass through those variables */ | 501 | /* If running inside another display then pass through those variables */ |
1605 | 502 | if (g_getenv ("DISPLAY")) | 502 | if (g_getenv ("DISPLAY")) |
1606 | @@ -524,7 +524,7 @@ | |||
1607 | 524 | result = process_start (server->priv->x_server_process, FALSE); | 524 | result = process_start (server->priv->x_server_process, FALSE); |
1608 | 525 | 525 | ||
1609 | 526 | if (result) | 526 | if (result) |
1611 | 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))); |
1612 | 528 | 528 | ||
1613 | 529 | if (!result) | 529 | if (!result) |
1614 | 530 | stopped_cb (server->priv->x_server_process, X_SERVER_LOCAL (server)); | 530 | stopped_cb (server->priv->x_server_process, X_SERVER_LOCAL (server)); |
1615 | 531 | 531 | ||
1616 | === modified file 'src/x-server-xvnc.c' | |||
1617 | --- src/x-server-xvnc.c 2013-07-26 02:27:41 +0000 | |||
1618 | +++ src/x-server-xvnc.c 2013-08-18 23:34:47 +0000 | |||
1619 | @@ -144,7 +144,7 @@ | |||
1620 | 144 | 144 | ||
1621 | 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); |
1622 | 146 | if (fd < 0) | 146 | if (fd < 0) |
1624 | 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)); |
1625 | 148 | else | 148 | else |
1626 | 149 | { | 149 | { |
1627 | 150 | dup2 (fd, STDERR_FILENO); | 150 | dup2 (fd, STDERR_FILENO); |
1628 | @@ -162,7 +162,7 @@ | |||
1629 | 162 | if (signum == SIGUSR1 && !server->priv->got_signal) | 162 | if (signum == SIGUSR1 && !server->priv->got_signal) |
1630 | 163 | { | 163 | { |
1631 | 164 | server->priv->got_signal = TRUE; | 164 | server->priv->got_signal = TRUE; |
1633 | 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))); |
1634 | 166 | 166 | ||
1635 | 167 | // FIXME: Check return value | 167 | // FIXME: Check return value |
1636 | 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)); |
1637 | @@ -172,14 +172,14 @@ | |||
1638 | 172 | static void | 172 | static void |
1639 | 173 | stopped_cb (Process *process, XServerXVNC *server) | 173 | stopped_cb (Process *process, XServerXVNC *server) |
1640 | 174 | { | 174 | { |
1642 | 175 | g_debug ("Xvnc server stopped"); | 175 | l_debug (server, "Xvnc server stopped"); |
1643 | 176 | 176 | ||
1644 | 177 | g_object_unref (server->priv->x_server_process); | 177 | g_object_unref (server->priv->x_server_process); |
1645 | 178 | server->priv->x_server_process = NULL; | 178 | server->priv->x_server_process = NULL; |
1646 | 179 | 179 | ||
1647 | 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))); |
1648 | 181 | 181 | ||
1650 | 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); |
1651 | 183 | 183 | ||
1652 | 184 | g_unlink (server->priv->authority_file); | 184 | g_unlink (server->priv->authority_file); |
1653 | 185 | g_free (server->priv->authority_file); | 185 | g_free (server->priv->authority_file); |
1654 | @@ -219,14 +219,14 @@ | |||
1655 | 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)); |
1656 | 220 | dir = config_get_string (config_get_instance (), "LightDM", "log-directory"); | 220 | dir = config_get_string (config_get_instance (), "LightDM", "log-directory"); |
1657 | 221 | server->priv->log_file = g_build_filename (dir, filename, NULL); | 221 | server->priv->log_file = g_build_filename (dir, filename, NULL); |
1659 | 222 | g_debug ("Logging to %s", server->priv->log_file); | 222 | l_debug (display_server, "Logging to %s", server->priv->log_file); |
1660 | 223 | g_free (filename); | 223 | g_free (filename); |
1661 | 224 | g_free (dir); | 224 | g_free (dir); |
1662 | 225 | 225 | ||
1663 | 226 | absolute_command = get_absolute_command (server->priv->command); | 226 | absolute_command = get_absolute_command (server->priv->command); |
1664 | 227 | if (!absolute_command) | 227 | if (!absolute_command) |
1665 | 228 | { | 228 | { |
1667 | 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); |
1668 | 230 | stopped_cb (server->priv->x_server_process, X_SERVER_XVNC (server)); | 230 | stopped_cb (server->priv->x_server_process, X_SERVER_XVNC (server)); |
1669 | 231 | return FALSE; | 231 | return FALSE; |
1670 | 232 | } | 232 | } |
1671 | @@ -241,16 +241,16 @@ | |||
1672 | 241 | dir = g_build_filename (run_dir, "root", NULL); | 241 | dir = g_build_filename (run_dir, "root", NULL); |
1673 | 242 | g_free (run_dir); | 242 | g_free (run_dir); |
1674 | 243 | if (g_mkdir_with_parents (dir, S_IRWXU) < 0) | 243 | if (g_mkdir_with_parents (dir, S_IRWXU) < 0) |
1676 | 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)); |
1677 | 245 | 245 | ||
1678 | 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); |
1679 | 247 | g_free (dir); | 247 | g_free (dir); |
1680 | 248 | 248 | ||
1682 | 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); |
1683 | 250 | 250 | ||
1684 | 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); |
1685 | 252 | if (error) | 252 | if (error) |
1687 | 253 | g_warning ("Failed to write authority: %s", error->message); | 253 | l_warning (display_server, "Failed to write authority: %s", error->message); |
1688 | 254 | g_clear_error (&error); | 254 | g_clear_error (&error); |
1689 | 255 | 255 | ||
1690 | 256 | command = g_string_new (absolute_command); | 256 | command = g_string_new (absolute_command); |
1691 | @@ -267,7 +267,7 @@ | |||
1692 | 267 | process_set_command (server->priv->x_server_process, command->str); | 267 | process_set_command (server->priv->x_server_process, command->str); |
1693 | 268 | g_string_free (command, TRUE); | 268 | g_string_free (command, TRUE); |
1694 | 269 | 269 | ||
1696 | 270 | g_debug ("Launching Xvnc server"); | 270 | l_debug (display_server, "Launching Xvnc server"); |
1697 | 271 | 271 | ||
1698 | 272 | /* Variable required for regression tests */ | 272 | /* Variable required for regression tests */ |
1699 | 273 | if (g_getenv ("LIGHTDM_TEST_ROOT")) | 273 | if (g_getenv ("LIGHTDM_TEST_ROOT")) |
1700 | @@ -279,7 +279,7 @@ | |||
1701 | 279 | result = process_start (server->priv->x_server_process, FALSE); | 279 | result = process_start (server->priv->x_server_process, FALSE); |
1702 | 280 | 280 | ||
1703 | 281 | if (result) | 281 | if (result) |
1705 | 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))); |
1706 | 283 | 283 | ||
1707 | 284 | if (!result) | 284 | if (!result) |
1708 | 285 | stopped_cb (server->priv->x_server_process, X_SERVER_XVNC (server)); | 285 | stopped_cb (server->priv->x_server_process, X_SERVER_XVNC (server)); |
1709 | 286 | 286 | ||
1710 | === modified file 'src/x-server.c' | |||
1711 | --- src/x-server.c 2013-07-30 15:56:44 +0000 | |||
1712 | +++ src/x-server.c 2013-08-18 23:34:47 +0000 | |||
1713 | @@ -133,11 +133,11 @@ | |||
1714 | 133 | } | 133 | } |
1715 | 134 | 134 | ||
1716 | 135 | /* Open connection */ | 135 | /* Open connection */ |
1718 | 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)); |
1719 | 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); |
1720 | 138 | if (xcb_connection_has_error (server->priv->connection)) | 138 | if (xcb_connection_has_error (server->priv->connection)) |
1721 | 139 | { | 139 | { |
1723 | 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)); |
1724 | 141 | return FALSE; | 141 | return FALSE; |
1725 | 142 | } | 142 | } |
1726 | 143 | 143 | ||
1727 | @@ -161,9 +161,12 @@ | |||
1728 | 161 | g_free (t); | 161 | g_free (t); |
1729 | 162 | 162 | ||
1730 | 163 | t = g_strdup_printf ("%d", vt); | 163 | t = g_strdup_printf ("%d", vt); |
1731 | 164 | l_debug (session, "Setting XDG_VTNR=%s", t); | ||
1732 | 164 | session_set_env (session, "XDG_VTNR", t); | 165 | session_set_env (session, "XDG_VTNR", t); |
1733 | 165 | g_free (t); | 166 | g_free (t); |
1734 | 166 | } | 167 | } |
1735 | 168 | else | ||
1736 | 169 | l_debug (session, "Not setting XDG_VTNR"); | ||
1737 | 167 | 170 | ||
1738 | 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))); |
1739 | 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))); |
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.