351
351
builder = g_variant_builder_new (G_VARIANT_TYPE ("ao"));
352
for (link = seat_get_displays (seat); link; link = link->next)
352
for (link = seat_get_sessions (seat); link; link = link->next)
354
Display *display = link->data;
354
Session *session = link->data;
356
entry = g_hash_table_lookup (session_bus_entries, display_get_session (display));
356
entry = g_hash_table_lookup (session_bus_entries, session);
358
358
g_variant_builder_add_value (builder, g_variant_new_object_path (entry->path));
524
start_session_cb (Display *display, Seat *seat)
524
running_user_session_cb (Seat *seat, Session *session)
527
BusEntry *seat_entry;
526
static const GDBusInterfaceVTable session_vtable =
529
handle_session_get_property
531
BusEntry *seat_entry, *entry;
530
session = display_get_session (display);
532
534
/* Set environment variables when session runs */
533
535
seat_entry = g_hash_table_lookup (seat_bus_entries, seat);
534
536
session_set_env (session, "XDG_SEAT_PATH", seat_entry->path);
537
539
session_set_env (session, "XDG_SESSION_PATH", path);
538
540
g_object_set_data_full (G_OBJECT (session), "XDG_SESSION_PATH", path, g_free);
544
session_stopped_cb (Session *session, Seat *seat)
546
g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
547
g_hash_table_remove (session_bus_entries, session);
551
session_started_cb (Display *display, Seat *seat)
553
static const GDBusInterfaceVTable session_vtable =
556
handle_session_get_property
559
BusEntry *seat_entry, *entry;
561
session = display_get_session (display);
563
g_signal_connect (session, "stopped", G_CALLBACK (session_stopped_cb), seat);
565
542
seat_entry = g_hash_table_lookup (seat_bus_entries, seat);
566
543
entry = bus_entry_new (g_object_get_data (G_OBJECT (session), "XDG_SESSION_PATH"), seat_entry ? seat_entry->path : NULL, "SessionRemoved");
567
544
g_hash_table_insert (session_bus_entries, g_object_ref (session), entry);
582
559
g_variant_new ("(o)", entry->path),
589
display_added_cb (Seat *seat, Display *display)
564
session_removed_cb (Session *session, Seat *seat)
591
g_signal_connect (display, "start-session", G_CALLBACK (start_session_cb), seat);
592
g_signal_connect_after (display, "start-session", G_CALLBACK (session_started_cb), seat);
566
g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
567
g_hash_table_remove (session_bus_entries, session);
638
611
g_hash_table_remove (seat_bus_entries, seat);
615
xdmcp_session_cb (XDMCPServer *server, XDMCPSession *session)
617
SeatXDMCPSession *seat;
620
seat = seat_xdmcp_session_new (session);
621
set_seat_properties (SEAT (seat), NULL);
622
result = display_manager_add_seat (display_manager, SEAT (seat));
623
g_object_unref (seat);
629
vnc_connection_cb (VNCServer *server, GSocket *connection)
633
seat = seat_xvnc_new (connection);
634
set_seat_properties (SEAT (seat), NULL);
635
display_manager_add_seat (display_manager, SEAT (seat));
636
g_object_unref (seat);
642
640
bus_acquired_cb (GDBusConnection *connection,
643
641
const gchar *name,
730
728
g_signal_connect (display_manager, "seat-removed", G_CALLBACK (seat_removed_cb), NULL);
731
729
for (link = display_manager_get_seats (display_manager); link; link = link->next)
732
730
seat_added_cb (display_manager, (Seat *) link->data);
732
display_manager_start (display_manager);
734
/* Start the XDMCP server */
735
if (config_get_boolean (config_get_instance (), "XDMCPServer", "enabled"))
737
gchar *key_name, *key = NULL;
739
xdmcp_server = xdmcp_server_new ();
740
if (config_has_key (config_get_instance (), "XDMCPServer", "port"))
743
port = config_get_integer (config_get_instance (), "XDMCPServer", "port");
745
xdmcp_server_set_port (xdmcp_server, port);
747
g_signal_connect (xdmcp_server, "new-session", G_CALLBACK (xdmcp_session_cb), NULL);
749
key_name = config_get_string (config_get_instance (), "XDMCPServer", "key");
755
GError *error = NULL;
757
dir = config_get_string (config_get_instance (), "LightDM", "config-directory");
758
path = g_build_filename (dir, "keys.conf", NULL);
761
keys = g_key_file_new ();
762
result = g_key_file_load_from_file (keys, path, G_KEY_FILE_NONE, &error);
764
g_debug ("Error getting key %s", error->message);
765
g_clear_error (&error);
769
if (g_key_file_has_key (keys, "keyring", key_name, NULL))
770
key = g_key_file_get_string (keys, "keyring", key_name, NULL);
772
g_debug ("Key %s not defined", key_name);
775
g_key_file_free (keys);
778
xdmcp_server_set_key (xdmcp_server, key);
782
g_debug ("Starting XDMCP server on UDP/IP port %d", xdmcp_server_get_port (xdmcp_server));
783
xdmcp_server_start (xdmcp_server);
786
/* Start the VNC server */
787
if (config_get_boolean (config_get_instance (), "VNCServer", "enabled"))
791
path = g_find_program_in_path ("Xvnc");
794
vnc_server = vnc_server_new ();
795
if (config_has_key (config_get_instance (), "VNCServer", "port"))
798
port = config_get_integer (config_get_instance (), "VNCServer", "port");
800
vnc_server_set_port (vnc_server, port);
802
g_signal_connect (vnc_server, "new-connection", G_CALLBACK (vnc_connection_cb), NULL);
804
g_debug ("Starting VNC server on TCP/IP port %d", vnc_server_get_port (vnc_server));
805
vnc_server_start (vnc_server);
810
g_warning ("Can't start VNC server, Xvn is not in the path");
767
xdmcp_session_cb (XDMCPServer *server, XDMCPSession *session)
769
SeatXDMCPSession *seat;
772
seat = seat_xdmcp_session_new (session);
773
set_seat_properties (SEAT (seat), NULL);
774
result = display_manager_add_seat (display_manager, SEAT (seat));
775
g_object_unref (seat);
781
vnc_connection_cb (VNCServer *server, GSocket *connection)
785
seat = seat_xvnc_new (connection);
786
set_seat_properties (SEAT (seat), NULL);
787
display_manager_add_seat (display_manager, SEAT (seat));
788
g_object_unref (seat);
792
846
compare_strings (gconstpointer a, gconstpointer b)
831
882
{ "pid-file", 0, 0, G_OPTION_ARG_STRING, &pid_path,
832
883
/* Help string for command line --pid-file flag */
833
884
N_("File to write PID into"), "FILE" },
834
{ "xsessions-dir", 0, 0, G_OPTION_ARG_STRING, &xsessions_dir,
835
/* Help string for command line --xsessions-dir flag */
836
N_("Directory to load X sessions from"), "DIRECTORY" },
837
{ "remote-sessions-dir", 0, 0, G_OPTION_ARG_STRING, &remote_sessions_dir,
838
/* Help string for command line --remote-sessions-dir flag */
839
N_("Directory to load remote sessions from"), "DIRECTORY" },
840
{ "xgreeters-dir", 0, 0, G_OPTION_ARG_STRING, &xgreeters_dir,
841
/* Help string for command line --xgreeters-dir flag */
842
N_("Directory to load X greeters from"), "DIRECTORY" },
843
885
{ "log-dir", 0, 0, G_OPTION_ARG_STRING, &log_dir,
844
886
/* Help string for command line --log-dir flag */
845
887
N_("Directory to write logs to"), "DIRECTORY" },
1067
1103
if (!config_has_key (config_get_instance (), "LightDM", "cache-directory"))
1068
1104
config_set_string (config_get_instance (), "LightDM", "cache-directory", default_cache_dir);
1069
1105
g_free (default_cache_dir);
1070
if (!config_has_key (config_get_instance (), "LightDM", "xsessions-directory"))
1071
config_set_string (config_get_instance (), "LightDM", "xsessions-directory", XSESSIONS_DIR);
1106
if (!config_has_key (config_get_instance (), "LightDM", "sessions-directory"))
1107
config_set_string (config_get_instance (), "LightDM", "sessions-directory", SESSIONS_DIR);
1072
1108
if (!config_has_key (config_get_instance (), "LightDM", "remote-sessions-directory"))
1073
1109
config_set_string (config_get_instance (), "LightDM", "remote-sessions-directory", REMOTE_SESSIONS_DIR);
1074
if (!config_has_key (config_get_instance (), "LightDM", "xgreeters-directory"))
1075
config_set_string (config_get_instance (), "LightDM", "xgreeters-directory", XGREETERS_DIR);
1110
if (!config_has_key (config_get_instance (), "LightDM", "greeters-directory"))
1111
config_set_string (config_get_instance (), "LightDM", "greeters-directory", GREETERS_DIR);
1077
1113
/* Override defaults */
1085
1121
config_set_string (config_get_instance (), "LightDM", "cache-directory", cache_dir);
1086
1122
g_free (cache_dir);
1088
config_set_string (config_get_instance (), "LightDM", "xsessions-directory", xsessions_dir);
1089
g_free (xsessions_dir);
1090
if (remote_sessions_dir)
1091
config_set_string (config_get_instance (), "LightDM", "remote-sessions-directory", remote_sessions_dir);
1092
g_free (remote_sessions_dir);
1094
config_set_string (config_get_instance (), "LightDM", "xgreeters-directory", xgreeters_dir);
1095
g_free (xgreeters_dir);
1097
1124
/* Create run and cache directories */
1098
1125
dir = config_get_string (config_get_instance (), "LightDM", "log-directory");
1191
display_manager_start (display_manager);
1193
/* Start the XDMCP server */
1194
if (config_get_boolean (config_get_instance (), "XDMCPServer", "enabled"))
1196
gchar *key_name, *key = NULL;
1198
xdmcp_server = xdmcp_server_new ();
1199
if (config_has_key (config_get_instance (), "XDMCPServer", "port"))
1202
port = config_get_integer (config_get_instance (), "XDMCPServer", "port");
1204
xdmcp_server_set_port (xdmcp_server, port);
1206
g_signal_connect (xdmcp_server, "new-session", G_CALLBACK (xdmcp_session_cb), NULL);
1208
key_name = config_get_string (config_get_instance (), "XDMCPServer", "key");
1214
GError *error = NULL;
1216
dir = config_get_string (config_get_instance (), "LightDM", "config-directory");
1217
path = g_build_filename (dir, "keys.conf", NULL);
1220
keys = g_key_file_new ();
1221
result = g_key_file_load_from_file (keys, path, G_KEY_FILE_NONE, &error);
1223
g_debug ("Error getting key %s", error->message);
1224
g_clear_error (&error);
1228
if (g_key_file_has_key (keys, "keyring", key_name, NULL))
1229
key = g_key_file_get_string (keys, "keyring", key_name, NULL);
1231
g_debug ("Key %s not defined", key_name);
1234
g_key_file_free (keys);
1237
xdmcp_server_set_key (xdmcp_server, key);
1241
g_debug ("Starting XDMCP server on UDP/IP port %d", xdmcp_server_get_port (xdmcp_server));
1242
xdmcp_server_start (xdmcp_server);
1245
/* Start the VNC server */
1246
if (config_get_boolean (config_get_instance (), "VNCServer", "enabled"))
1250
path = g_find_program_in_path ("Xvnc");
1253
vnc_server = vnc_server_new ();
1254
if (config_has_key (config_get_instance (), "VNCServer", "port"))
1257
port = config_get_integer (config_get_instance (), "VNCServer", "port");
1259
vnc_server_set_port (vnc_server, port);
1261
g_signal_connect (vnc_server, "new-connection", G_CALLBACK (vnc_connection_cb), NULL);
1263
g_debug ("Starting VNC server on TCP/IP port %d", vnc_server_get_port (vnc_server));
1264
vnc_server_start (vnc_server);
1269
g_warning ("Can't start VNC server, Xvn is not in the path");
1272
1219
g_main_loop_run (loop);
1274
1221
/* Clean up display manager */