const gchar * ibus_get_socket_path (void) { static gchar *path = NULL; if (path == NULL) { gchar *hostname = "unix"; gchar *display; gchar *displaynumber = "0"; gchar *screennumber = "0"; const gchar *folder= NULL; gchar *p; if (_display == NULL) { display = g_strdup (g_getenv ("DISPLAY")); } else { display = g_strdup (_display); } if (display == NULL) { g_warning ("DISPLAY is empty! We use default DISPLAY (:0.0)"); } else { p = display; hostname = display; for (; *p != ':' && *p != '\0'; p++); if (*p == ':') { *p = '\0'; p++; displaynumber = p; } for (; *p != '.' && *p != '\0'; p++); if (*p == '.') { *p = '\0'; p++; screennumber = p; } } folder = ibus_get_socket_folder (); if (hostname[0] == '\0') hostname = "unix"; path = g_strdup_printf ( "%s/ibus-%s-%s", folder, hostname, displaynumber); g_free (display); } return path; }
gboolean bus_server_listen (BusServer *server) { g_assert (BUS_IS_SERVER (server)); const gchar *mechanisms[] = { "EXTERNAL", NULL }; const gchar *address = "unix:tmpdir=/tmp/"; gboolean retval; #if 0 path = ibus_get_socket_folder (); mkdir (path, 0700); chmod (path, 0700); address = ibus_get_address (); #endif retval = ibus_server_listen (IBUS_SERVER (server), address); #if 0 chmod (ibus_get_socket_path (), 0600); #endif ibus_server_set_auth_mechanisms ((IBusServer *)server, mechanisms); if (!retval) { #if 0 g_printerr ("Can not listen on %s! Please try remove directory %s and run again.", address, path); #else g_printerr ("Can not listen on %s!", address); #endif exit (-1); } ibus_write_address (ibus_server_get_address (IBUS_SERVER (server))); return retval; }