static void test_log (void) { mdm_log_init (); g_debug ("Test debug 1"); mdm_log_set_debug (TRUE); g_debug ("Test debug 2"); g_message ("Test message"); g_warning ("Test warning"); g_critical ("Test critical"); g_error ("Test error"); }
int main (int argc, char **argv) { struct sigaction sa; GError *error; char *display_str; CsmManager *manager; CsmStore *client_store; MdmSignalHandler *signal_handler; static char **override_autostart_dirs = NULL; static char *session_name = NULL; static GOptionEntry entries[] = { { "autostart", 'a', 0, G_OPTION_ARG_STRING_ARRAY, &override_autostart_dirs, N_("Override standard autostart directories"), N_("AUTOSTART_DIR") }, { "session", 0, 0, G_OPTION_ARG_STRING, &session_name, N_("Session to use"), N_("SESSION_NAME") }, { "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL }, { "failsafe", 'f', 0, G_OPTION_ARG_NONE, &failsafe, N_("Do not load user-specified applications"), NULL }, { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, N_("Version of this application"), NULL }, /* Translators: the 'fail whale' is the black dialog we show when something goes seriously wrong */ { "whale", 0, 0, G_OPTION_ARG_NONE, &please_fail, N_("Show the fail whale dialog for testing"), NULL }, { NULL, 0, 0, 0, NULL, NULL, NULL } }; /* Make sure that we have a session bus */ if (!require_dbus_session (argc, argv, &error)) { csm_util_init_error (TRUE, "%s", error->message); } bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); GSettings *settings = g_settings_new ("org.cinnamon.SessionManager"); if (g_settings_get_boolean (settings, "debug")) { debug = TRUE; } g_object_unref(settings); sa.sa_handler = SIG_IGN; sa.sa_flags = 0; sigemptyset (&sa.sa_mask); sigaction (SIGPIPE, &sa, 0); error = NULL; gtk_init_with_args (&argc, &argv, (char *) _(" - the Cinnamon session manager"), entries, GETTEXT_PACKAGE, &error); if (error != NULL) { g_warning ("%s", error->message); exit (1); } if (show_version) { g_print ("%s %s\n", argv [0], VERSION); exit (1); } if (please_fail) { csm_fail_whale_dialog_we_failed (TRUE, TRUE); gtk_main (); exit (1); } mdm_log_init (); mdm_log_set_debug (debug); /* Set DISPLAY explicitly for all our children, in case --display * was specified on the command line. */ display_str = gdk_get_display (); csm_util_setenv ("DISPLAY", display_str); g_free (display_str); const gchar *gtk_modules; gchar *new_gtk_modules = NULL; gtk_modules = g_getenv ("GTK_MODULES"); if (gtk_modules != NULL && g_strstr_len (gtk_modules, -1, "overlay-scrollbar")) { int i = 0; new_gtk_modules = g_strconcat ("", NULL); gchar **module_list = g_strsplit (gtk_modules, ":", -1); for (i = 0; i < g_strv_length (module_list); i++) { if (!g_strstr_len (module_list[i], -1, "overlay-scrollbar")) { gchar *tmp = new_gtk_modules; new_gtk_modules = g_strconcat (tmp, ":", module_list[i], NULL); g_free (tmp); } } g_strfreev (module_list); } if (new_gtk_modules) { csm_util_setenv ("GTK_MODULES", new_gtk_modules); } g_free (new_gtk_modules); /* Some third-party programs rely on GNOME_DESKTOP_SESSION_ID to * detect if GNOME is running. We keep this for compatibility reasons. */ csm_util_setenv ("GNOME_DESKTOP_SESSION_ID", "this-is-deprecated"); /* Make QT5 apps follow the GTK style */ csm_util_setenv ("QT_STYLE_OVERRIDE", "gtk"); client_store = csm_store_new (); /* Talk to logind before acquiring a name, since it does synchronous * calls at initialization time that invoke a main loop and if we * already owned a name, then we would service too early during * that main loop. */ g_object_unref (csm_get_system ()); if (!acquire_name ()) { csm_fail_whale_dialog_we_failed (TRUE, TRUE); gtk_main (); exit (1); } manager = csm_manager_new (client_store, failsafe); /* signal_handler = mdm_signal_handler_new (); mdm_signal_handler_add_fatal (signal_handler); mdm_signal_handler_add (signal_handler, SIGFPE, signal_cb, NULL); mdm_signal_handler_add (signal_handler, SIGHUP, signal_cb, NULL); mdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL); mdm_signal_handler_add (signal_handler, SIGTERM, signal_cb, manager); mdm_signal_handler_add (signal_handler, SIGINT, signal_cb, manager); mdm_signal_handler_set_fatal_func (signal_handler, shutdown_cb, manager); */ if (IS_STRING_EMPTY (session_name)) session_name = _csm_manager_get_default_session (manager); csm_util_set_autostart_dirs (override_autostart_dirs); if (!csm_session_fill (manager, session_name)) { csm_util_init_error (TRUE, "Failed to load session \"%s\"", session_name ? session_name : "(null)"); } csm_manager_start (manager); gtk_main (); if (manager != NULL) { g_debug ("Unreffing manager"); g_object_unref (manager); } if (client_store != NULL) { g_object_unref (client_store); } if (bus_proxy != NULL) { g_object_unref (bus_proxy); } mdm_log_shutdown (); return 0; }
int main (int argc, char **argv) { GMainLoop *main_loop; GOptionContext *context; DBusGConnection *connection; MdmSlave *slave; static char *display_id = NULL; MdmSignalHandler *signal_handler; static GOptionEntry entries [] = { { "display-id", 0, 0, G_OPTION_ARG_STRING, &display_id, N_("Display ID"), N_("ID") }, { NULL } }; bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR); textdomain (GETTEXT_PACKAGE); setlocale (LC_ALL, ""); mdm_set_fatal_warnings_if_unstable (); g_type_init (); context = g_option_context_new (_("MATE Display Manager Slave")); g_option_context_add_main_entries (context, entries, NULL); g_option_context_parse (context, &argc, &argv, NULL); g_option_context_free (context); connection = get_system_bus (); if (connection == NULL) { goto out; } mdm_xerrors_init (); mdm_log_init (); settings = mdm_settings_new (); if (settings == NULL) { g_warning ("Unable to initialize settings"); goto out; } if (! mdm_settings_direct_init (settings, DATADIR "/mdm/mdm.schemas", "/")) { g_warning ("Unable to initialize settings"); goto out; } mdm_log_set_debug (is_debug_set ()); if (display_id == NULL) { g_critical ("No display ID set"); exit (1); } main_loop = g_main_loop_new (NULL, FALSE); signal_handler = mdm_signal_handler_new (); mdm_signal_handler_set_fatal_func (signal_handler, (GDestroyNotify)g_main_loop_quit, main_loop); mdm_signal_handler_add (signal_handler, SIGTERM, signal_cb, NULL); mdm_signal_handler_add (signal_handler, SIGINT, signal_cb, NULL); mdm_signal_handler_add (signal_handler, SIGILL, signal_cb, NULL); mdm_signal_handler_add (signal_handler, SIGBUS, signal_cb, NULL); mdm_signal_handler_add (signal_handler, SIGFPE, signal_cb, NULL); mdm_signal_handler_add (signal_handler, SIGHUP, signal_cb, NULL); mdm_signal_handler_add (signal_handler, SIGSEGV, signal_cb, NULL); mdm_signal_handler_add (signal_handler, SIGABRT, signal_cb, NULL); mdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL); mdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL); slave = mdm_product_slave_new (display_id); if (slave == NULL) { goto out; } g_signal_connect (slave, "stopped", G_CALLBACK (on_slave_stopped), main_loop); mdm_slave_start (slave); g_main_loop_run (main_loop); if (slave != NULL) { g_object_unref (slave); } if (signal_handler != NULL) { g_object_unref (signal_handler); } if (main_loop != NULL) { g_main_loop_unref (main_loop); } out: g_debug ("Slave finished"); return mdm_return_code; }
int main (int argc, char *argv[]) { GtkWidget *dialog; char *command; char *version; char *ret; const char *message; GOptionContext *ctx; bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); /* Option parsing */ ctx = g_option_context_new ("- New mdm login"); g_option_context_add_main_entries (ctx, options, _("main options")); g_option_context_parse (ctx, &argc, &argv, NULL); g_option_context_free (ctx); if (monte_carlo_pi) { calc_pi (); return 0; } mdm_log_init (); mdm_log_set_debug (debug_in); if (args_remaining != NULL && args_remaining[0] != NULL) server = args_remaining[0]; if (send_command != NULL) { if ( ! mdmcomm_check (FALSE)) { mdm_common_error (_("Error: MDM (MDM Display Manager) is not running.")); mdm_common_error (_("You might be using a different display manager.")); return 1; } } else { /* * The --command argument does not display anything, so avoid * running gtk_init until it finishes. Sometimes the * --command argument is used when there is no display so it * will fail and cause the program to exit, complaining about * "no display". */ gtk_init (&argc, &argv); if ( ! mdmcomm_check (TRUE)) { return 1; } } /* Start reading config data in bulk */ mdmcomm_comm_bulk_start (); /* Process --command option */ g_type_init (); if (send_command != NULL) { /* gdk_init is needed for cookie code to get display */ gdk_init (&argc, &argv); if (authenticate) auth_cookie = mdmcomm_get_auth_cookie (); /* * If asking for a translatable config value, then try to get * the translated value first. If this fails, then go ahead * and call the normal sockets command. */ if (strncmp (send_command, MDM_SUP_GET_CONFIG " ", strlen (MDM_SUP_GET_CONFIG " ")) == 0) { gchar *value = NULL; const char *key = &send_command[strlen (MDM_SUP_GET_CONFIG " ")]; if (is_key (MDM_KEY_WELCOME, key) || is_key (MDM_KEY_REMOTE_WELCOME, key)) { value = mdm_config_get_translated_string ((gchar *)key); if (value != NULL) { ret = g_strdup_printf ("OK %s", value); } } /* * If the above didn't return a value, then must be a * different key, so call mdmcomm_call_mdm. */ if (value == NULL) ret = mdmcomm_call_mdm (send_command, auth_cookie, "1.0.0.0", 5); } else { ret = mdmcomm_call_mdm (send_command, auth_cookie, "1.0.0.0", 5); } /* At this point we are done using the socket, so close it */ mdmcomm_comm_bulk_stop (); if (ret != NULL) { g_print ("%s\n", ret); return 0; } else { dialog = hig_dialog_new (NULL /* parent */, GTK_DIALOG_MODAL /* flags */, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Cannot communicate with MDM " "(The MDM Display Manager)"), _("Perhaps you have an old version " "of MDM running.")); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); return 1; } } /* * Now process what mdmflexiserver is more frequently used to * do, start VT (Virtual Terminal) sesions - at least on * systems where it is supported. On systems where it is not * supporteed VT stands for "Very Tight" and will mess up your * display if you use it. Tight! So do not use it. * * I would accept a patch to disable it on such systems, but it * is easy to avoid not using it as long as your distro does not * put the menu choice in the application launch button on the * panel (don't ship the desktop file). */ /* * Always attempt to get cookie and authenticate. On remote * servers */ auth_cookie = mdmcomm_get_auth_cookie (); if (use_xnest) { char *cookie = mdmcomm_get_a_cookie (FALSE /* binary */); if (cookie == NULL) { /* At this point we are done using the socket, so close it */ mdmcomm_comm_bulk_stop (); dialog = hig_dialog_new (NULL /* parent */, GTK_DIALOG_MODAL /* flags */, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("You do not seem to have the " "authentication needed for this " "operation"), _("Perhaps your .Xauthority " "file is not set up correctly.")); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); return 1; } command = g_strdup_printf (MDM_SUP_FLEXI_XNEST " %s %d %s %s", mdmcomm_get_display (), (int)getuid (), cookie, XauFileName ()); g_free (cookie); version = "1.0.0.0"; auth_cookie = NULL; } else { /* check for other displays/logged in users */ check_for_users (); if (auth_cookie == NULL) { /* At this point we are done using the socket, so close it */ mdmcomm_comm_bulk_stop (); dialog = hig_dialog_new (NULL /* parent */, GTK_DIALOG_MODAL /* flags */, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("You do not seem to be logged in on the " "console"), _("Starting a new login only " "works correctly on the console.")); gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); return 1; } read_servers (); server = choose_server (); if (server == NULL) command = g_strdup (MDM_SUP_FLEXI_XSERVER); else command = g_strdup_printf (MDM_SUP_FLEXI_XSERVER " %s", server); version = "1.0.0.0"; } ret = mdmcomm_call_mdm (command, auth_cookie, version, 5); g_free (command); g_free (auth_cookie); g_strfreev (args_remaining); /* At this point we are done using the socket, so close it */ mdmcomm_comm_bulk_stop (); if (ret != NULL && strncmp (ret, "OK ", 3) == 0) { /* if we switched to a different screen as a result of this, * lock the current screen */ if ( ! no_lock && ! use_xnest) { maybe_lock_screen (); } /* all fine and dandy */ g_free (ret); return 0; } message = mdmcomm_get_error_message (ret, use_xnest); dialog = hig_dialog_new (NULL /* parent */, GTK_DIALOG_MODAL /* flags */, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Cannot start new display"), message); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_free (ret); return 1; }
int main (int argc, char *argv[]) { GtkWidget *dialog; char *ret; const char *message; GOptionContext *ctx; bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); /* Option parsing */ ctx = g_option_context_new ("- New mdm login"); g_option_context_add_main_entries (ctx, options, _("main options")); g_option_context_parse (ctx, &argc, &argv, NULL); g_option_context_free (ctx); mdm_log_init (); mdm_log_set_debug (debug_in); if (send_command != NULL) { if ( ! mdmcomm_is_daemon_running (FALSE)) { mdm_common_error (_("Error: MDM (MDM Display Manager) is not running.")); mdm_common_error (_("You might be using a different display manager.")); return 1; } } else { /* * The --command argument does not display anything, so avoid * running gtk_init until it finishes. Sometimes the * --command argument is used when there is no display so it * will fail and cause the program to exit, complaining about * "no display". */ gtk_init (&argc, &argv); if ( ! mdmcomm_is_daemon_running (TRUE)) { return 1; } } mdmcomm_open_connection_to_daemon (); /* Process --command option */ g_type_init (); if (send_command != NULL) { /* gdk_init is needed for cookie code to get display */ gdk_init (&argc, &argv); if (authenticate) auth_cookie = mdmcomm_get_auth_cookie (); /* * If asking for a translatable config value, then try to get * the translated value first. If this fails, then go ahead * and call the normal sockets command. */ if (strncmp (send_command, MDM_SUP_GET_CONFIG " ", strlen (MDM_SUP_GET_CONFIG " ")) == 0) { gchar *value = NULL; const char *key = &send_command[strlen (MDM_SUP_GET_CONFIG " ")]; if (is_key (MDM_KEY_WELCOME, key)) { value = mdm_config_get_translated_string ((gchar *)key); if (value != NULL) { ret = g_strdup_printf ("OK %s", value); } } /* * If the above didn't return a value, then must be a * different key, so call the daemon. */ if (value == NULL) ret = mdmcomm_send_cmd_to_daemon_with_args (send_command, auth_cookie, 5); } else { ret = mdmcomm_send_cmd_to_daemon_with_args (send_command, auth_cookie, 5); } /* At this point we are done using the socket, so close it */ mdmcomm_close_connection_to_daemon (); if (ret != NULL) { g_print ("%s\n", ret); return 0; } else { dialog = hig_dialog_new (NULL /* parent */, GTK_DIALOG_MODAL /* flags */, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Cannot communicate with MDM " "(The MDM Display Manager)"), _("Perhaps you have an old version " "of MDM running.")); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); return 1; } } /* * Always attempt to get cookie and authenticate. On remote * servers */ auth_cookie = mdmcomm_get_auth_cookie (); /* check for other displays/logged in users */ check_for_users (); if (auth_cookie == NULL) { /* At this point we are done using the socket, so close it */ mdmcomm_close_connection_to_daemon (); dialog = hig_dialog_new (NULL /* parent */, GTK_DIALOG_MODAL /* flags */, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("You do not seem to be logged in on the " "console"), _("Starting a new login only " "works correctly on the console.")); gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); return 1; } ret = mdmcomm_send_cmd_to_daemon_with_args (MDM_SUP_FLEXI_XSERVER, auth_cookie, 5); g_free (auth_cookie); g_strfreev (args_remaining); /* At this point we are done using the socket, so close it */ mdmcomm_close_connection_to_daemon (); if (ret != NULL && strncmp (ret, "OK ", 3) == 0) { /* if we switched to a different screen as a result of this, * lock the current screen */ if ( ! no_lock ) { maybe_lock_screen (); } /* all fine and dandy */ g_free (ret); return 0; } message = mdmcomm_get_error_message (ret); dialog = hig_dialog_new (NULL /* parent */, GTK_DIALOG_MODAL /* flags */, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Cannot start new display"), message); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_free (ret); return 1; }
int main(int argc, char** argv) { struct sigaction sa; GError* error; #if GTK_CHECK_VERSION (3, 0, 0) const char* display_str; #else char* display_str; #endif GsmManager* manager; GsmStore* client_store; GsmXsmpServer* xsmp_server; GSettings* accessibility_settings; MdmSignalHandler* signal_handler; static char** override_autostart_dirs = NULL; static GOptionEntry entries[] = { {"autostart", 'a', 0, G_OPTION_ARG_STRING_ARRAY, &override_autostart_dirs, N_("Override standard autostart directories"), NULL}, {"debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL}, {"failsafe", 'f', 0, G_OPTION_ARG_NONE, &failsafe, N_("Do not load user-specified applications"), NULL}, {"version", 0, 0, G_OPTION_ARG_NONE, &show_version, N_("Version of this application"), NULL}, {NULL, 0, 0, 0, NULL, NULL, NULL } }; /* Make sure that we have a session bus */ if (!require_dbus_session(argc, argv, &error)) { gsm_util_init_error(TRUE, "%s", error->message); } bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); sa.sa_handler = SIG_IGN; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); sigaction(SIGPIPE, &sa, 0); error = NULL; gtk_init_with_args(&argc, &argv, (char*) _(" - the MATE session manager"), entries, GETTEXT_PACKAGE, &error); if (error != NULL) { g_warning("%s", error->message); exit(1); } if (show_version) { g_print("%s %s\n", argv [0], VERSION); exit(1); } mdm_log_init(); mdm_log_set_debug(debug); /* Set DISPLAY explicitly for all our children, in case --display * was specified on the command line. */ #if GTK_CHECK_VERSION (3, 0, 0) display_str = gdk_display_get_name (gdk_display_get_default()); #else display_str = gdk_get_display(); #endif gsm_util_setenv("DISPLAY", display_str); #if !GTK_CHECK_VERSION (3, 0, 0) g_free(display_str); #endif /* Some third-party programs rely on MATE_DESKTOP_SESSION_ID to * detect if MATE is running. We keep this for compatibility reasons. */ gsm_util_setenv("MATE_DESKTOP_SESSION_ID", "this-is-deprecated"); /* * Make sure gsettings is set up correctly. If not, then bail. */ if (initialize_gsettings () != TRUE) exit (1); /* Look if accessibility is enabled */ accessibility_settings = g_settings_new (ACCESSIBILITY_SCHEMA); if (g_settings_get_boolean (accessibility_settings, ACCESSIBILITY_KEY)) { gsm_util_setenv("GTK_MODULES", "gail:atk-bridge"); } g_object_unref (accessibility_settings); client_store = gsm_store_new(); xsmp_server = gsm_xsmp_server_new(client_store); /* Now make sure they succeeded. (They'll call * gsm_util_init_error() if they failed.) */ acquire_name(); /* Starts gnome compat mode */ msm_gnome_start(); manager = gsm_manager_new(client_store, failsafe); signal_handler = mdm_signal_handler_new(); mdm_signal_handler_add_fatal(signal_handler); mdm_signal_handler_add(signal_handler, SIGFPE, signal_cb, NULL); mdm_signal_handler_add(signal_handler, SIGHUP, signal_cb, NULL); mdm_signal_handler_add(signal_handler, SIGUSR1, signal_cb, NULL); mdm_signal_handler_add(signal_handler, SIGTERM, signal_cb, manager); mdm_signal_handler_add(signal_handler, SIGINT, signal_cb, manager); mdm_signal_handler_set_fatal_func(signal_handler, shutdown_cb, manager); if (override_autostart_dirs != NULL) { load_override_apps(manager, override_autostart_dirs); } else { load_standard_apps(manager, GSM_DEFAULT_SESSION_KEY); } gsm_xsmp_server_start(xsmp_server); gsm_manager_start(manager); gtk_main(); if (xsmp_server != NULL) { g_object_unref(xsmp_server); } if (manager != NULL) { g_debug("Unreffing manager"); g_object_unref(manager); } if (client_store != NULL) { g_object_unref(client_store); } msm_gnome_stop(); mdm_log_shutdown(); return 0; }