summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Cameron <bcameron@src.gnome.org>2006-02-09 20:04:43 +0000
committerBrian Cameron <bcameron@src.gnome.org>2006-02-09 20:04:43 +0000
commit9dbb5bfdb6d063dc98a22403b3095e930dec6ad0 (patch)
tree644d994e5775f8d3f28d9616cc0cbf001488a8b8
parent441eb0bd94c240cce85783ffd30b53e6194d4f97 (diff)
downloadgdm-9dbb5bfdb6d063dc98a22403b3095e930dec6ad0.tar.gz
A known issue with gdmdynamic is that when a display connects to the
A known issue with gdmdynamic is that when a display connects to the server it generates the gdmdynamic "ADD" and "RELEASE" commands. On startup, hundreds of displays could send these commands at once and cause the server too be flooded with sockets requests. Hammering the socket like this caused me to find and fix a number of problems that improve socket reliability for general GDM use. I also enhanced gdmdynamic so it is more sensitive to the socket being busy and no longer overloads it, instead sleeping and retrying if necessary. This allows gdmdynamic to work if there are hundreds of displays instead of just a dozen or so. * daemon/gdm.[ch]: Added new "SERVER_BUSY" sockets command so that gdmdynamic can sleep before starting new slaves if the daemon is already busy. * daemon/gdm-net.[ch]: Bump up MAX_CONNECTIONS from 10 to 15. I notice that this improves performance significantly when hammering the daemon with connections. Added better comments for this logic and now debug logs when a subconnection is thrown away. New gdm_connection_is_server_busy function * daemon/display.c: Correct DYNAMIC_REMOVE so it works and fixes bug #326796. Before it wasn't really removing the displays. * gui/gdmdynamic.c: Quite a bit of work to make gdmdynamic avoid flooding the server with sockets requests. Now it sets sockets retries to 1 and manages sleeping and retries itself. * gui/gdmconfig.c: Added gdm_config_set_comm_retries so that slaves can specify how many retries they want the comm logic to use. * gui/gdmcomm.c: Now do_command returns NULL when it gets back "", which happens when a subconnection was dropped by the daemon. This lets the slave try the connection again. Now error messages are always logged, not just when debug is turned on. Added gdmcomm_did_connection_fail and gdmcomm_set_allow_sleep so gdmdynamic can control the behavior of how the connection works. * gui/gdmcommon.c, gui/gdmchooser.c, gui/gdmlogin.c, gui/greeter/greeter.c: Fix gdm_common_fail so it doesn't generate compile errors when building with GCC. Fixes bug #330480. * docs/C/gdm.xml: Cleaned up section that explains sockets commands so that they are in alphabetical order, added info about SERVER_BUSY and new gdmdynamic -s and -t options. * config/gdm.conf: Better description of how debug works, perhaps I just didn't like the word "spew". ---------------------------------------------------------------------
-rw-r--r--ChangeLog43
-rw-r--r--config/gdm.conf.in7
-rw-r--r--daemon/display.c3
-rw-r--r--daemon/gdm-net.c66
-rw-r--r--daemon/gdm-net.h15
-rw-r--r--daemon/gdm.c117
-rw-r--r--daemon/gdm.h14
-rw-r--r--docs/C/gdm.xml613
-rw-r--r--docs/es/es.po1414
-rw-r--r--docs/es/gdm.xml596
-rw-r--r--gui/gdmchooser.c39
-rw-r--r--gui/gdmcomm.c102
-rw-r--r--gui/gdmcomm.h3
-rw-r--r--gui/gdmcommon.c31
-rw-r--r--gui/gdmcommon.h5
-rw-r--r--gui/gdmconfig.c19
-rw-r--r--gui/gdmconfig.h3
-rw-r--r--gui/gdmdynamic.c253
-rw-r--r--gui/gdmlogin.c15
-rw-r--r--gui/gdmwm.c2
-rw-r--r--gui/greeter/greeter.c18
21 files changed, 1957 insertions, 1421 deletions
diff --git a/ChangeLog b/ChangeLog
index 9de82225..d8a69431 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,46 @@
+2006-02-09 Brian Cameron <brian.cameron@sun.com>
+
+ A known issue with gdmdynamic is that when a display connects to
+ the server it generates the gdmdynamic "ADD" and "RELEASE" commands.
+ On startup, hundreds of displays could send these commands at once
+ and cause the server too be flooded with sockets requests. Hammering
+ the socket like this caused me to find and fix a number of problems
+ that improve socket reliability for general GDM use. I also enhanced
+ gdmdynamic so it is more sensitive to the socket being busy and no
+ longer overloads it, instead sleeping and retrying if necessary. This
+ allows gdmdynamic to work if there are hundreds of displays instead of
+ just a dozen or so.
+
+ * daemon/gdm.[ch]: Added new "SERVER_BUSY" sockets command so that
+ gdmdynamic can sleep before starting new slaves if the daemon is
+ already busy.
+ * daemon/gdm-net.[ch]: Bump up MAX_CONNECTIONS from 10 to 15. I notice
+ that this improves performance significantly when hammering the
+ daemon with connections. Added better comments for this logic and
+ now debug logs when a subconnection is thrown away. New
+ gdm_connection_is_server_busy function
+ * daemon/display.c: Correct DYNAMIC_REMOVE so it works and fixes bug
+ #326796. Before it wasn't really removing the displays.
+ * gui/gdmdynamic.c: Quite a bit of work to make gdmdynamic avoid
+ flooding the server with sockets requests. Now it sets sockets
+ retries to 1 and manages sleeping and retries itself.
+ * gui/gdmconfig.c: Added gdm_config_set_comm_retries so that slaves can
+ specify how many retries they want the comm logic to use.
+ * gui/gdmcomm.c: Now do_command returns NULL when it gets back "",
+ which happens when a subconnection was dropped by the daemon. This
+ lets the slave try the connection again. Now error messages are
+ always logged, not just when debug is turned on. Added
+ gdmcomm_did_connection_fail and gdmcomm_set_allow_sleep so
+ gdmdynamic can control the behavior of how the connection works.
+ * gui/gdmcommon.c, gui/gdmchooser.c, gui/gdmlogin.c, gui/greeter/greeter.c:
+ Fix gdm_common_fail so it doesn't generate compile errors when building
+ with GCC. Fixes bug #330480.
+ * docs/C/gdm.xml: Cleaned up section that explains sockets commands so
+ that they are in alphabetical order, added info about SERVER_BUSY
+ and new gdmdynamic -s and -t options.
+ * config/gdm.conf: Better description of how debug works, perhaps
+ I just didn't like the word "spew".
+
2006-02-07 Brian Cameron <brian.cameron@sun.com>
* gui/gdmconfig.c: Return compiled in value if slave fails
diff --git a/config/gdm.conf.in b/config/gdm.conf.in
index 12ba43e0..c15cb86c 100644
--- a/config/gdm.conf.in
+++ b/config/gdm.conf.in
@@ -498,9 +498,10 @@ Multicast=false
#AllowAdd=true
[debug]
-# This will enable debugging into the syslog, usually not necessary and it
-# creates a LOT of spew of random stuff to the syslog. However it can be
-# useful in determining when something is going very wrong.
+# This will cause GDM to send debugging information to the system log, which
+# will create a LOT of output. It is not recommended to turn this on for
+# normal use, but it can be useful to determine the cause when GDM is not
+# working properly.
Enable=false
# This will enable debug messages for accessibilty gesture listeners into the
# syslog. This includes output about key events, mouse button events, and
diff --git a/daemon/display.c b/daemon/display.c
index 1b0dc186..8cf6596d 100644
--- a/daemon/display.c
+++ b/daemon/display.c
@@ -368,7 +368,6 @@ gdm_display_manage (GdmDisplay *d)
*
* Stop services for a display
*/
-
void
gdm_display_unmanage (GdmDisplay *d)
{
@@ -387,7 +386,7 @@ gdm_display_unmanage (GdmDisplay *d)
whack_old_slave (d, TRUE /* kill_connection */);
d->dispstat = DISPLAY_DEAD;
- if (d->type != TYPE_STATIC)
+ if (d->type != TYPE_STATIC || d->removeconf)
gdm_display_dispose (d);
gdm_debug ("gdm_display_unmanage: Display stopped");
diff --git a/daemon/gdm-net.c b/daemon/gdm-net.c
index 4ab69d43..e7e9181d 100644
--- a/daemon/gdm-net.c
+++ b/daemon/gdm-net.c
@@ -37,8 +37,38 @@
#include "gdm-net.h"
#include "gdmconfig.h"
-/* Kind of a weird setup, new connections whack old connections */
-#define MAX_CONNECTIONS 10
+/*
+ * Kind of a weird setup, new connections whack old connections.
+ *
+ * We may want to allow tuning of the max connections, since
+ * this number means that only a certain number of slaves can
+ * talk to the daemon at once. Note that since new connections
+ * whack old connections, this tends to cause traffic problems
+ * if the daemon is really being hammered.
+ *
+ * This is because the slaves retry a failed connection 5 times,
+ * though they are at least smart enough to sleep 1 second
+ * between retries if the connection failed on the connect()
+ * call. But, this means that throwing off a connection causes
+ * that slave to come back in another second and try to
+ * connect again. So if the daemon is really being hammered,
+ * this just causes more traffic problems. It's really faster
+ * to let each connection finish.
+ *
+ * This may cause problems for some setups (perhaps terminal
+ * servers) where lots of connections may hit the server at once
+ * and 15 connections may not be enough (especially since the
+ * console login screen may also be using one of them). Perhaps
+ * this number should be in gdm.conf so it can be tuned by the
+ * end user?
+ *
+ * If, when you turn on debug, you notice messages like this
+ * in the log, "Closing connection, x subconnections reached"
+ * and some slaves are not working properly, then bumping this
+ * number up is probably a reasonable fix if you can't simply
+ * reduce the socket load the daemon must handle.
+ */
+#define MAX_CONNECTIONS 15
struct _GdmConnection {
int fd;
@@ -74,6 +104,21 @@ struct _GdmConnection {
GdmDisplay *disp;
};
+int
+gdm_connection_is_server_busy (GdmConnection *conn) {
+ int max_connections = MAX_CONNECTIONS;
+
+ if (conn->n_subconnections >= (max_connections / 2)) {
+ gdm_debug ("Connections is %d, max is %d, busy TRUE",
+ conn->n_subconnections, max_connections);
+ return TRUE;
+ } else {
+ gdm_debug ("Connections is %d, max is %d, busy FALSE",
+ conn->n_subconnections, max_connections);
+ return FALSE;
+ }
+}
+
static gboolean
close_if_needed (GdmConnection *conn, GIOCondition cond, gboolean error)
{
@@ -200,12 +245,13 @@ gdm_socket_handler (GIOChannel *source,
GIOCondition cond,
gpointer data)
{
- int fd;
GIOChannel *unixchan;
GdmConnection *conn = data;
GdmConnection *newconn;
struct sockaddr_un addr;
socklen_t addr_size = sizeof (addr);
+ int fd;
+ int max_connections;
if ( ! (cond & G_IO_IN))
return TRUE;
@@ -240,8 +286,18 @@ gdm_socket_handler (GIOChannel *source,
conn->subconnections = g_list_append (conn->subconnections, newconn);
conn->n_subconnections++;
- if (conn->n_subconnections > MAX_CONNECTIONS) {
- gdm_debug ("Closing connection, %d subconnections reached", MAX_CONNECTIONS);
+
+ /*
+ * When dynamix servers is turned on, the daemon can be flooded with
+ * requests and closing a subconnection will typically make the client
+ * just try and connect again, and worsen the flooding problem. When
+ * using dynamic servers, allow more clients to connect at once.
+ */
+ max_connections = MAX_CONNECTIONS;
+
+ if (conn->n_subconnections > max_connections) {
+ gdm_debug ("Closing connection, %d subconnections reached",
+ max_connections);
GdmConnection *old = conn->subconnections->data;
conn->subconnections =
g_list_remove (conn->subconnections, old);
diff --git a/daemon/gdm-net.h b/daemon/gdm-net.h
index 6999f0fb..68719379 100644
--- a/daemon/gdm-net.h
+++ b/daemon/gdm-net.h
@@ -76,16 +76,17 @@ void gdm_connection_set_user_flags (GdmConnection *conn,
gdm_connection_set_user_flags (conn, _flags); \
}
-GdmDisplay * gdm_connection_get_display (GdmConnection *conn);
-void gdm_connection_set_display (GdmConnection *conn,
- GdmDisplay *disp);
-void gdm_kill_subconnections_with_display (GdmConnection *conn,
- GdmDisplay *disp);
+GdmDisplay * gdm_connection_get_display (GdmConnection *conn);
+void gdm_connection_set_display (GdmConnection *conn,
+ GdmDisplay *disp);
+int gdm_connection_is_server_busy (GdmConnection *conn);
+void gdm_kill_subconnections_with_display (GdmConnection *conn,
+ GdmDisplay *disp);
-int gdm_connection_get_message_count (GdmConnection *conn);
+int gdm_connection_get_message_count (GdmConnection *conn);
-void gdm_connection_close (GdmConnection *conn);
+void gdm_connection_close (GdmConnection *conn);
#endif /* GDM_NET_H */
diff --git a/daemon/gdm.c b/daemon/gdm.c
index 57e4232a..6a65798c 100644
--- a/daemon/gdm.c
+++ b/daemon/gdm.c
@@ -76,10 +76,10 @@ extern GSList *displays;
/* Local functions */
static void gdm_handle_message (GdmConnection *conn,
- const char *msg,
+ const gchar *msg,
gpointer data);
static void gdm_handle_user_message (GdmConnection *conn,
- const char *msg,
+ const gchar *msg,
gpointer data);
static void gdm_daemonify (void);
static void gdm_safe_restart (void);
@@ -87,13 +87,13 @@ static void gdm_try_logout_action (GdmDisplay *disp);
static void gdm_restart_now (void);
static void handle_flexi_server (GdmConnection *conn,
int type,
- const char *server,
+ const gchar *server,
gboolean handled,
gboolean chooser,
- const char *xnest_disp,
+ const gchar *xnest_disp,
uid_t xnest_uid,
- const char *xnest_auth_file,
- const char *xnest_cookie);
+ const gchar *xnest_auth_file,
+ const gchar *xnest_cookie);
/* Global vars */
gint xdmcp_sessions = 0; /* Number of remote sessions */
@@ -118,10 +118,10 @@ GdmConnection *pipeconn = NULL; /* slavepipe (handled just like Fifo for compati
GdmConnection *unixconn = NULL; /* UNIX Socket connection */
int slave_fifo_pipe_fd = -1; /* the slavepipe connection */
-unsigned char *gdm_global_cookie = NULL;
+unsigned char *gdm_global_cookie = NULL;
unsigned char *gdm_global_bcookie = NULL;
-char *gdm_charset = NULL;
+gchar *gdm_charset = NULL;
int gdm_normal_runlevel = -1; /* runlevel on linux that gdm was started in */
@@ -141,7 +141,7 @@ gboolean gdm_in_final_cleanup = FALSE;
GdmLogoutAction safe_logout_action = GDM_LOGOUT_ACTION_NONE;
/* set in the main function */
-char **stored_argv = NULL;
+gchar **stored_argv = NULL;
int stored_argc = 0;
extern gchar *config_file;
@@ -741,8 +741,11 @@ gdm_cleanup_children (void)
if (d->servpid > 1)
kill (d->servpid, SIGTERM);
d->servpid = 0;
- if (gdm_get_value_bool (GDM_KEY_DYNAMIC_XSERVERS)) /* XXX - This needs to be handled better */
- gdm_server_whack_lockfile (d);
+
+ if (gdm_get_value_bool (GDM_KEY_DYNAMIC_XSERVERS)) {
+ /* XXX - This needs to be handled better */
+ gdm_server_whack_lockfile (d);
+ }
/* race avoider */
gdm_sleep_no_signal (1);
@@ -2487,11 +2490,11 @@ dehex_cookie (const char *cookie, int *len)
/* This runs as the user who owns the file */
static gboolean
-check_cookie (const char *file, const char *disp, const char *cookie)
+check_cookie (const gchar *file, const gchar *disp, const gchar *cookie)
{
Xauth *xa;
- char *number;
- char *bcookie;
+ gchar *number;
+ gchar *bcookie;
int cookielen;
gboolean ret = FALSE;
int cnt = 0;
@@ -2538,15 +2541,15 @@ check_cookie (const char *file, const char *disp, const char *cookie)
}
static void
-handle_flexi_server (GdmConnection *conn, int type, const char *server,
+handle_flexi_server (GdmConnection *conn, int type, const gchar *server,
gboolean handled,
gboolean chooser,
- const char *xnest_disp, uid_t xnest_uid,
- const char *xnest_auth_file,
- const char *xnest_cookie)
+ const gchar *xnest_disp, uid_t xnest_uid,
+ const gchar *xnest_auth_file,
+ const gchar *xnest_cookie)
{
GdmDisplay *display;
- char *bin;
+ gchar *bin;
uid_t server_uid = 0;
gdm_debug ("server: '%s'", server);
@@ -2648,7 +2651,7 @@ handle_flexi_server (GdmConnection *conn, int type, const char *server,
if (type == TYPE_FLEXI_XNEST) {
GdmDisplay *parent;
- char *disp, *p;
+ gchar *disp, *p;
gdm_assert (xnest_disp != NULL);
disp = g_strdup (xnest_disp);
@@ -2693,12 +2696,13 @@ handle_flexi_server (GdmConnection *conn, int type, const char *server,
}
static void
-handle_dynamic_server (GdmConnection *conn, int type, char *key)
+handle_dynamic_server (GdmConnection *conn, int type, gchar *key)
{
GdmDisplay *disp;
int disp_num;
- char *full;
- char *val;
+ gchar *msg;
+ gchar *full;
+ gchar *val;
if (!(gdm_get_value_bool (GDM_KEY_DYNAMIC_XSERVERS))) {
gdm_connection_write (conn, "ERROR 200 Dynamic Displays not allowed\n");
@@ -2711,8 +2715,13 @@ handle_dynamic_server (GdmConnection *conn, int type, char *key)
return;
}
- if ((key == NULL) || (!(isdigit (*key)))) {
- gdm_connection_write (conn, "ERROR 1 Bad display number\n");
+ if (key == NULL) {
+ gdm_connection_write (conn, "ERROR 1 Bad display number <NULL>\n");
+ return;
+ } else if ( !(isdigit (*key))) {
+ msg = g_strdup_printf ("ERROR 1 Bad display number <%s>\n", key);
+ gdm_connection_write (conn, msg);
+ g_free (msg);
return;
}
disp_num = atoi (key);
@@ -2749,7 +2758,7 @@ handle_dynamic_server (GdmConnection *conn, int type, char *key)
if (disp_num > gdm_get_high_display_num ())
gdm_set_high_display_num (disp_num);
- gdm_connection_write (conn, "OK\n");
+ gdm_connection_write (conn, "OK\n");
return;
}
@@ -2769,7 +2778,8 @@ handle_dynamic_server (GdmConnection *conn, int type, char *key)
}
}
- gdm_connection_write (conn, "ERROR 1 Bad display number\n");
+ msg = g_strdup_printf ("ERROR 1 Bad display number <%d>\n", disp_num);
+ gdm_connection_write (conn, msg);
return;
}
@@ -2777,6 +2787,7 @@ handle_dynamic_server (GdmConnection *conn, int type, char *key)
/* cause the newly configured X servers to actually run */
GSList *li;
GSList *nli;
+ gboolean found = FALSE;
for (li = displays; li != NULL; li = nli) {
GdmDisplay *disp = li->data;
@@ -2788,17 +2799,24 @@ handle_dynamic_server (GdmConnection *conn, int type, char *key)
if ( ! gdm_display_manage (disp)) {
gdm_display_unmanage (disp);
}
+ found = TRUE;
}
}
- gdm_connection_write (conn, "OK\n");
+ if (found)
+ gdm_connection_write (conn, "OK\n");
+ else {
+ msg = g_strdup_printf ("ERROR 1 Bad display number <%d>\n", disp_num);
+ gdm_connection_write (conn, msg);
+ }
+
/* Now we wait for the server to start up (or not) */
return;
}
}
static void
-gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
+gdm_handle_user_message (GdmConnection *conn, const gchar *msg, gpointer data)
{
gdm_debug ("Handling user message: '%s'", msg);
@@ -2812,7 +2830,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
if (strncmp (msg, GDM_SUP_AUTH_LOCAL " ",
strlen (GDM_SUP_AUTH_LOCAL " ")) == 0) {
GSList *li;
- char *cookie = g_strdup
+ gchar *cookie = g_strdup
(&msg[strlen (GDM_SUP_AUTH_LOCAL " ")]);
g_strstrip (cookie);
if (strlen (cookie) != 16*2) /* 16 bytes in hex form */ {
@@ -2839,7 +2857,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
}
if (gdm_global_cookie != NULL &&
- g_ascii_strcasecmp ((char *) gdm_global_cookie, cookie) == 0) {
+ g_ascii_strcasecmp ((gchar *) gdm_global_cookie, cookie) == 0) {
g_free (cookie);
GDM_CONNECTION_SET_USER_FLAG
(conn, GDM_SUP_FLAG_AUTH_GLOBAL);
@@ -2870,8 +2888,8 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
NULL, 0, NULL, NULL);
} else if (strncmp (msg, GDM_SUP_FLEXI_XSERVER " ",
strlen (GDM_SUP_FLEXI_XSERVER " ")) == 0) {
- char *name;
- const char *command = NULL;
+ gchar *name;
+ const gchar *command = NULL;
GdmXserver *svr;
/* Only allow locally authenticated connections */
@@ -2916,7 +2934,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
NULL, 0, NULL, NULL);
} else if (strncmp (msg, GDM_SUP_FLEXI_XNEST " ",
strlen (GDM_SUP_FLEXI_XNEST " ")) == 0) {
- char *dispname = NULL, *xauthfile = NULL, *cookie = NULL;
+ gchar *dispname = NULL, *xauthfile = NULL, *cookie = NULL;
uid_t uid;
extract_dispname_uid_xauthfile_cookie (msg, &dispname, &uid,
@@ -2953,7 +2971,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
strlen (GDM_SUP_CONSOLE_SERVERS)) == 0)) {
GString *retMsg;
GSList *li;
- const char *sep = " ";
+ const gchar *sep = " ";
char *key;
int msgLen=0;
@@ -2993,7 +3011,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
} else if (strcmp (msg, GDM_SUP_ALL_SERVERS) == 0) {
GString *msg;
GSList *li;
- const char *sep = " ";
+ const gchar *sep = " ";
msg = g_string_new ("OK");
for (li = displays; li != NULL; li = li->next) {
@@ -3018,9 +3036,9 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
} else if (strncmp (msg, GDM_SUP_GET_SERVER_DETAILS " ",
strlen (GDM_SUP_GET_SERVER_DETAILS " ")) == 0) {
- const char *server = &msg[strlen (GDM_SUP_GET_SERVER_DETAILS " ")];
+ const gchar *server = &msg[strlen (GDM_SUP_GET_SERVER_DETAILS " ")];
gchar **splitstr = g_strsplit (server, " ", 2);
- GdmXserver *svr = gdm_find_xserver ((char *)splitstr[0]);
+ GdmXserver *svr = gdm_find_xserver ((gchar *)splitstr[0]);
if (svr != NULL) {
if (g_strcasecmp (splitstr[1], "ID") == 0)
@@ -3066,7 +3084,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
} else if (strcmp (msg, GDM_SUP_GREETERPIDS) == 0) {
GString *msg;
GSList *li;
- const char *sep = " ";
+ const gchar *sep = " ";
msg = g_string_new ("OK");
for (li = displays; li != NULL; li = li->next) {
@@ -3082,7 +3100,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
g_string_free (msg, TRUE);
} else if (strncmp (msg, GDM_SUP_UPDATE_CONFIG " ",
strlen (GDM_SUP_UPDATE_CONFIG " ")) == 0) {
- const char *key =
+ const gchar *key =
&msg[strlen (GDM_SUP_UPDATE_CONFIG " ")];
if (! gdm_update_config ((gchar *)key))
@@ -3091,7 +3109,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
gdm_connection_write (conn, "OK\n");
} else if (strncmp (msg, GDM_SUP_GET_CONFIG " ",
strlen (GDM_SUP_GET_CONFIG " ")) == 0) {
- const char *key = &msg[strlen (GDM_SUP_GET_CONFIG " ")];
+ const gchar *key = &msg[strlen (GDM_SUP_GET_CONFIG " ")];
gchar *retval;
static gboolean done_prefetch = FALSE;
@@ -3125,7 +3143,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
gdm_connection_printf (conn, "OK %s\n", config_file);
g_string_free (msg, TRUE);
} else if (strcmp (msg, GDM_SUP_QUERY_LOGOUT_ACTION) == 0) {
- const char *sep = " ";
+ const gchar *sep = " ";
GdmDisplay *disp;
GdmLogoutAction logout_action;
GString *msg;
@@ -3175,7 +3193,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
g_string_free (msg, TRUE);
} else if (strncmp (msg, GDM_SUP_SET_LOGOUT_ACTION " ",
strlen (GDM_SUP_SET_LOGOUT_ACTION " ")) == 0) {
- const char *action =
+ const gchar *action =
&msg[strlen (GDM_SUP_SET_LOGOUT_ACTION " ")];
GdmDisplay *disp;
gboolean was_ok = FALSE;
@@ -3227,7 +3245,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
}
} else if (strncmp (msg, GDM_SUP_SET_SAFE_LOGOUT_ACTION " ",
strlen (GDM_SUP_SET_SAFE_LOGOUT_ACTION " ")) == 0) {
- const char *action =
+ const gchar *action =
&msg[strlen (GDM_SUP_SET_SAFE_LOGOUT_ACTION " ")];
GdmDisplay *disp;
gboolean was_ok = FALSE;
@@ -3328,7 +3346,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
#endif
} else if (strncmp (msg, GDM_SUP_ADD_DYNAMIC_DISPLAY " ",
strlen (GDM_SUP_ADD_DYNAMIC_DISPLAY " ")) == 0) {
- char *key;
+ gchar *key;
key = g_strdup (&msg[strlen (GDM_SUP_ADD_DYNAMIC_DISPLAY " ")]);
g_strstrip (key);
@@ -3337,7 +3355,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
} else if (strncmp (msg, GDM_SUP_REMOVE_DYNAMIC_DISPLAY " ",
strlen (GDM_SUP_REMOVE_DYNAMIC_DISPLAY " ")) == 0) {
- char *key;
+ gchar *key;
key = g_strdup (&msg[strlen (GDM_SUP_REMOVE_DYNAMIC_DISPLAY " ")]);
g_strstrip (key);
@@ -3347,7 +3365,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
} else if (strncmp (msg, GDM_SUP_RELEASE_DYNAMIC_DISPLAYS " ",
strlen (GDM_SUP_RELEASE_DYNAMIC_DISPLAYS " ")) == 0) {
- char *key;
+ gchar *key;
key = g_strdup (&msg[strlen (GDM_SUP_RELEASE_DYNAMIC_DISPLAYS " ")]);
g_strstrip (key);
@@ -3356,6 +3374,11 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
} else if (strcmp (msg, GDM_SUP_VERSION) == 0) {
gdm_connection_write (conn, "GDM " VERSION "\n");
+ } else if (strcmp (msg, GDM_SUP_SERVER_BUSY) == 0) {
+ if (gdm_connection_is_server_busy (unixconn))
+ gdm_connection_write (conn, "OK true\n");
+ else
+ gdm_connection_write (conn, "OK false\n");
} else if (strcmp (msg, GDM_SUP_CLOSE) == 0) {
gdm_connection_close (conn);
} else {
diff --git a/daemon/gdm.h b/daemon/gdm.h
index b0c20255..4a14efe5 100644
--- a/daemon/gdm.h
+++ b/daemon/gdm.h
@@ -1194,6 +1194,20 @@ void gdm_final_cleanup (void);
* 200 = Too many messages
* 999 = Unknown error
*/
+#define GDM_SUP_SERVER_BUSY "SERVER_BUSY" /* None */
+/* SERVER_BUSY: Returns true if half or more of the daemon's sockets are
+ * busy, false otherwise. Used by slave programs which want
+ * to ensure they do not overhwelm the server.
+ * Supported since: 2.13.0.8
+ * Arguments: None
+ * Answers:
+ * OK <value>
+ * ERROR <err number> <english error description>
+ * 0 = Not implemented
+ * 200 = Too many messages
+ * 999 = Unknown error
+ */
+#define GDM_SUP_GET_SERVER_DETAILS "GET_SERVER_DETAILS" /* <server> <key> */
#define GDM_SUP_CLOSE "CLOSE" /* None */
/* CLOSE: Close sockets connection
* Supported since: 2.2.4.0
diff --git a/docs/C/gdm.xml b/docs/C/gdm.xml
index c8cff875..45128188 100644
--- a/docs/C/gdm.xml
+++ b/docs/C/gdm.xml
@@ -272,7 +272,7 @@
launched in a window in the user's current session. Nested displays
can be started even if not logged into the console and are started by
running the <command>gdmflexiserver -n</command> command. Flexible
- displays are not restarted when the user session ends. Flexbile
+ displays are not restarted when the user session ends. Flexible
displays require virtual terminal (VT) support in the kernel, and will
not be available if not supported (such as on Solaris). Nested
displays require that the X server supports Xnest.
@@ -484,7 +484,7 @@
<para>
If a user has no defined face image, GDM will use the
&quot;stock_person&quot; icon defined in the current GTK+ theme. If no
- such image is defined, it will fallback to the iamge specified in the
+ such image is defined, it will fallback to the image specified in the
<filename>DefaultFace</filename> configuration option, normally
/usr/share/pixmaps/nobody.png.
</para>
@@ -3843,24 +3843,28 @@ Language=cs_CZ.UTF-8
</para>
<screen>
-VERSION
+ADD_DYNAMIC_DISPLAY
+ALL_SERVERS
+ATTACHED_SERVERS
AUTH_LOCAL
-FLEXI_XSERVER
+CLOSE
FLEXI_XNEST
-ATTACHED_SERVERS
-ALL_SERVERS
-GET_SERVER_LIST
-GET_SERVER_DETAILS
+FLEXI_XSERVER
GET_CONFIG
GET_CONFIG_FILE
-UPDATE_CONFIG
+GET_SERVER_LIST
+GET_SERVER_DETAILS
GREETERPIDS
QUERY_LOGOUT_ACTION
+QUERY_VT
+RELEASE_DYNAMIC_DISPLAYS
+REMOVE_DYNAMIC_DISPLAY
+SERVER_BUSY
SET_LOGOUT_ACTION
SET_SAFE_LOGOUT_ACTION
-QUERY_VT
SET_VT
-CLOSE
+UPDATE_CONFIG
+VERSION
</screen>
<para>
@@ -3868,20 +3872,86 @@ CLOSE
response format, and return codes.
</para>
- <sect3 id="queryversion">
- <title>VERSION</title>
+ <sect3 id="adddynamic">
+ <title>ADD_DYNAMIC_DISPLAY</title>
<screen>
-VERSION: Query GDM version
-Supported since: 2.2.4.0
+ADD_DYNAMIC_DISPLAY: Create a new server definition that will
+ run on the specified display leaving, it
+ in DISPLAY_CONFIG state.
+Supported since: 2.8.0.0
+Arguments: &lt;display to run on&gt;=&lt;server&gt;
+ Where &lt;server&gt; is either a configuration named in the
+ GDM configuration or a literal command name.
+Answers:
+ OK &lt;display&gt;
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
+ 2 = Existing display
+ 3 = No server string
+ 4 = Display startup failure
+ 100 = Not authenticated
+ 200 = Dynamic Displays not allowed
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
+ <sect3 id="allservers">
+ <title>ALL_SERVERS</title>
+ <screen>
+ALL_SERVERS: List all displays, including console, remote, xnest.
+ This can, for example, be useful to figure out if
+ the display you are on is managed by the gdm daemon,
+ by seeing if it is in the list. It is also somewhat
+ like the 'w' command but for graphical sessions.
+Supported since: 2.4.2.96
Arguments: None
Answers:
- GDM &lt;gdm version&gt;
+ OK &lt;server&gt;;&lt;server&gt;;...
+
+ &lt;server&gt; is &lt;display&gt;,&lt;logged in user&gt;
+
+ &lt;logged in user&gt; can be empty in case no one logged in yet
+
ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
200 = Too many messages
999 = Unknown error
</screen>
</sect3>
+
+ <sect3 id="attachedservers">
+ <title>ATTACHED_SERVERS</title>
+ <screen>
+ATTACHED_SERVERS: List all attached displays. Doesn't list XDMCP
+ and xnest non-attached displays.
+Note: This command used to be named CONSOLE_SERVERS,
+ which is still recognized for backwards
+ compatibility. The optional pattern argument
+ is supported as of version 2.8.0.0.
+Supported since: 2.2.4.0
+Arguments: &lt;pattern&gt; (optional)
+ With no argument, all attached displays are returned. The optional
+ &lt;pattern&gt; is a string that may contain glob characters '*', '?', and
+ '[]'. Only displays that match the pattern will be returned.
+Answers:
+ OK &lt;server&gt;;&lt;server&gt;;...
+
+ &lt;server&gt; is &lt;display&gt;,&lt;logged in user&gt;,&lt;vt or xnest display&gt;
+
+ &lt;logged in user&gt; can be empty in case no one logged
+ in yet, and &lt;vt&gt; can be -1 if it's not known or not
+ supported (on non-Linux for example). If the display is an
+ xnest display and is a console one (that is, it is an xnest
+ inside another console display) it is listed and instead of
+ vt, it lists the parent display in standard form.
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 1 = Not implemented
+ 200 = Too many messages
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
<sect3 id="authlocal">
<title>AUTH_LOCAL</title>
<screen>
@@ -3913,29 +3983,16 @@ Answers:
</screen>
</sect3>
- <sect3 id="flexixserver">
- <title>FLEXI_XSERVER</title>
+ <sect3 id="close">
+ <title>CLOSE</title>
<screen>
-FLEXI_XSERVER: Start a new X flexible display. Only supported on
- connection that passed AUTH_LOCAL
+CLOSE: Close sockets connection
Supported since: 2.2.4.0
-Arguments: &lt;xserver type&gt;
- If no arguments, starts the standard X server
-Answers:
- OK &lt;display&gt;
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 0 = Not implemented
- 1 = No more flexi servers
- 2 = Startup errors
- 3 = X failed
- 4 = X too busy
- 6 = No server binary
- 100 = Not authenticated
- 200 = Too many messages
- 999 = Unknown error
+Arguments: None
+Answers: None
</screen>
</sect3>
-
+
<sect3 id="flexixnest">
<title>FLEXI_XNEST</title>
<screen>
@@ -3975,134 +4032,66 @@ Answers:
</screen>
</sect3>
- <sect3 id="adddynamic">
- <title>ADD_DYNAMIC_DISPLAY</title>
- <screen>
-ADD_DYNAMIC_DISPLAY: Create a new server definition that will
- run on the specified display leaving, it
- in DISPLAY_CONFIG state.
-Supported since: 2.8.0.0
-Arguments: &lt;display to run on&gt;=&lt;server&gt;
- Where &lt;server&gt; is either a configuration named in the
- GDM configuration or a literal command name.
-Answers:
- OK &lt;display&gt;
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 0 = Not implemented
- 2 = Existing display
- 3 = No server string
- 4 = Display startup failure
- 100 = Not authenticated
- 200 = Dynamic Displays not allowed
- 999 = Unknown error
- </screen>
- </sect3>
-
- <sect3 id="releasedynamic">
- <title>RELEASE_DYNAMIC_DISPLAYS</title>
- <screen>
-RELEASE_DYNAMIC_DISPLAYS: Release dynamic displays currently in
- DISPLAY_CONFIG state
-Supported since: 2.8.0.0
-Arguments: None
-Answers:
- OK &lt;display&gt;
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 0 = Not implemented
- 100 = Not authenticated
- 200 = Dynamic Displays not allowed
- 999 = Unknown error
- </screen>
- </sect3>
-
- <sect3 id="removedynamic">
- <title>REMOVE_DYNAMIC_DISPLAY</title>
+ <sect3 id="flexixserver">
+ <title>FLEXI_XSERVER</title>
<screen>
-REMOVE_DYNAMIC_DISPLAY: Remove a dynamic display, killing the server
- and purging the display configuration
-Supported since: 2.8.0.0
-Arguments: &lt;display to remove&gt;
+FLEXI_XSERVER: Start a new X flexible display. Only supported on
+ connection that passed AUTH_LOCAL
+Supported since: 2.2.4.0
+Arguments: &lt;xserver type&gt;
+ If no arguments, starts the standard X server
Answers:
OK &lt;display&gt;
ERROR &lt;err number&gt; &lt;english error description&gt;
0 = Not implemented
- 1 = Bad display number
+ 1 = No more flexi servers
+ 2 = Startup errors
+ 3 = X failed
+ 4 = X too busy
+ 6 = No server binary
100 = Not authenticated
- 200 = Dynamic Displays not allowed
- 999 = Unknown error
- </screen>
- </sect3>
-
- <sect3 id="attachedservers">
- <title>ATTACHED_SERVERS</title>
- <screen>
-ATTACHED_SERVERS: List all attached displays. Doesn't list XDMCP
- and xnest non-attached displays.
-Note: This command used to be named CONSOLE_SERVERS,
- which is still recognized for backwards
- compatibility. The optional pattern argument
- is supported as of version 2.8.0.0.
-Supported since: 2.2.4.0
-Arguments: &lt;pattern&gt; (optional)
- With no argument, all attached displays are returned. The optional
- &lt;pattern&gt; is a string that may contain glob characters '*', '?', and
- '[]'. Only displays that match the pattern will be returned.
-Answers:
- OK &lt;server&gt;;&lt;server&gt;;...
-
- &lt;server&gt; is &lt;display&gt;,&lt;logged in user&gt;,&lt;vt or xnest display&gt;
-
- &lt;logged in user&gt; can be empty in case no one logged
- in yet, and &lt;vt&gt; can be -1 if it's not known or not
- supported (on non-Linux for example). If the display is an
- xnest display and is a console one (that is, it is an xnest
- inside another console display) it is listed and instead of
- vt, it lists the parent display in standard form.
-
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 1 = Not implemented
200 = Too many messages
999 = Unknown error
</screen>
</sect3>
-
- <sect3 id="allservers">
- <title>ALL_SERVERS</title>
+
+ <sect3 id="getconfig">
+ <title>GET_CONFIG</title>
<screen>
-ALL_SERVERS: List all displays, including console, remote, xnest.
- This can, for example, be useful to figure out if
- the display you are on is managed by the gdm daemon,
- by seeing if it is in the list. It is also somewhat
- like the 'w' command but for graphical sessions.
-Supported since: 2.4.2.96
-Arguments: None
+GET_CONFIG: Get configuration value for key. Useful so
+ that other applications can request configuration
+ information from GDM. Any key defined as GDM_KEY_*
+ in gdm.h is supported. Starting with version 2.13.0.2
+ translated keys (such as &quot;greeter/GdmWelcome[cs]&quot; are
+ supported via GET_CONFIG. Also starting with version
+ 2.13.0.2 it is no longer necessary to include the
+ default value (i.e. you can use key &quot;greeter/IncludeAll&quot;
+ instead of having to use &quot;greeter/IncludeAll=false&quot;.
+Supported since: 2.6.0.9
+Arguments: &lt;key&gt;
Answers:
- OK &lt;server&gt;;&lt;server&gt;;...
-
- &lt;server&gt; is &lt;display&gt;,&lt;logged in user&gt;
-
- &lt;logged in user&gt; can be empty in case no one logged in yet
-
+ OK &lt;value&gt;
ERROR &lt;err number&gt; &lt;english error description&gt;
0 = Not implemented
+ 50 = Unsupported key
200 = Too many messages
999 = Unknown error
</screen>
</sect3>
-
- <sect3 id="getserverlist">
- <title>GET_SERVER_LIST</title>
+
+ <sect3 id="getconfigfile">
+ <title>GET_CONFIG_FILE</title>
<screen>
-GET_SERVER_LIST: Get a list of the server sections from
- the configuration file.
-Supported since: 2.13.0.4
+GET_CONFIG_FILE: Get config file location being used by
+ the daemon. If the GDM daemon was started
+ with the --config option, it will return
+ the value passed in via the argument.
+Supported since: 2.8.0.2
Arguments: None
Answers:
- OK &lt;value&gt;;&lt;value&gt;;...
+ OK &lt;full path to GDM configuration file&gt;
ERROR &lt;err number&gt; &lt;english error description&gt;
0 = Not implemented
- 1 = No servers found
- 50 = Unsupported key
200 = Too many messages
999 = Unknown error
</screen>
@@ -4138,125 +4127,24 @@ Answers:
</screen>
</sect3>
- <sect3 id="getconfig">
- <title>GET_CONFIG</title>
- <screen>
-GET_CONFIG: Get configuration value for key. Useful so
- that other applications can request configuration
- information from GDM. Any key defined as GDM_KEY_*
- in gdm.h is supported. Starting with version 2.13.0.2
- translated keys (such as &quot;greeter/GdmWelcome[cs]&quot; are
- supported via GET_CONFIG. Also starting with version
- 2.13.0.2 it is no longer necessary to include the
- default value (i.e. you can use key &quot;greeter/IncludeAll&quot;
- instead of having to use &quot;greeter/IncludeAll=false&quot;.
-Supported since: 2.6.0.9
-Arguments: &lt;key&gt;
-Answers:
- OK &lt;value&gt;
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 0 = Not implemented
- 50 = Unsupported key
- 200 = Too many messages
- 999 = Unknown error
- </screen>
- </sect3>
-
- <sect3 id="getconfigfile">
- <title>GET_CONFIG_FILE</title>
+ <sect3 id="getserverlist">
+ <title>GET_SERVER_LIST</title>
<screen>
-GET_CONFIG_FILE: Get config file location being used by
- the daemon. If the GDM daemon was started
- with the --config option, it will return
- the value passed in via the argument.
-Supported since: 2.8.0.2
+GET_SERVER_LIST: Get a list of the server sections from
+ the configuration file.
+Supported since: 2.13.0.4
Arguments: None
Answers:
- OK &lt;full path to GDM configuration file&gt;
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 0 = Not implemented
- 200 = Too many messages
- 999 = Unknown error
- </screen>
- </sect3>
-
- <sect3 id="updateconfig">
- <title>UPDATE_CONFIG</title>
- <screen>
-UPDATE_CONFIG: Tell the daemon to re-read a key from the
- GDM configuration file. Any user can request
- that values are re-read but the daemon will
- only do so if the file has been modified
- since GDM first read the file. Only users
- who can change the GDM configuration file
- (normally writable only by the root user) can
- actually modify the GDM configuration. This
- command is useful to cause the GDM to update
- itself to recognize a change made to the GDM
- configuration file by the root user.
-
- Starting with version 2.13.0.0, all GDM keys are
- supported except for the following:
-
- daemon/PidFile
- daemon/ConsoleNotify
- daemon/User
- daemon/Group
- daemon/LogDir
- daemon/ServAuthDir
- daemon/UserAuthDir
- daemon/UserAuthFile
- daemon/UserAuthFBDir
-
- GDM also supports the following Psuedokeys:
-
- xdmcp/PARAMETERS (2.3.90.2) updates the following:
- xdmcp/MaxPending
- xdmcp/MaxSessions
- xdmcp/MaxWait
- xdmcp/DisplaysPerHost
- xdmcp/HonorIndirect
- xdmcp/MaxPendingIndirect
- xdmcp/MaxWaitIndirect
- xdmcp/PingIntervalSeconds (only affects new connections)
-
- xservers/PARAMETERS (2.13.0.4) updates the following:
- all [server-foo] sections.
-
- Supported keys for previous versions of GDM:
-
- security/AllowRoot (2.3.90.2)
- security/AllowRemoteRoot (2.3.90.2)
- security/AllowRemoteAutoLogin (2.3.90.2)
- security/RetryDelay (2.3.90.2)
- security/DisallowTCP (2.4.2.0)
- daemon/Greeter (2.3.90.2)
- daemon/RemoteGreeter (2.3.90.2)
- xdmcp/Enable (2.3.90.2)
- xdmcp/Port (2.3.90.2)
- daemon/TimedLogin (2.3.90.3)
- daemon/TimedLoginEnable (2.3.90.3)
- daemon/TimedLoginDelay (2.3.90.3)
- greeter/SystemMenu (2.3.90.3)
- greeter/ConfigAvailable (2.3.90.3)
- greeter/ChooserButton (2.4.2.0)
- greeter/SoundOnLoginFile (2.5.90.0)
- daemon/AddGtkModules (2.5.90.0)
- daemon/GtkModulesList (2.5.90.0)
-Supported since: 2.3.90.2
-Arguments: &lt;key&gt;
- &lt;key&gt; is just the base part of the key such as
- &quot;security/AllowRemoteRoot&quot;
-Answers:
- OK
+ OK &lt;value&gt;;&lt;value&gt;;...
ERROR &lt;err number&gt; &lt;english error description&gt;
0 = Not implemented
+ 1 = No servers found
50 = Unsupported key
200 = Too many messages
999 = Unknown error
</screen>
</sect3>
-
+
<sect3 id="greeterpids">
<title>GREETERPIDS</title>
<screen>
@@ -4297,6 +4185,83 @@ Answers:
</screen>
</sect3>
+ <sect3 id="queryvt">
+ <title>QUERY_VT</title>
+ <screen>
+QUERY_VT: Ask the daemon about which VT we are currently on.
+ This is useful for logins which don't own
+ /dev/console but are still console logins. Only
+ supported on Linux currently, other places will
+ just get ERROR 8. This is also the way to query
+ if VT support is available in the daemon in the
+ first place. Only supported on connections that
+ passed AUTH_LOCAL.
+Supported since: 2.5.90.0
+Arguments: None
+Answers:
+ OK &lt;vt number&gt;
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
+ 8 = Virtual terminals not supported
+ 100 = Not authenticated
+ 200 = Too many messages
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
+ <sect3 id="releasedynamic">
+ <title>RELEASE_DYNAMIC_DISPLAYS</title>
+ <screen>
+RELEASE_DYNAMIC_DISPLAYS: Release dynamic displays currently in
+ DISPLAY_CONFIG state
+Supported since: 2.8.0.0
+Arguments: None
+Answers:
+ OK &lt;display&gt;
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
+ 100 = Not authenticated
+ 200 = Dynamic Displays not allowed
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
+ <sect3 id="removedynamic">
+ <title>REMOVE_DYNAMIC_DISPLAY</title>
+ <screen>
+REMOVE_DYNAMIC_DISPLAY: Remove a dynamic display, killing the server
+ and purging the display configuration
+Supported since: 2.8.0.0
+Arguments: &lt;display to remove&gt;
+Answers:
+ OK &lt;display&gt;
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
+ 1 = Bad display number
+ 100 = Not authenticated
+ 200 = Dynamic Displays not allowed
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
+ <sect3 id="serverbusy">
+ <title>SERVER_BUSY</title>
+ <screen>
+SERVER_BUSY: Returns true if half or more of the daemon's sockets
+ are busy, false otherwise. Used by slave programs
+ which want to ensure they do not overwhelm the
+ sever.
+Supported since: 2.13.0.8
+Arguments: None
+Answers:
+ OK &lt;value&gt;
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
+ 200 = Too many messages
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
<sect3 id="setlogoutaction">
<title>SET_LOGOUT_ACTION</title>
<screen>
@@ -4350,30 +4315,6 @@ Answers:
</screen>
</sect3>
- <sect3 id="queryvt">
- <title>QUERY_VT</title>
- <screen>
-QUERY_VT: Ask the daemon about which VT we are currently on.
- This is useful for logins which don't own
- /dev/console but are still console logins. Only
- supported on Linux currently, other places will
- just get ERROR 8. This is also the way to query
- if VT support is available in the daemon in the
- first place. Only supported on connections that
- passed AUTH_LOCAL.
-Supported since: 2.5.90.0
-Arguments: None
-Answers:
- OK &lt;vt number&gt;
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 0 = Not implemented
- 8 = Virtual terminals not supported
- 100 = Not authenticated
- 200 = Too many messages
- 999 = Unknown error
- </screen>
- </sect3>
-
<sect3 id="setvt">
<title>SET_VT</title>
<screen>
@@ -4396,15 +4337,97 @@ Answers:
</screen>
</sect3>
- <sect3 id="close">
- <title>CLOSE</title>
+ <sect3 id="updateconfig">
+ <title>UPDATE_CONFIG</title>
<screen>
-CLOSE: Close sockets connection
+UPDATE_CONFIG: Tell the daemon to re-read a key from the
+ GDM configuration file. Any user can request
+ that values are re-read but the daemon will
+ only do so if the file has been modified
+ since GDM first read the file. Only users
+ who can change the GDM configuration file
+ (normally writable only by the root user) can
+ actually modify the GDM configuration. This
+ command is useful to cause the GDM to update
+ itself to recognize a change made to the GDM
+ configuration file by the root user.
+
+ Starting with version 2.13.0.0, all GDM keys are
+ supported except for the following:
+
+ daemon/PidFile
+ daemon/ConsoleNotify
+ daemon/User
+ daemon/Group
+ daemon/LogDir
+ daemon/ServAuthDir
+ daemon/UserAuthDir
+ daemon/UserAuthFile
+ daemon/UserAuthFBDir
+
+ GDM also supports the following Psuedokeys:
+
+ xdmcp/PARAMETERS (2.3.90.2) updates the following:
+ xdmcp/MaxPending
+ xdmcp/MaxSessions
+ xdmcp/MaxWait
+ xdmcp/DisplaysPerHost
+ xdmcp/HonorIndirect
+ xdmcp/MaxPendingIndirect
+ xdmcp/MaxWaitIndirect
+ xdmcp/PingIntervalSeconds (only affects new connections)
+
+ xservers/PARAMETERS (2.13.0.4) updates the following:
+ all [server-foo] sections.
+
+ Supported keys for previous versions of GDM:
+
+ security/AllowRoot (2.3.90.2)
+ security/AllowRemoteRoot (2.3.90.2)
+ security/AllowRemoteAutoLogin (2.3.90.2)
+ security/RetryDelay (2.3.90.2)
+ security/DisallowTCP (2.4.2.0)
+ daemon/Greeter (2.3.90.2)
+ daemon/RemoteGreeter (2.3.90.2)
+ xdmcp/Enable (2.3.90.2)
+ xdmcp/Port (2.3.90.2)
+ daemon/TimedLogin (2.3.90.3)
+ daemon/TimedLoginEnable (2.3.90.3)
+ daemon/TimedLoginDelay (2.3.90.3)
+ greeter/SystemMenu (2.3.90.3)
+ greeter/ConfigAvailable (2.3.90.3)
+ greeter/ChooserButton (2.4.2.0)
+ greeter/SoundOnLoginFile (2.5.90.0)
+ daemon/AddGtkModules (2.5.90.0)
+ daemon/GtkModulesList (2.5.90.0)
+Supported since: 2.3.90.2
+Arguments: &lt;key&gt;
+ &lt;key&gt; is just the base part of the key such as
+ &quot;security/AllowRemoteRoot&quot;
+Answers:
+ OK
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
+ 50 = Unsupported key
+ 200 = Too many messages
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
+ <sect3 id="queryversion">
+ <title>VERSION</title>
+ <screen>
+VERSION: Query GDM version
Supported since: 2.2.4.0
Arguments: None
-Answers: None
+Answers:
+ GDM &lt;gdm version&gt;
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 200 = Too many messages
+ 999 = Unknown error
</screen>
</sect3>
+
</sect2>
</sect1>
@@ -4629,6 +4652,14 @@ Answers: None
number, run all newly created displays, or remove a display. The
<command>gdmdynamic</command> command can also be used to list all
attached displays, or only attached displays that match a pattern.
+ This program is designed to manage multiple simultaneous requests and
+ works to avoid flooding the daemon with requests. If the socket
+ connection is busy, it will sleep and retry a certain number of times
+ that can be tuned with the <command>-t</command> and
+ <command>-s</command> arguments. <command>gdmdynamic</command>
+ returns 1 on normal failure, and returns 2 if it is unable to
+ connect to the daemon. Callers can choose to call again if a
+ return code of 2 is received.
</para>
<variablelist>
@@ -4713,6 +4744,32 @@ Answers: None
</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term>-t RETRY</term>
+ <listitem>
+ <para>
+ If the daemon socket is busy, <command>gdmdynamic</command> will
+ retry to open the connection the specified RETRY number of times.
+ Default value is 15.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-s SLEEP</term>
+ <listitem>
+ <para>
+ If the daemon socket is busy, <command>gdmdynamic</command> will
+ sleep an amount of time between retries. A random number of
+ seconds 0-5 is added to the SLEEP value to help ensure that
+ multiple calls to gdmdynamic do not all try to restart at the
+ same time. A SLEEP value of zero causes the sleep time to be
+ 1 second. Default value is 8 seconds.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</sect3>
@@ -4980,7 +5037,7 @@ remote-flexi - In remote (XDMCP) &amp; flexi mode.
<para>
The <command>gdm-ssh-session</command> is normally executed by the
- GDM daemon when starting a securte remote connection through ssh.
+ GDM daemon when starting a secure remote connection through ssh.
It does not take any options.
</para>
</sect3>
diff --git a/docs/es/es.po b/docs/es/es.po
index 45682dd2..cc8f089e 100644
--- a/docs/es/es.po
+++ b/docs/es/es.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: es\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-02-02 17:06-0800\n"
+"POT-Creation-Date: 2006-02-08 19:44-0800\n"
"PO-Revision-Date: 2006-01-22 13:10+0100\n"
"Last-Translator: Francisco Javier F. Serrador <serrador@cvs.gnome.org>\n"
"Language-Team: Spanish <traductores@es.gnome.org>\n"
@@ -519,6 +519,7 @@ msgstr ""
"la entrada Ă©l mismo, permitiendo usar GDM para soportar terminales X."
#: ../C/gdm.xml:260 (para)
+#, fuzzy
msgid ""
"Flexible, or on demand displays, are started via the socket protocol with "
"the <command>gdmflexiserver</command> command. This feature is only "
@@ -533,7 +534,7 @@ msgid ""
"display. These are launched in a window in the user's current session. "
"Nested displays can be started even if not logged into the console and are "
"started by running the <command>gdmflexiserver -n</command> command. "
-"Flexible displays are not restarted when the user session ends. Flexbile "
+"Flexible displays are not restarted when the user session ends. Flexible "
"displays require virtual terminal (VT) support in the kernel, and will not "
"be available if not supported (such as on Solaris). Nested displays require "
"that the X server supports Xnest."
@@ -880,10 +881,11 @@ msgstr ""
"hacia atrás."
#: ../C/gdm.xml:484 (para)
+#, fuzzy
msgid ""
"If a user has no defined face image, GDM will use the \"stock_person\" icon "
"defined in the current GTK+ theme. If no such image is defined, it will "
-"fallback to the iamge specified in the <filename>DefaultFace</filename> "
+"fallback to the image specified in the <filename>DefaultFace</filename> "
"configuration option, normally /usr/share/pixmaps/nobody.png."
msgstr ""
"Si un usuario no tiene una imagen de rostro definida, GDM usará el icono "
@@ -5188,27 +5190,31 @@ msgid ""
msgstr ""
#: ../C/gdm.xml:3845 (screen)
-#, no-wrap
+#, fuzzy, no-wrap
msgid ""
"\n"
-"VERSION\n"
+"ADD_DYNAMIC_DISPLAY\n"
+"ALL_SERVERS\n"
+"ATTACHED_SERVERS\n"
"AUTH_LOCAL\n"
-"FLEXI_XSERVER\n"
+"CLOSE\n"
"FLEXI_XNEST\n"
-"ATTACHED_SERVERS\n"
-"ALL_SERVERS\n"
-"GET_SERVER_LIST\n"
-"GET_SERVER_DETAILS\n"
+"FLEXI_XSERVER\n"
"GET_CONFIG\n"
"GET_CONFIG_FILE\n"
-"UPDATE_CONFIG\n"
+"GET_SERVER_LIST\n"
+"GET_SERVER_DETAILS\n"
"GREETERPIDS\n"
"QUERY_LOGOUT_ACTION\n"
+"QUERY_VT\n"
+"RELEASE_DYNAMIC_DISPLAYS\n"
+"REMOVE_DYNAMIC_DISPLAY\n"
+"SERVER_BUSY\n"
"SET_LOGOUT_ACTION\n"
"SET_SAFE_LOGOUT_ACTION\n"
-"QUERY_VT\n"
"SET_VT\n"
-"CLOSE\n"
+"UPDATE_CONFIG\n"
+"VERSION\n"
" "
msgstr ""
"\n"
@@ -5232,46 +5238,131 @@ msgstr ""
"CLOSE\n"
" "
-#: ../C/gdm.xml:3866 (para)
+#: ../C/gdm.xml:3870 (para)
msgid ""
"These are described in detail below, including required arguments, response "
"format, and return codes."
msgstr ""
-#: ../C/gdm.xml:3872 (title)
-msgid "VERSION"
-msgstr "VERSION"
+#: ../C/gdm.xml:3876 (title)
+msgid "ADD_DYNAMIC_DISPLAY"
+msgstr "ADD_DYNAMIC_DISPLAY"
-#: ../C/gdm.xml:3873 (screen)
+#: ../C/gdm.xml:3877 (screen)
#, no-wrap
msgid ""
"\n"
-"VERSION: Query GDM version\n"
-"Supported since: 2.2.4.0\n"
+"ADD_DYNAMIC_DISPLAY: Create a new server definition that will\n"
+" run on the specified display leaving, it\n"
+" in DISPLAY_CONFIG state.\n"
+"Supported since: 2.8.0.0\n"
+"Arguments: &lt;display to run on&gt;=&lt;server&gt;\n"
+" Where &lt;server&gt; is either a configuration named in the\n"
+" GDM configuration or a literal command name.\n"
+"Answers:\n"
+" OK &lt;display&gt;\n"
+" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
+" 0 = Not implemented\n"
+" 2 = Existing display\n"
+" 3 = No server string\n"
+" 4 = Display startup failure\n"
+" 100 = Not authenticated\n"
+" 200 = Dynamic Displays not allowed\n"
+" 999 = Unknown error\n"
+" "
+msgstr ""
+"\n"
+"ADD_DYNAMIC_DISPLAY: Create a new server definition that will\n"
+" run on the specified display leaving, it\n"
+" in DISPLAY_CONFIG state.\n"
+"Supported since: 2.8.0.0\n"
+"Arguments: &lt;display to run on&gt;=&lt;server&gt;\n"
+" Where &lt;server&gt; is either a configuration named in the\n"
+" GDM configuration or a literal command name.\n"
+"Answers:\n"
+" OK &lt;display&gt;\n"
+" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
+" 0 = Not implemented\n"
+" 2 = Existing display\n"
+" 3 = No server string\n"
+" 4 = Display startup failure\n"
+" 100 = Not authenticated\n"
+" 200 = Dynamic Displays not allowed\n"
+" 999 = Unknown error\n"
+" "
+
+#: ../C/gdm.xml:3899 (title)
+msgid "ALL_SERVERS"
+msgstr "ALL_SERVERS"
+
+#: ../C/gdm.xml:3900 (screen)
+#, no-wrap
+msgid ""
+"\n"
+"ALL_SERVERS: List all displays, including console, remote, xnest.\n"
+" This can, for example, be useful to figure out if\n"
+" the display you are on is managed by the gdm daemon,\n"
+" by seeing if it is in the list. It is also somewhat\n"
+" like the 'w' command but for graphical sessions.\n"
+"Supported since: 2.4.2.96\n"
"Arguments: None\n"
"Answers:\n"
-" GDM &lt;gdm version&gt;\n"
+" OK &lt;server&gt;;&lt;server&gt;;...\n"
+"\n"
+" &lt;server&gt; is &lt;display&gt;,&lt;logged in user&gt;\n"
+"\n"
+" &lt;logged in user&gt; can be empty in case no one logged in yet\n"
+"\n"
" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
+" 0 = Not implemented\n"
" 200 = Too many messages\n"
" 999 = Unknown error\n"
" "
msgstr ""
+
+#: ../C/gdm.xml:3923 (title)
+msgid "ATTACHED_SERVERS"
+msgstr "ATTACHED_SERVERS"
+
+#: ../C/gdm.xml:3924 (screen)
+#, no-wrap
+msgid ""
"\n"
-"VERSION: Query GDM version\n"
+"ATTACHED_SERVERS: List all attached displays. Doesn't list XDMCP\n"
+" and xnest non-attached displays.\n"
+"Note: This command used to be named CONSOLE_SERVERS,\n"
+" which is still recognized for backwards\n"
+" compatibility. The optional pattern argument\n"
+" is supported as of version 2.8.0.0.\n"
"Supported since: 2.2.4.0\n"
-"Arguments: None\n"
+"Arguments: &lt;pattern&gt; (optional)\n"
+" With no argument, all attached displays are returned. The optional\n"
+" &lt;pattern&gt; is a string that may contain glob characters '*', '?', and\n"
+" '[]'. Only displays that match the pattern will be returned.\n"
"Answers:\n"
-" GDM &lt;gdm version&gt;\n"
+" OK &lt;server&gt;;&lt;server&gt;;...\n"
+"\n"
+" &lt;server&gt; is &lt;display&gt;,&lt;logged in user&gt;,&lt;vt or xnest display&gt;\n"
+"\n"
+" &lt;logged in user&gt; can be empty in case no one logged\n"
+" in yet, and &lt;vt&gt; can be -1 if it's not known or not\n"
+" supported (on non-Linux for example). If the display is an\n"
+" xnest display and is a console one (that is, it is an xnest\n"
+" inside another console display) it is listed and instead of\n"
+" vt, it lists the parent display in standard form.\n"
+"\n"
" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
+" 1 = Not implemented\n"
" 200 = Too many messages\n"
" 999 = Unknown error\n"
" "
+msgstr ""
-#: ../C/gdm.xml:3886 (title)
+#: ../C/gdm.xml:3956 (title)
msgid "AUTH_LOCAL"
msgstr "AUTH_LOCAL"
-#: ../C/gdm.xml:3887 (screen)
+#: ../C/gdm.xml:3957 (screen)
#, no-wrap
msgid ""
"\n"
@@ -5303,39 +5394,26 @@ msgid ""
" "
msgstr ""
-#: ../C/gdm.xml:3917 (title)
-msgid "FLEXI_XSERVER"
-msgstr "FLEXI_XSERVER"
+#: ../C/gdm.xml:3987 (title)
+msgid "CLOSE"
+msgstr "CLOSE"
-#: ../C/gdm.xml:3918 (screen)
+#: ../C/gdm.xml:3988 (screen)
#, no-wrap
msgid ""
"\n"
-"FLEXI_XSERVER: Start a new X flexible display. Only supported on\n"
-" connection that passed AUTH_LOCAL\n"
+"CLOSE: Close sockets connection\n"
"Supported since: 2.2.4.0\n"
-"Arguments: &lt;xserver type&gt;\n"
-" If no arguments, starts the standard X server\n"
-"Answers:\n"
-" OK &lt;display&gt;\n"
-" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
-" 0 = Not implemented\n"
-" 1 = No more flexi servers\n"
-" 2 = Startup errors\n"
-" 3 = X failed\n"
-" 4 = X too busy\n"
-" 6 = No server binary\n"
-" 100 = Not authenticated\n"
-" 200 = Too many messages\n"
-" 999 = Unknown error\n"
+"Arguments: None\n"
+"Answers: None\n"
" "
msgstr ""
-#: ../C/gdm.xml:3940 (title)
+#: ../C/gdm.xml:3997 (title)
msgid "FLEXI_XNEST"
msgstr "FLEXI_XNEST"
-#: ../C/gdm.xml:3941 (screen)
+#: ../C/gdm.xml:3998 (screen)
#, no-wrap
msgid ""
"\n"
@@ -5375,58 +5453,228 @@ msgid ""
" "
msgstr ""
-#: ../C/gdm.xml:3979 (title)
-msgid "ADD_DYNAMIC_DISPLAY"
-msgstr "ADD_DYNAMIC_DISPLAY"
+#: ../C/gdm.xml:4036 (title)
+msgid "FLEXI_XSERVER"
+msgstr "FLEXI_XSERVER"
-#: ../C/gdm.xml:3980 (screen)
+#: ../C/gdm.xml:4037 (screen)
#, no-wrap
msgid ""
"\n"
-"ADD_DYNAMIC_DISPLAY: Create a new server definition that will\n"
-" run on the specified display leaving, it\n"
-" in DISPLAY_CONFIG state.\n"
-"Supported since: 2.8.0.0\n"
-"Arguments: &lt;display to run on&gt;=&lt;server&gt;\n"
-" Where &lt;server&gt; is either a configuration named in the\n"
-" GDM configuration or a literal command name.\n"
+"FLEXI_XSERVER: Start a new X flexible display. Only supported on\n"
+" connection that passed AUTH_LOCAL\n"
+"Supported since: 2.2.4.0\n"
+"Arguments: &lt;xserver type&gt;\n"
+" If no arguments, starts the standard X server\n"
"Answers:\n"
" OK &lt;display&gt;\n"
" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
" 0 = Not implemented\n"
-" 2 = Existing display\n"
-" 3 = No server string\n"
-" 4 = Display startup failure\n"
+" 1 = No more flexi servers\n"
+" 2 = Startup errors\n"
+" 3 = X failed\n"
+" 4 = X too busy\n"
+" 6 = No server binary\n"
" 100 = Not authenticated\n"
-" 200 = Dynamic Displays not allowed\n"
+" 200 = Too many messages\n"
" 999 = Unknown error\n"
" "
msgstr ""
+
+#: ../C/gdm.xml:4059 (title)
+msgid "GET_CONFIG"
+msgstr "GET_CONFIG"
+
+#: ../C/gdm.xml:4060 (screen)
+#, no-wrap
+msgid ""
"\n"
-"ADD_DYNAMIC_DISPLAY: Create a new server definition that will\n"
-" run on the specified display leaving, it\n"
-" in DISPLAY_CONFIG state.\n"
-"Supported since: 2.8.0.0\n"
-"Arguments: &lt;display to run on&gt;=&lt;server&gt;\n"
-" Where &lt;server&gt; is either a configuration named in the\n"
-" GDM configuration or a literal command name.\n"
+"GET_CONFIG: Get configuration value for key. Useful so\n"
+" that other applications can request configuration\n"
+" information from GDM. Any key defined as GDM_KEY_*\n"
+" in gdm.h is supported. Starting with version 2.13.0.2\n"
+" translated keys (such as \"greeter/GdmWelcome[cs]\" are\n"
+" supported via GET_CONFIG. Also starting with version\n"
+" 2.13.0.2 it is no longer necessary to include the\n"
+" default value (i.e. you can use key \"greeter/IncludeAll\"\n"
+" instead of having to use \"greeter/IncludeAll=false\". \n"
+"Supported since: 2.6.0.9\n"
+"Arguments: &lt;key&gt;\n"
"Answers:\n"
-" OK &lt;display&gt;\n"
+" OK &lt;value&gt;\n"
+" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
+" 0 = Not implemented\n"
+" 50 = Unsupported key\n"
+" 200 = Too many messages\n"
+" 999 = Unknown error\n"
+" "
+msgstr ""
+
+#: ../C/gdm.xml:4083 (title)
+msgid "GET_CONFIG_FILE"
+msgstr "GET_CONFIG_FILE"
+
+#: ../C/gdm.xml:4084 (screen)
+#, no-wrap
+msgid ""
+"\n"
+"GET_CONFIG_FILE: Get config file location being used by\n"
+" the daemon. If the GDM daemon was started\n"
+" with the --config option, it will return\n"
+" the value passed in via the argument.\n"
+"Supported since: 2.8.0.2\n"
+"Arguments: None\n"
+"Answers:\n"
+" OK &lt;full path to GDM configuration file&gt;\n"
+" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
+" 0 = Not implemented\n"
+" 200 = Too many messages\n"
+" 999 = Unknown error\n"
+" "
+msgstr ""
+
+#: ../C/gdm.xml:4101 (title)
+msgid "GET_SERVER_DETAILS"
+msgstr "GET_SERVER_DETAILS"
+
+#: ../C/gdm.xml:4102 (screen)
+#, no-wrap
+msgid ""
+"\n"
+"GET_SERVER_DETAILS: Get detail information for a specific server.\n"
+"Supported since: 2.13.0.4\n"
+"Arguments: &lt;server&gt; &lt;key&gt;\n"
+" Key values include:\n"
+" NAME - Returns the server name\n"
+" COMMAND - Returns the server command\n"
+" FLEXIBLE - Returns \"true\" if flexible, \"false\"\n"
+" otherwise\n"
+" CHOOSABLE - Returns \"true\" if choosable, \"false\"\n"
+" otherwise\n"
+" HANDLED - Returns \"true\" if handled, \"false\"\n"
+" otherwise\n"
+" CHOOSER - Returns \"true\" if chooser, \"false\"\n"
+" otherwise\n"
+" PRIORITY - Returns process priority\n"
+"Answers:\n"
+" OK &lt;value&gt;\n"
+" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
+" 0 = Not implemented\n"
+" 1 = Server not found\n"
+" 2 = Key not valid\n"
+" 50 = Unsupported key\n"
+" 200 = Too many messages\n"
+" 999 = Unknown error\n"
+" "
+msgstr ""
+
+#: ../C/gdm.xml:4131 (title)
+msgid "GET_SERVER_LIST"
+msgstr "GET_SERVER_LIST"
+
+#: ../C/gdm.xml:4132 (screen)
+#, no-wrap
+msgid ""
+"\n"
+"GET_SERVER_LIST: Get a list of the server sections from\n"
+" the configuration file.\n"
+"Supported since: 2.13.0.4\n"
+"Arguments: None\n"
+"Answers:\n"
+" OK &lt;value&gt;;&lt;value&gt;;...\n"
+" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
+" 0 = Not implemented\n"
+" 1 = No servers found\n"
+" 50 = Unsupported key\n"
+" 200 = Too many messages\n"
+" 999 = Unknown error\n"
+" "
+msgstr ""
+
+#: ../C/gdm.xml:4149 (title)
+msgid "GREETERPIDS"
+msgstr "GREETERPIDS"
+
+#: ../C/gdm.xml:4150 (screen)
+#, no-wrap
+msgid ""
+"\n"
+"GREETERPIDS: List all greeter pids so that one can send HUP\n"
+" to them for config rereading. Of course one\n"
+" must be root to do that.\n"
+"Supported since: 2.3.90.2\n"
+"Arguments: None\n"
+"Answers:\n"
+" OK &lt;pid&gt;;&lt;pid&gt;;...\n"
+" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
+" 0 = Not implemented\n"
+" 200 = Too many messages\n"
+" 999 = Unknown error\n"
+" "
+msgstr ""
+
+#: ../C/gdm.xml:4166 (title)
+msgid "QUERY_LOGOUT_ACTION"
+msgstr "QUERY_LOGOUT_ACTION"
+
+#: ../C/gdm.xml:4167 (screen)
+#, no-wrap
+msgid ""
+"\n"
+"QUERY_LOGOUT_ACTION: Query which logout actions are possible\n"
+" Only supported on connections that passed\n"
+" AUTH_LOCAL.\n"
+"Supported since: 2.5.90.0\n"
+"Answers:\n"
+" OK &lt;action&gt;;&lt;action&gt;;...\n"
+" Where action is one of HALT, REBOOT or SUSPEND. An\n"
+" empty list can also be returned if no action is possible.\n"
+" A '!' is appended to an action if it was already set with\n"
+" SET_LOGOUT_ACTION or SET_SAFE_LOGOUT_ACTION. Note that\n"
+" SET_LOGOUT_ACTION has precedence over\n"
+" SET_SAFE_LOGOUT_ACTION.\n"
" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
" 0 = Not implemented\n"
-" 2 = Existing display\n"
-" 3 = No server string\n"
-" 4 = Display startup failure\n"
" 100 = Not authenticated\n"
-" 200 = Dynamic Displays not allowed\n"
+" 200 = Too many messages\n"
" 999 = Unknown error\n"
" "
+msgstr ""
+
+#: ../C/gdm.xml:4189 (title)
+msgid "QUERY_VT"
+msgstr "QUERY_VT"
-#: ../C/gdm.xml:4002 (title)
+#: ../C/gdm.xml:4190 (screen)
+#, no-wrap
+msgid ""
+"\n"
+"QUERY_VT: Ask the daemon about which VT we are currently on.\n"
+" This is useful for logins which don't own\n"
+" /dev/console but are still console logins. Only\n"
+" supported on Linux currently, other places will\n"
+" just get ERROR 8. This is also the way to query\n"
+" if VT support is available in the daemon in the\n"
+" first place. Only supported on connections that\n"
+" passed AUTH_LOCAL.\n"
+"Supported since: 2.5.90.0\n"
+"Arguments: None\n"
+"Answers:\n"
+" OK &lt;vt number&gt;\n"
+" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
+" 0 = Not implemented\n"
+" 8 = Virtual terminals not supported\n"
+" 100 = Not authenticated\n"
+" 200 = Too many messages\n"
+" 999 = Unknown error\n"
+" "
+msgstr ""
+
+#: ../C/gdm.xml:4213 (title)
msgid "RELEASE_DYNAMIC_DISPLAYS"
msgstr "RELEASE_DYNAMIC_DISPLAYS"
-#: ../C/gdm.xml:4003 (screen)
+#: ../C/gdm.xml:4214 (screen)
#, no-wrap
msgid ""
"\n"
@@ -5457,11 +5705,11 @@ msgstr ""
" 999 = Unknown error\n"
" "
-#: ../C/gdm.xml:4019 (title)
+#: ../C/gdm.xml:4230 (title)
msgid "REMOVE_DYNAMIC_DISPLAY"
msgstr "REMOVE_DYNAMIC_DISPLAY"
-#: ../C/gdm.xml:4020 (screen)
+#: ../C/gdm.xml:4231 (screen)
#, no-wrap
msgid ""
"\n"
@@ -5494,188 +5742,138 @@ msgstr ""
" 999 = Unknown error\n"
" "
-#: ../C/gdm.xml:4037 (title)
-msgid "ATTACHED_SERVERS"
-msgstr "ATTACHED_SERVERS"
-
-#: ../C/gdm.xml:4038 (screen)
-#, no-wrap
-msgid ""
-"\n"
-"ATTACHED_SERVERS: List all attached displays. Doesn't list XDMCP\n"
-" and xnest non-attached displays.\n"
-"Note: This command used to be named CONSOLE_SERVERS,\n"
-" which is still recognized for backwards\n"
-" compatibility. The optional pattern argument\n"
-" is supported as of version 2.8.0.0.\n"
-"Supported since: 2.2.4.0\n"
-"Arguments: &lt;pattern&gt; (optional)\n"
-" With no argument, all attached displays are returned. The optional\n"
-" &lt;pattern&gt; is a string that may contain glob characters '*', '?', and\n"
-" '[]'. Only displays that match the pattern will be returned.\n"
-"Answers:\n"
-" OK &lt;server&gt;;&lt;server&gt;;...\n"
-"\n"
-" &lt;server&gt; is &lt;display&gt;,&lt;logged in user&gt;,&lt;vt or xnest display&gt;\n"
-"\n"
-" &lt;logged in user&gt; can be empty in case no one logged\n"
-" in yet, and &lt;vt&gt; can be -1 if it's not known or not\n"
-" supported (on non-Linux for example). If the display is an\n"
-" xnest display and is a console one (that is, it is an xnest\n"
-" inside another console display) it is listed and instead of\n"
-" vt, it lists the parent display in standard form.\n"
-"\n"
-" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
-" 1 = Not implemented\n"
-" 200 = Too many messages\n"
-" 999 = Unknown error\n"
-" "
-msgstr ""
-
-#: ../C/gdm.xml:4070 (title)
-msgid "ALL_SERVERS"
+#: ../C/gdm.xml:4248 (title)
+#, fuzzy
+msgid "SERVER_BUSY"
msgstr "ALL_SERVERS"
-#: ../C/gdm.xml:4071 (screen)
-#, no-wrap
+#: ../C/gdm.xml:4249 (screen)
+#, fuzzy, no-wrap
msgid ""
"\n"
-"ALL_SERVERS: List all displays, including console, remote, xnest.\n"
-" This can, for example, be useful to figure out if\n"
-" the display you are on is managed by the gdm daemon,\n"
-" by seeing if it is in the list. It is also somewhat\n"
-" like the 'w' command but for graphical sessions.\n"
-"Supported since: 2.4.2.96\n"
+"SERVER_BUSY: Returns true if half or more of the daemon's sockets\n"
+" are busy, false otherwise. Used by slave programs\n"
+" which want to ensure they do not overwhelm the \n"
+" sever.\n"
+"Supported since: 2.13.0.8\n"
"Arguments: None\n"
"Answers:\n"
-" OK &lt;server&gt;;&lt;server&gt;;...\n"
-"\n"
-" &lt;server&gt; is &lt;display&gt;,&lt;logged in user&gt;\n"
-"\n"
-" &lt;logged in user&gt; can be empty in case no one logged in yet\n"
-"\n"
+" OK &lt;value&gt;\n"
" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
" 0 = Not implemented\n"
" 200 = Too many messages\n"
" 999 = Unknown error\n"
" "
msgstr ""
-
-#: ../C/gdm.xml:4094 (title)
-msgid "GET_SERVER_LIST"
-msgstr "GET_SERVER_LIST"
-
-#: ../C/gdm.xml:4095 (screen)
-#, no-wrap
-msgid ""
"\n"
-"GET_SERVER_LIST: Get a list of the server sections from\n"
-" the configuration file.\n"
-"Supported since: 2.13.0.4\n"
+"RELEASE_DYNAMIC_DISPLAYS: Release dynamic displays currently in \n"
+" DISPLAY_CONFIG state\n"
+"Supported since: 2.8.0.0\n"
"Arguments: None\n"
"Answers:\n"
-" OK &lt;value&gt;;&lt;value&gt;;...\n"
+" OK &lt;display&gt;\n"
" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
" 0 = Not implemented\n"
-" 1 = No servers found\n"
-" 50 = Unsupported key\n"
-" 200 = Too many messages\n"
+" 100 = Not authenticated\n"
+" 200 = Dynamic Displays not allowed\n"
" 999 = Unknown error\n"
" "
-msgstr ""
-#: ../C/gdm.xml:4112 (title)
-msgid "GET_SERVER_DETAILS"
-msgstr "GET_SERVER_DETAILS"
+#: ../C/gdm.xml:4266 (title)
+msgid "SET_LOGOUT_ACTION"
+msgstr "SET_LOGOUT_ACTION"
-#: ../C/gdm.xml:4113 (screen)
+#: ../C/gdm.xml:4267 (screen)
#, no-wrap
msgid ""
"\n"
-"GET_SERVER_DETAILS: Get detail information for a specific server.\n"
-"Supported since: 2.13.0.4\n"
-"Arguments: &lt;server&gt; &lt;key&gt;\n"
-" Key values include:\n"
-" NAME - Returns the server name\n"
-" COMMAND - Returns the server command\n"
-" FLEXIBLE - Returns \"true\" if flexible, \"false\"\n"
-" otherwise\n"
-" CHOOSABLE - Returns \"true\" if choosable, \"false\"\n"
-" otherwise\n"
-" HANDLED - Returns \"true\" if handled, \"false\"\n"
-" otherwise\n"
-" CHOOSER - Returns \"true\" if chooser, \"false\"\n"
-" otherwise\n"
-" PRIORITY - Returns process priority\n"
+"SET_LOGOUT_ACTION: Tell the daemon to halt/restart/suspend after\n"
+" slave process exits. Only supported on\n"
+" connections that passed AUTH_LOCAL.\n"
+"Supported since: 2.5.90.0\n"
+"Arguments: &lt;action&gt;\n"
+" NONE Set exit action to 'none'\n"
+" HALT Set exit action to 'halt'\n"
+" REBOOT Set exit action to 'reboot'\n"
+" SUSPEND Set exit action to 'suspend'\n"
"Answers:\n"
-" OK &lt;value&gt;\n"
+" OK\n"
" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
" 0 = Not implemented\n"
-" 1 = Server not found\n"
-" 2 = Key not valid\n"
-" 50 = Unsupported key\n"
+" 7 = Unknown logout action, or not available\n"
+" 100 = Not authenticated\n"
" 200 = Too many messages\n"
" 999 = Unknown error\n"
" "
msgstr ""
-#: ../C/gdm.xml:4142 (title)
-msgid "GET_CONFIG"
-msgstr "GET_CONFIG"
+#: ../C/gdm.xml:4289 (title)
+msgid "SET_SAFE_LOGOUT_ACTION"
+msgstr "SET_SAFE_LOGOUT_ACTION"
-#: ../C/gdm.xml:4143 (screen)
+#: ../C/gdm.xml:4290 (screen)
#, no-wrap
msgid ""
"\n"
-"GET_CONFIG: Get configuration value for key. Useful so\n"
-" that other applications can request configuration\n"
-" information from GDM. Any key defined as GDM_KEY_*\n"
-" in gdm.h is supported. Starting with version 2.13.0.2\n"
-" translated keys (such as \"greeter/GdmWelcome[cs]\" are\n"
-" supported via GET_CONFIG. Also starting with version\n"
-" 2.13.0.2 it is no longer necessary to include the\n"
-" default value (i.e. you can use key \"greeter/IncludeAll\"\n"
-" instead of having to use \"greeter/IncludeAll=false\". \n"
-"Supported since: 2.6.0.9\n"
-"Arguments: &lt;key&gt;\n"
+"SET_SAFE_LOGOUT_ACTION: Tell the daemon to halt/restart/suspend\n"
+" after everybody logs out. If only one\n"
+" person logs out, then this is obviously\n"
+" the same as the SET_LOGOUT_ACTION. Note\n"
+" that SET_LOGOUT_ACTION has precedence\n"
+" over SET_SAFE_LOGOUT_ACTION if it is set\n"
+" to something other then NONE. If no one\n"
+" is logged in, then the action takes effect\n"
+" effect immediately. Only supported on\n"
+" connections that passed AUTH_LOCAL.\n"
+"Supported since: 2.5.90.0\n"
+"Arguments: &lt;action&gt;\n"
+" NONE Set exit action to 'none'\n"
+" HALT Set exit action to 'halt'\n"
+" REBOOT Set exit action to 'reboot'\n"
+" SUSPEND Set exit action to 'suspend'\n"
"Answers:\n"
-" OK &lt;value&gt;\n"
+" OK\n"
" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
" 0 = Not implemented\n"
-" 50 = Unsupported key\n"
+" 7 = Unknown logout action, or not available\n"
+" 100 = Not authenticated\n"
" 200 = Too many messages\n"
" 999 = Unknown error\n"
" "
msgstr ""
-#: ../C/gdm.xml:4166 (title)
-msgid "GET_CONFIG_FILE"
-msgstr "GET_CONFIG_FILE"
+#: ../C/gdm.xml:4319 (title)
+msgid "SET_VT"
+msgstr "SET_VT"
-#: ../C/gdm.xml:4167 (screen)
+#: ../C/gdm.xml:4320 (screen)
#, no-wrap
msgid ""
"\n"
-"GET_CONFIG_FILE: Get config file location being used by\n"
-" the daemon. If the GDM daemon was started\n"
-" with the --config option, it will return\n"
-" the value passed in via the argument.\n"
-"Supported since: 2.8.0.2\n"
-"Arguments: None\n"
+"SET_VT: Change to the specified virtual terminal.\n"
+" This is useful for logins which don't own /dev/console\n"
+" but are still console logins. Only supported on Linux\n"
+" currently, other places will just get ERROR 8.\n"
+" Only supported on connections that passed AUTH_LOCAL.\n"
+"Supported since: 2.5.90.0\n"
+"Arguments: &lt;vt&gt;\n"
"Answers:\n"
-" OK &lt;full path to GDM configuration file&gt;\n"
+" OK\n"
" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
" 0 = Not implemented\n"
+" 8 = Virtual terminals not supported\n"
+" 9 = Invalid virtual terminal number\n"
+" 100 = Not authenticated\n"
" 200 = Too many messages\n"
" 999 = Unknown error\n"
" "
msgstr ""
-#: ../C/gdm.xml:4184 (title)
+#: ../C/gdm.xml:4341 (title)
msgid "UPDATE_CONFIG"
msgstr "UPDATE_CONFIG"
-#: ../C/gdm.xml:4185 (screen)
+#: ../C/gdm.xml:4342 (screen)
#, no-wrap
msgid ""
"\n"
@@ -5753,205 +5951,50 @@ msgid ""
" "
msgstr ""
-#: ../C/gdm.xml:4261 (title)
-msgid "GREETERPIDS"
-msgstr "GREETERPIDS"
+#: ../C/gdm.xml:4418 (title)
+msgid "VERSION"
+msgstr "VERSION"
-#: ../C/gdm.xml:4262 (screen)
+#: ../C/gdm.xml:4419 (screen)
#, no-wrap
msgid ""
"\n"
-"GREETERPIDS: List all greeter pids so that one can send HUP\n"
-" to them for config rereading. Of course one\n"
-" must be root to do that.\n"
-"Supported since: 2.3.90.2\n"
+"VERSION: Query GDM version\n"
+"Supported since: 2.2.4.0\n"
"Arguments: None\n"
"Answers:\n"
-" OK &lt;pid&gt;;&lt;pid&gt;;...\n"
-" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
-" 0 = Not implemented\n"
-" 200 = Too many messages\n"
-" 999 = Unknown error\n"
-" "
-msgstr ""
-
-#: ../C/gdm.xml:4278 (title)
-msgid "QUERY_LOGOUT_ACTION"
-msgstr "QUERY_LOGOUT_ACTION"
-
-#: ../C/gdm.xml:4279 (screen)
-#, no-wrap
-msgid ""
-"\n"
-"QUERY_LOGOUT_ACTION: Query which logout actions are possible\n"
-" Only supported on connections that passed\n"
-" AUTH_LOCAL.\n"
-"Supported since: 2.5.90.0\n"
-"Answers:\n"
-" OK &lt;action&gt;;&lt;action&gt;;...\n"
-" Where action is one of HALT, REBOOT or SUSPEND. An\n"
-" empty list can also be returned if no action is possible.\n"
-" A '!' is appended to an action if it was already set with\n"
-" SET_LOGOUT_ACTION or SET_SAFE_LOGOUT_ACTION. Note that\n"
-" SET_LOGOUT_ACTION has precedence over\n"
-" SET_SAFE_LOGOUT_ACTION.\n"
-" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
-" 0 = Not implemented\n"
-" 100 = Not authenticated\n"
-" 200 = Too many messages\n"
-" 999 = Unknown error\n"
-" "
-msgstr ""
-
-#: ../C/gdm.xml:4301 (title)
-msgid "SET_LOGOUT_ACTION"
-msgstr "SET_LOGOUT_ACTION"
-
-#: ../C/gdm.xml:4302 (screen)
-#, no-wrap
-msgid ""
-"\n"
-"SET_LOGOUT_ACTION: Tell the daemon to halt/restart/suspend after\n"
-" slave process exits. Only supported on\n"
-" connections that passed AUTH_LOCAL.\n"
-"Supported since: 2.5.90.0\n"
-"Arguments: &lt;action&gt;\n"
-" NONE Set exit action to 'none'\n"
-" HALT Set exit action to 'halt'\n"
-" REBOOT Set exit action to 'reboot'\n"
-" SUSPEND Set exit action to 'suspend'\n"
-"Answers:\n"
-" OK\n"
-" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
-" 0 = Not implemented\n"
-" 7 = Unknown logout action, or not available\n"
-" 100 = Not authenticated\n"
-" 200 = Too many messages\n"
-" 999 = Unknown error\n"
-" "
-msgstr ""
-
-#: ../C/gdm.xml:4324 (title)
-msgid "SET_SAFE_LOGOUT_ACTION"
-msgstr "SET_SAFE_LOGOUT_ACTION"
-
-#: ../C/gdm.xml:4325 (screen)
-#, no-wrap
-msgid ""
-"\n"
-"SET_SAFE_LOGOUT_ACTION: Tell the daemon to halt/restart/suspend\n"
-" after everybody logs out. If only one\n"
-" person logs out, then this is obviously\n"
-" the same as the SET_LOGOUT_ACTION. Note\n"
-" that SET_LOGOUT_ACTION has precedence\n"
-" over SET_SAFE_LOGOUT_ACTION if it is set\n"
-" to something other then NONE. If no one\n"
-" is logged in, then the action takes effect\n"
-" effect immediately. Only supported on\n"
-" connections that passed AUTH_LOCAL.\n"
-"Supported since: 2.5.90.0\n"
-"Arguments: &lt;action&gt;\n"
-" NONE Set exit action to 'none'\n"
-" HALT Set exit action to 'halt'\n"
-" REBOOT Set exit action to 'reboot'\n"
-" SUSPEND Set exit action to 'suspend'\n"
-"Answers:\n"
-" OK\n"
+" GDM &lt;gdm version&gt;\n"
" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
-" 0 = Not implemented\n"
-" 7 = Unknown logout action, or not available\n"
-" 100 = Not authenticated\n"
" 200 = Too many messages\n"
" 999 = Unknown error\n"
" "
msgstr ""
-
-#: ../C/gdm.xml:4354 (title)
-msgid "QUERY_VT"
-msgstr "QUERY_VT"
-
-#: ../C/gdm.xml:4355 (screen)
-#, no-wrap
-msgid ""
"\n"
-"QUERY_VT: Ask the daemon about which VT we are currently on.\n"
-" This is useful for logins which don't own\n"
-" /dev/console but are still console logins. Only\n"
-" supported on Linux currently, other places will\n"
-" just get ERROR 8. This is also the way to query\n"
-" if VT support is available in the daemon in the\n"
-" first place. Only supported on connections that\n"
-" passed AUTH_LOCAL.\n"
-"Supported since: 2.5.90.0\n"
+"VERSION: Query GDM version\n"
+"Supported since: 2.2.4.0\n"
"Arguments: None\n"
"Answers:\n"
-" OK &lt;vt number&gt;\n"
-" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
-" 0 = Not implemented\n"
-" 8 = Virtual terminals not supported\n"
-" 100 = Not authenticated\n"
-" 200 = Too many messages\n"
-" 999 = Unknown error\n"
-" "
-msgstr ""
-
-#: ../C/gdm.xml:4378 (title)
-msgid "SET_VT"
-msgstr "SET_VT"
-
-#: ../C/gdm.xml:4379 (screen)
-#, no-wrap
-msgid ""
-"\n"
-"SET_VT: Change to the specified virtual terminal.\n"
-" This is useful for logins which don't own /dev/console\n"
-" but are still console logins. Only supported on Linux\n"
-" currently, other places will just get ERROR 8.\n"
-" Only supported on connections that passed AUTH_LOCAL.\n"
-"Supported since: 2.5.90.0\n"
-"Arguments: &lt;vt&gt;\n"
-"Answers:\n"
-" OK\n"
+" GDM &lt;gdm version&gt;\n"
" ERROR &lt;err number&gt; &lt;english error description&gt;\n"
-" 0 = Not implemented\n"
-" 8 = Virtual terminals not supported\n"
-" 9 = Invalid virtual terminal number\n"
-" 100 = Not authenticated\n"
" 200 = Too many messages\n"
" 999 = Unknown error\n"
" "
-msgstr ""
-
-#: ../C/gdm.xml:4400 (title)
-msgid "CLOSE"
-msgstr "CLOSE"
-#: ../C/gdm.xml:4401 (screen)
-#, no-wrap
-msgid ""
-"\n"
-"CLOSE: Close sockets connection\n"
-"Supported since: 2.2.4.0\n"
-"Arguments: None\n"
-"Answers: None\n"
-" "
-msgstr ""
-
-#: ../C/gdm.xml:4414 (title)
+#: ../C/gdm.xml:4437 (title)
msgid "GDM Commands"
msgstr "Comandos de GDM"
-#: ../C/gdm.xml:4417 (title)
+#: ../C/gdm.xml:4440 (title)
msgid "GDM User Commands"
msgstr "Comandos de usuario de GDM"
-#: ../C/gdm.xml:4419 (para)
+#: ../C/gdm.xml:4442 (para)
msgid ""
"The GDM package provides the following different commands in EXPANDED_BINDIR "
"intended to be used by the end-user:"
msgstr ""
-#: ../C/gdm.xml:4425 (title)
+#: ../C/gdm.xml:4448 (title)
msgid ""
"<command>gdmXnestchooser</command> and <command>gdmXnest</command> Command "
"Line Options"
@@ -5959,7 +6002,7 @@ msgstr ""
"Opciones de lĂ­nea de comandos de <command>gdmXnestchooser</command> y "
"<command>gdmXnest</command>"
-#: ../C/gdm.xml:4428 (para)
+#: ../C/gdm.xml:4451 (para)
msgid ""
"The <command>gdmXnestchooser</command> command automatically gets the "
"correct display number, sets up access, and runs <command>Xnest</command> "
@@ -5972,78 +6015,78 @@ msgid ""
"this command also supports standard GNOME options."
msgstr ""
-#: ../C/gdm.xml:4443 (title)
+#: ../C/gdm.xml:4466 (title)
msgid "<command>gdmXnestchooser</command> Command Line Options"
msgstr "Opciones de lĂ­nea de comandos de <command>gdmXnestchooser</command>"
-#: ../C/gdm.xml:4446 (term)
+#: ../C/gdm.xml:4469 (term)
msgid "-x, --xnest=STRING"
msgstr "-x, --xnest=STRING"
-#: ../C/gdm.xml:4448 (para)
+#: ../C/gdm.xml:4471 (para)
msgid "Xnest command line, default is \"Xnest\""
msgstr "Línea de comandos de Xnest, lo predeterminado es «Xnest»"
-#: ../C/gdm.xml:4455 (term)
+#: ../C/gdm.xml:4478 (term)
msgid "-o, --xnest-extra-options=OPTIONS"
msgstr "-o, --xnest-extra-options=OPCIONES"
-#: ../C/gdm.xml:4457 (para)
+#: ../C/gdm.xml:4480 (para)
msgid "Extra options for Xnest, default is no options."
msgstr "Opciones extra para Xnest, lo predeterminado es sin opciones."
-#: ../C/gdm.xml:4464 (term)
+#: ../C/gdm.xml:4487 (term)
msgid "-n, --no-query"
msgstr "-n, --no-query"
-#: ../C/gdm.xml:4466 (para)
+#: ../C/gdm.xml:4489 (para)
msgid "Just run Xnest, no query (no chooser)"
msgstr "Tan sĂłlo ejecute Xnest, sin consulta (sin selector)"
-#: ../C/gdm.xml:4473 (term)
+#: ../C/gdm.xml:4496 (term)
msgid "-d, --direct"
msgstr "-d, --direct"
-#: ../C/gdm.xml:4475 (para)
+#: ../C/gdm.xml:4498 (para)
msgid "Do direct query instead of indirect (chooser)"
msgstr "Hace una consulta directa en lugar de indirecta (selector)"
-#: ../C/gdm.xml:4482 (term)
+#: ../C/gdm.xml:4505 (term)
msgid "-B, --broadcast"
msgstr "-B, --broadcast"
-#: ../C/gdm.xml:4484 (para)
+#: ../C/gdm.xml:4507 (para)
msgid "Run broadcast instead of indirect (chooser)"
msgstr "Ejecutar en difusiĂłn en vez de indirecto (selector)"
-#: ../C/gdm.xml:4491 (term)
+#: ../C/gdm.xml:4514 (term)
msgid "-b, --background"
msgstr "-b, --background"
-#: ../C/gdm.xml:4493 (para)
+#: ../C/gdm.xml:4516 (para)
msgid "Run in background"
msgstr "Ejecutar en segundo plano"
-#: ../C/gdm.xml:4500 (term)
+#: ../C/gdm.xml:4523 (term)
msgid "--no-gdm-check"
msgstr "--no-gdm-check"
-#: ../C/gdm.xml:4502 (para)
+#: ../C/gdm.xml:4525 (para)
msgid "Don't check for running GDM"
msgstr "No comprueba si hay un GDM funcionando"
-#: ../C/gdm.xml:4511 (title) ../C/gdm.xml:4555
+#: ../C/gdm.xml:4534 (title) ../C/gdm.xml:4578
msgid "<command>gdmflexichooser</command> Command Line Options"
msgstr "Opciones de lĂ­nea de comandos de <command>gdmflexichooser</command>"
-#: ../C/gdm.xml:4513 (para)
+#: ../C/gdm.xml:4536 (para)
msgid ""
"The <command>gdmflexiserver</command> command provides three features. It "
"can be used to run flexible (on demand) X displays, to run a flexible "
"display via Xnest, and to send commands to the GDM daemon process."
msgstr ""
-#: ../C/gdm.xml:4520 (para)
+#: ../C/gdm.xml:4543 (para)
msgid ""
"Starting a flexible X display will normally lock the current session with a "
"screensaver and will redisplay the GDM login screen so a second user can log "
@@ -6057,7 +6100,7 @@ msgid ""
"normally have to enter the password to unlock the screen."
msgstr ""
-#: ../C/gdm.xml:4534 (para)
+#: ../C/gdm.xml:4557 (para)
msgid ""
"Flexible displays started via Xnest works on systems that do not support "
"virtual terminals. This option starts a flexible display in a window in the "
@@ -6065,48 +6108,48 @@ msgid ""
"as a flexible server started via virtual terminals."
msgstr ""
-#: ../C/gdm.xml:4542 (para)
+#: ../C/gdm.xml:4565 (para)
msgid ""
"The <command>gdmflexiserver --command</command> option provides a way to "
"send commands to the GDM daemon and can be used to debug problems or to "
"change the GDM configuration."
msgstr ""
-#: ../C/gdm.xml:4548 (para)
+#: ../C/gdm.xml:4571 (para)
msgid ""
"In addition to the following options, <command>gdmflexiserver</command> also "
"supports standard GNOME options."
msgstr ""
-#: ../C/gdm.xml:4558 (term)
+#: ../C/gdm.xml:4581 (term)
msgid "-c, --command=COMMAND"
msgstr ""
-#: ../C/gdm.xml:4560 (para)
+#: ../C/gdm.xml:4583 (para)
msgid "Send the specified protocol command to GDM"
msgstr "Enviar el comando de protocolo especificado a GDM"
-#: ../C/gdm.xml:4567 (term)
+#: ../C/gdm.xml:4590 (term)
msgid "-n, --xnest"
msgstr "-n, --xnest"
-#: ../C/gdm.xml:4569 (para)
+#: ../C/gdm.xml:4592 (para)
msgid "Start a flexible X display in Xnest mode"
msgstr ""
-#: ../C/gdm.xml:4576 (term)
+#: ../C/gdm.xml:4599 (term)
msgid "-l, --no-lock"
msgstr "-l, --no-lock"
-#: ../C/gdm.xml:4578 (para)
+#: ../C/gdm.xml:4601 (para)
msgid "Do not lock current screen"
msgstr "No bloquear la pantalla actual"
-#: ../C/gdm.xml:4585 (term)
+#: ../C/gdm.xml:4608 (term)
msgid "-d, --debug"
msgstr "-d, --debug"
-#: ../C/gdm.xml:4587 (para)
+#: ../C/gdm.xml:4610 (para)
msgid ""
"Turns on debugging output which gets sent to syslog. Same as turning on "
"debug in the configuration file."
@@ -6114,19 +6157,19 @@ msgstr ""
"Activar salida de depuraciĂłn para enviarla a syslog. Lo mismo que cuadno se "
"activa la depuraciĂłn en el archivo de configuraciĂłn."
-#: ../C/gdm.xml:4595 (term)
+#: ../C/gdm.xml:4618 (term)
msgid "-a, --authenticate"
msgstr "-a, --authenticate"
-#: ../C/gdm.xml:4597 (para)
+#: ../C/gdm.xml:4620 (para)
msgid "Authenticate before running --command"
msgstr "Autenticar antes de ejecutar --command"
-#: ../C/gdm.xml:4604 (term)
+#: ../C/gdm.xml:4627 (term)
msgid "-s, --startnew"
msgstr "-s, --startnew"
-#: ../C/gdm.xml:4606 (para)
+#: ../C/gdm.xml:4629 (para)
msgid ""
"Starts a new flexible display without displaying a dialog asking the user if "
"they wish to continue any existing sessions."
@@ -6134,17 +6177,17 @@ msgstr ""
"Inicia un servidor flexible nuevo sin mostrar un diálogo preguntando al "
"usuario si quiere continuar cualquier sesiĂłn existente."
-#: ../C/gdm.xml:4617 (title) ../C/gdm.xml:4635
+#: ../C/gdm.xml:4640 (title) ../C/gdm.xml:4666
msgid "<command>gdmdynamic</command> Command Line Options"
msgstr "Opciones de lĂ­nea de comandos de <command>gdmdynamic</command>"
-#: ../C/gdm.xml:4619 (para)
+#: ../C/gdm.xml:4642 (para)
msgid ""
"The <command>gdmdynamic</command> command which creates, runs, and removes "
"displays (X servers) on demand."
msgstr ""
-#: ../C/gdm.xml:4624 (para)
+#: ../C/gdm.xml:4647 (para)
msgid ""
"Some environments need the ability to tell GDM to create and manage new "
"displays on the fly, where it is not possible to list the possible displays "
@@ -6152,47 +6195,53 @@ msgid ""
"used to create a new display on a particular display number, run all newly "
"created displays, or remove a display. The <command>gdmdynamic</command> "
"command can also be used to list all attached displays, or only attached "
-"displays that match a pattern."
+"displays that match a pattern. This program is designed to manage multiple "
+"simultaneous requests and works to avoid flooding the daemon with requests. "
+"If the socket connection is busy, it will sleep and retry a certain number "
+"of times that can be tuned with the <command>-t</command> and <command>-s</"
+"command> arguments. <command>gdmdynamic</command> returns 1 on normal "
+"failure, and returns 2 if it is unable to connect to the daemon. Callers can "
+"choose to call again if a return code of 2 is received."
msgstr ""
-#: ../C/gdm.xml:4640 (emphasis)
+#: ../C/gdm.xml:4671 (emphasis)
msgid "One of the following options can be used per instance:"
msgstr "Una de las siguientes opciones pueden usarse por instancia:"
-#: ../C/gdm.xml:4647 (term)
+#: ../C/gdm.xml:4678 (term)
msgid "-a display=server"
msgstr "-a display=server"
-#: ../C/gdm.xml:4649 (para)
+#: ../C/gdm.xml:4680 (para)
msgid ""
"Add a new display configuration. For example, <command>\"-a "
"2=StandardServerTwo\"</command><command>\"-a 3=/usr/X11R6/bin/X -dev /dev/fb2"
"\"</command>"
msgstr ""
-#: ../C/gdm.xml:4658 (term)
+#: ../C/gdm.xml:4689 (term)
msgid "-r"
msgstr ""
-#: ../C/gdm.xml:4660 (para)
+#: ../C/gdm.xml:4691 (para)
msgid "Release (run) all displays waiting in the DISPLAY_CONFIG state."
msgstr ""
-#: ../C/gdm.xml:4667 (term)
+#: ../C/gdm.xml:4698 (term)
msgid "-d display"
msgstr "-d display"
-#: ../C/gdm.xml:4669 (para)
+#: ../C/gdm.xml:4700 (para)
msgid ""
"Delete a display, killing the X server and purging the display "
"configuration. For example, \"-d 3\"."
msgstr ""
-#: ../C/gdm.xml:4677 (term)
+#: ../C/gdm.xml:4708 (term)
msgid "-l [pattern]"
msgstr ""
-#: ../C/gdm.xml:4679 (para)
+#: ../C/gdm.xml:4710 (para)
msgid ""
"List displays via the ATTACHED_SERVERS command. Without a pattern lists all "
"attached displays. With a pattern will match using glob characters '*', '?', "
@@ -6200,42 +6249,65 @@ msgid ""
"*Xorg*\"</command>"
msgstr ""
-#: ../C/gdm.xml:4692 (emphasis)
+#: ../C/gdm.xml:4723 (emphasis)
msgid "These options can be added to the above:"
msgstr ""
-#: ../C/gdm.xml:4699 (term)
+#: ../C/gdm.xml:4730 (term)
msgid "-v"
msgstr ""
-#: ../C/gdm.xml:4701 (para)
+#: ../C/gdm.xml:4732 (para)
msgid "Verbose mode. Prinr diagnostic messages about each message sent to GDM."
msgstr ""
-#: ../C/gdm.xml:4709 (term)
+#: ../C/gdm.xml:4740 (term)
msgid "-b"
msgstr ""
-#: ../C/gdm.xml:4711 (para)
+#: ../C/gdm.xml:4742 (para)
msgid "Background mode. Fork child to do the work and return immediately."
msgstr ""
-#: ../C/gdm.xml:4720 (title)
+#: ../C/gdm.xml:4749 (term)
+msgid "-t RETRY"
+msgstr ""
+
+#: ../C/gdm.xml:4751 (para)
+msgid ""
+"If the daemon socket is busy, <command>gdmdynamic</command> will retry to "
+"open the connection the specified RETRY number of times. Default value is 15."
+msgstr ""
+
+#: ../C/gdm.xml:4760 (term)
+msgid "-s SLEEP"
+msgstr ""
+
+#: ../C/gdm.xml:4762 (para)
+msgid ""
+"If the daemon socket is busy, <command>gdmdynamic</command> will sleep an "
+"amount of time between retries. A random number of seconds 0-5 is added to "
+"the SLEEP value to help ensure that multiple calls to gdmdynamic do not all "
+"try to restart at the same time. A SLEEP value of zero causes the sleep time "
+"to be 1 second. Default value is 8 seconds."
+msgstr ""
+
+#: ../C/gdm.xml:4777 (title)
msgid "<command>gdmphotosetup</command> Command Line Options"
msgstr "Opciones de lĂ­nea de comandos de <command>gdmphotosetup</command>"
-#: ../C/gdm.xml:4722 (para)
+#: ../C/gdm.xml:4779 (para)
msgid ""
"Allows the user to select an image that will be used as the user's photo by "
"GDM's face browser, if enabled by GDM. The selected file is stored as ~/."
"face. This command accepts standard GNOME options."
msgstr ""
-#: ../C/gdm.xml:4730 (title)
+#: ../C/gdm.xml:4787 (title)
msgid "<command>gdmthemetester</command> Command Line Options"
msgstr "Opciones de lĂ­nea de comandos de <command>gdmthemetester</command>"
-#: ../C/gdm.xml:4732 (para)
+#: ../C/gdm.xml:4789 (para)
msgid ""
"<command>gdmthemetester</command> takes two parameters. The first parameter "
"specifies the environment and the second parameter specifies the path name "
@@ -6254,24 +6326,24 @@ msgid ""
" </screen>"
msgstr ""
-#: ../C/gdm.xml:4758 (title)
+#: ../C/gdm.xml:4815 (title)
msgid "GDM Root User Commands"
msgstr "Comandos del administrador de GDM"
-#: ../C/gdm.xml:4760 (para)
+#: ../C/gdm.xml:4817 (para)
msgid ""
"The GDM package provides the following different commands in "
"EXPANDED_SBINDIR intended to be used by the root user:"
msgstr ""
-#: ../C/gdm.xml:4766 (title) ../C/gdm.xml:4782
+#: ../C/gdm.xml:4823 (title) ../C/gdm.xml:4839
msgid ""
"<command>gdm</command> and <command>gdm-binary</command> Command Line Options"
msgstr ""
"Opciones de lĂ­nea de comandos de <command>gdm</command> y <command>gdm-"
"binary</command>"
-#: ../C/gdm.xml:4769 (para)
+#: ../C/gdm.xml:4826 (para)
msgid ""
"The <command>gdm</command> command is really just a script which runs the "
"<command>gdm-binary</command>, passing along any options. Before launching "
@@ -6283,19 +6355,19 @@ msgid ""
"environment before launching GDM, you can do so in this script."
msgstr ""
-#: ../C/gdm.xml:4786 (term)
+#: ../C/gdm.xml:4843 (term)
msgid "--help"
msgstr "--help"
-#: ../C/gdm.xml:4788 (para)
+#: ../C/gdm.xml:4845 (para)
msgid "Gives a brief overview of the command line options."
msgstr "Da un breve resumen de las opciones de lĂ­nea de comandos."
-#: ../C/gdm.xml:4795 (term)
+#: ../C/gdm.xml:4852 (term)
msgid "-nodaemon"
msgstr "-nodaemon"
-#: ../C/gdm.xml:4797 (para)
+#: ../C/gdm.xml:4854 (para)
msgid ""
"If this option is specified, then GDM does not fork into the background when "
"run. You can use just a single dash with this option to preserve "
@@ -6305,11 +6377,11 @@ msgstr ""
"cuando se ejecuta. Puede usar tan sĂłlo un simple guiĂłn con esta opciĂłn para "
"preservar compatibilidad con XDM."
-#: ../C/gdm.xml:4806 (term)
+#: ../C/gdm.xml:4863 (term)
msgid "--no-console"
msgstr "--no-console"
-#: ../C/gdm.xml:4808 (para)
+#: ../C/gdm.xml:4865 (para)
msgid ""
"Tell the daemon that it should not run anything on the console. This means "
"that none of the local servers from the <filename>[servers]</filename> "
@@ -6318,37 +6390,37 @@ msgid ""
"automatically implies this option."
msgstr ""
-#: ../C/gdm.xml:4820 (term)
+#: ../C/gdm.xml:4877 (term)
msgid "--config=CONFIGFILE"
msgstr "--config=CONFIGFILE"
-#: ../C/gdm.xml:4822 (para)
+#: ../C/gdm.xml:4879 (para)
msgid "Specify an alternative configuration file."
msgstr "Especificar un archivo de configuraciĂłn alternativo"
-#: ../C/gdm.xml:4829 (term)
+#: ../C/gdm.xml:4886 (term)
msgid "--preserve-ld-vars"
msgstr "--preserve-ld-vars"
-#: ../C/gdm.xml:4831 (para)
+#: ../C/gdm.xml:4888 (para)
msgid ""
"When clearing the environment internally, preserve all variables starting "
"with LD_. This is mostly for debugging purposes."
msgstr ""
-#: ../C/gdm.xml:4839 (term)
+#: ../C/gdm.xml:4896 (term)
msgid "--version"
msgstr "--version"
-#: ../C/gdm.xml:4841 (para)
+#: ../C/gdm.xml:4898 (para)
msgid "Print the version of the GDM daemon."
msgstr "Imprime la versiĂłn del demonio GDM."
-#: ../C/gdm.xml:4848 (term)
+#: ../C/gdm.xml:4905 (term)
msgid "--wait-for-go"
msgstr "--wait-for-go"
-#: ../C/gdm.xml:4850 (para)
+#: ../C/gdm.xml:4907 (para)
msgid ""
"If started with this option, gdm will init, but only start the first local "
"display and then wait for a GO message in the fifo protocol. No greeter will "
@@ -6360,11 +6432,11 @@ msgid ""
"added in version 2.5.90.0."
msgstr ""
-#: ../C/gdm.xml:4868 (title)
+#: ../C/gdm.xml:4925 (title)
msgid "<command>gdmsetup</command> Command Line Options"
msgstr "Opciones de lĂ­nea de comandos de <command>gdmsetup</command>"
-#: ../C/gdm.xml:4870 (para)
+#: ../C/gdm.xml:4927 (para)
msgid ""
"<command>gdmsetup</command> runs a graphical application for modifying the "
"GDM configuration file. Normally on systems that support the PAM userhelper, "
@@ -6374,11 +6446,11 @@ msgid ""
"supports standard GNOME options."
msgstr ""
-#: ../C/gdm.xml:4882 (title)
+#: ../C/gdm.xml:4939 (title)
msgid "<command>gdm-restart</command> Command Line Options"
msgstr "Opciones de lĂ­nea de comandos de <command>gdm-restart</command>"
-#: ../C/gdm.xml:4884 (para)
+#: ../C/gdm.xml:4941 (para)
msgid ""
"<command>gdm-restart</command> stops and restarts GDM by sending the GDM "
"daemon a HUP signal. This command will immediately terminate all sessions "
@@ -6388,11 +6460,11 @@ msgstr ""
"GDM una señal HUP. Este comando inmediatamente terminará todas las sesiones "
"y echará fuera a los usuarios que hayan entrado con GDM."
-#: ../C/gdm.xml:4892 (title)
+#: ../C/gdm.xml:4949 (title)
msgid "<command>gdm-safe-restart</command> Command Line Options"
msgstr "Opciones de lĂ­nea de comandos de <command>gdm-safe-restart</command>"
-#: ../C/gdm.xml:4894 (para)
+#: ../C/gdm.xml:4951 (para)
msgid ""
"<command>gdm-safe-restart</command> stops and restarts GDM by sending the "
"GDM daemon a USR1 signal. GDM will be restarted as soon as all users log out."
@@ -6401,28 +6473,28 @@ msgstr ""
"GDM una señal USR1. GDM re reiniciará tan pronto como todos los usuarios "
"salgan."
-#: ../C/gdm.xml:4902 (title)
+#: ../C/gdm.xml:4959 (title)
msgid "<command>gdm-stop</command> Command Line Options"
msgstr "Opciones de lĂ­nea de comandos de <command>gdm-stop</command>"
-#: ../C/gdm.xml:4904 (para)
+#: ../C/gdm.xml:4961 (para)
msgid ""
"<command>gdm-stop</command> stops GDM by sending the GDM daemon a TERM "
"signal."
msgstr ""
"<command>gdm-stop</command> para GDM enviando al demonio GDM una señal TERM"
-#: ../C/gdm.xml:4912 (title)
+#: ../C/gdm.xml:4969 (title)
msgid "GDM Internal Commands"
msgstr "Comandos internos de GDM"
-#: ../C/gdm.xml:4914 (para)
+#: ../C/gdm.xml:4971 (para)
msgid ""
"The GDM package provides the following different commands in "
"EXPANDED_LIBEXECDIR intended to be used by the gdm daemon process."
msgstr ""
-#: ../C/gdm.xml:4920 (title)
+#: ../C/gdm.xml:4977 (title)
msgid ""
"<command>gdmchooser</command> and <command>gdmlogin</command> Command Line "
"Options"
@@ -6430,7 +6502,7 @@ msgstr ""
"Opciones de lĂ­nea de comandos de <command>gdmchooser</command> y "
"<command>gdmlogin</command>"
-#: ../C/gdm.xml:4923 (para)
+#: ../C/gdm.xml:4980 (para)
msgid ""
"The <command>gdmgreeter</command> and <command>gdmlogin</command> are two "
"different login applications, either can be used by GDM. "
@@ -6440,11 +6512,11 @@ msgid ""
"GNOME options."
msgstr ""
-#: ../C/gdm.xml:4934 (title) ../C/gdm.xml:4945
+#: ../C/gdm.xml:4991 (title) ../C/gdm.xml:5002
msgid "<command>gdmchooser</command> Command Line Options"
msgstr "Opciones de lĂ­nea de comandos de <command>gdmchooser</command>"
-#: ../C/gdm.xml:4936 (para)
+#: ../C/gdm.xml:4993 (para)
msgid ""
"The <command>gdmchooser</command> is the XDMCP chooser application. The "
"<command>gdmchooser</command> is normally executed by the GDM daemon. It "
@@ -6452,50 +6524,50 @@ msgid ""
"standard GNOME options and is found in support standard GNOME options."
msgstr ""
-#: ../C/gdm.xml:4948 (term)
+#: ../C/gdm.xml:5005 (term)
msgid "-xdmaddress=SOCKET"
msgstr "-xdmaddress=SOCKET"
-#: ../C/gdm.xml:4950 (para)
+#: ../C/gdm.xml:5007 (para)
msgid "Socket for XDM communication."
msgstr "Socket para comunicaciĂłn XDM."
-#: ../C/gdm.xml:4957 (term)
+#: ../C/gdm.xml:5014 (term)
msgid "--clientaddress=ADDRESS"
msgstr "--clientaddress=DIRECCIĂ“N"
-#: ../C/gdm.xml:4959 (para)
+#: ../C/gdm.xml:5016 (para)
msgid ""
"Client address to return in response to XDM. This option is for running "
"gdmchooser with XDM, and is not used within GDM."
msgstr ""
-#: ../C/gdm.xml:4967 (term)
+#: ../C/gdm.xml:5024 (term)
msgid "-connectionType=TYPE"
msgstr "-connectionType=TIPO"
-#: ../C/gdm.xml:4969 (para)
+#: ../C/gdm.xml:5026 (para)
msgid ""
"Connection type to return in response to XDM. This option is for running "
"gdmchooser with XDM, and is not used within GDM."
msgstr ""
-#: ../C/gdm.xml:4979 (command)
+#: ../C/gdm.xml:5036 (command)
msgid "gdm-ssh-session"
msgstr ""
-#: ../C/gdm.xml:4981 (para)
+#: ../C/gdm.xml:5038 (para)
msgid ""
"The <command>gdm-ssh-session</command> is normally executed by the GDM "
-"daemon when starting a securte remote connection through ssh. It does not "
+"daemon when starting a secure remote connection through ssh. It does not "
"take any options."
msgstr ""
-#: ../C/gdm.xml:4994 (title)
+#: ../C/gdm.xml:5051 (title)
msgid "Themed Greeter"
msgstr "Interfaz con temas"
-#: ../C/gdm.xml:4996 (para)
+#: ../C/gdm.xml:5053 (para)
msgid ""
"This section describes the creation of themes for the Themed Greeter. For "
"examples including screenshots, see the standard installed themes and the "
@@ -6507,11 +6579,11 @@ msgstr ""
"los temas del <ulink type=\"http\" url=\"http://art.gnome.org/themes/"
"gdm_greeter/\">sitio web de temas</ulink>."
-#: ../C/gdm.xml:5005 (title)
+#: ../C/gdm.xml:5062 (title)
msgid "Theme Overview"
msgstr "DescripciĂłn de los temas"
-#: ../C/gdm.xml:5007 (para)
+#: ../C/gdm.xml:5064 (para)
msgid ""
"GDM Themes can be created by creating an XML file that follows the "
"specification in gui/greeter/greeter.dtd. Theme files are stored in the "
@@ -6521,7 +6593,7 @@ msgid ""
"filename> which has similar format to other .desktop files and looks like:"
msgstr ""
-#: ../C/gdm.xml:5018 (screen)
+#: ../C/gdm.xml:5075 (screen)
#, no-wrap
msgid ""
"\n"
@@ -6546,7 +6618,7 @@ msgstr ""
"Screenshot=screenshot.png\n"
" "
-#: ../C/gdm.xml:5029 (para)
+#: ../C/gdm.xml:5086 (para)
msgid ""
"The Name, Description, Author and Copyright fields can be translated just "
"like the other <filename>.desktop</filename>files. All the files that are "
@@ -6564,7 +6636,7 @@ msgstr ""
"usuario). El campo Greeter apunta a un archivo xml que contiene "
"descripciones del tema. La descripción se dará más tarde."
-#: ../C/gdm.xml:5039 (para)
+#: ../C/gdm.xml:5096 (para)
msgid ""
"Once you have theme ready and installed you can test it with the installed "
"<command>gdmthemetester</command> script. This script assumes that the X "
@@ -6579,11 +6651,11 @@ msgid ""
"would run:"
msgstr ""
-#: ../C/gdm.xml:5053 (command)
+#: ../C/gdm.xml:5110 (command)
msgid "gdmthemetester xdmcp circles"
msgstr ""
-#: ../C/gdm.xml:5055 (para)
+#: ../C/gdm.xml:5112 (para)
msgid ""
"Be sure to test all the environments with your theme, and make sure to test "
"how the caps lock warning looks by pressing caps lock. This is also a good "
@@ -6592,7 +6664,7 @@ msgid ""
"PrintScreen."
msgstr ""
-#: ../C/gdm.xml:5063 (para)
+#: ../C/gdm.xml:5120 (para)
msgid ""
"Once you have all this done, then make a tarball that contains the directory "
"name (so that you could just untar it in the <filename>/usr/share/gdm/"
@@ -6604,15 +6676,15 @@ msgid ""
" </screen>"
msgstr ""
-#: ../C/gdm.xml:5078 (title)
+#: ../C/gdm.xml:5135 (title)
msgid "Detailed Description of Theme XML format"
msgstr ""
-#: ../C/gdm.xml:5081 (title)
+#: ../C/gdm.xml:5138 (title)
msgid "Box Nodes"
msgstr "Nodos contenedores."
-#: ../C/gdm.xml:5083 (para)
+#: ../C/gdm.xml:5140 (para)
msgid ""
"Box nodes are container nodes for item nodes. Box nodes are specified as "
"follows: <screen>\n"
@@ -6625,7 +6697,7 @@ msgid ""
"of \"homogeneous\" and \"vertical\" for the orientation."
msgstr ""
-#: ../C/gdm.xml:5099 (para)
+#: ../C/gdm.xml:5156 (para)
msgid ""
"If the box is homogeneous then the children are allocated equal amount of "
"space."
@@ -6633,17 +6705,17 @@ msgstr ""
"Si la caja es homogénea entonces los hijos se les reserver la misma cantidad "
"de espacio."
-#: ../C/gdm.xml:5104 (para)
+#: ../C/gdm.xml:5161 (para)
msgid ""
"The \"min-width\" must be specified in pixels. Obviously there is also a "
"corresponding \"min-height\" property as well."
msgstr ""
-#: ../C/gdm.xml:5112 (title)
+#: ../C/gdm.xml:5169 (title)
msgid "Fixed Nodes"
msgstr "Nodos fijos"
-#: ../C/gdm.xml:5114 (para)
+#: ../C/gdm.xml:5171 (para)
msgid ""
"Fixed is a container that has its children scattered about laid out with "
"precise coordinates. The size of this container is the biggest rectangle "
@@ -6652,15 +6724,15 @@ msgid ""
"proper position nodes inside this."
msgstr ""
-#: ../C/gdm.xml:5123 (para)
+#: ../C/gdm.xml:5180 (para)
msgid "The \"toplevel\" node is really just like a fixed node."
msgstr ""
-#: ../C/gdm.xml:5129 (title)
+#: ../C/gdm.xml:5186 (title)
msgid "Item Nodes"
msgstr "Nodos de elemento"
-#: ../C/gdm.xml:5131 (para)
+#: ../C/gdm.xml:5188 (para)
msgid ""
"A GDM Theme is created by specifying a hierarchy of item and box nodes. Item "
"nodes can have the following value for \"type\":"
@@ -6668,36 +6740,36 @@ msgstr ""
"Un tema GDM se crea especificando una gerarquĂ­a de nodos de elementos y "
"cajas. Los nodos de elementos pueden tener el siguiente valor para el tipo:"
-#: ../C/gdm.xml:5139 (term)
+#: ../C/gdm.xml:5196 (term)
msgid "entry"
msgstr "entry"
-#: ../C/gdm.xml:5141 (para)
+#: ../C/gdm.xml:5198 (para)
msgid "Text entry field."
msgstr "Campo de entrada de texto."
-#: ../C/gdm.xml:5148 (term)
+#: ../C/gdm.xml:5205 (term)
msgid "list"
msgstr "list"
-#: ../C/gdm.xml:5150 (para)
+#: ../C/gdm.xml:5207 (para)
msgid "A list widget."
msgstr "Un widget de lista"
-#: ../C/gdm.xml:5157 (term)
+#: ../C/gdm.xml:5214 (term)
msgid "label"
msgstr "label"
-#: ../C/gdm.xml:5159 (para)
+#: ../C/gdm.xml:5216 (para)
msgid "A text label. Must have a \"text\" node to specify the text."
msgstr ""
"Una etiqueta de texto. Debe tener un nodo \"text\" para especificar el texto."
-#: ../C/gdm.xml:5167 (term)
+#: ../C/gdm.xml:5224 (term)
msgid "pixmap"
msgstr "pixmap"
-#: ../C/gdm.xml:5169 (para)
+#: ../C/gdm.xml:5226 (para)
msgid ""
"An pixmap image in a format that gdk-pixbuf supports like PNG, JPEG, Tiff, "
"etc...)"
@@ -6705,23 +6777,23 @@ msgstr ""
"Una imagen pixmap en un formato que gdk-pixbuf soporte como PNG, JPEG, Tiff, "
"etc...)"
-#: ../C/gdm.xml:5177 (term)
+#: ../C/gdm.xml:5234 (term)
msgid "rect"
msgstr "rect"
-#: ../C/gdm.xml:5179 (para)
+#: ../C/gdm.xml:5236 (para)
msgid "Rectangle."
msgstr "Rectángulo."
-#: ../C/gdm.xml:5186 (term)
+#: ../C/gdm.xml:5243 (term)
msgid "svg"
msgstr "svg"
-#: ../C/gdm.xml:5188 (para)
+#: ../C/gdm.xml:5245 (para)
msgid "Scaled Vector Graphic image."
msgstr "Imagen Scaled Vector Graphic."
-#: ../C/gdm.xml:5195 (para)
+#: ../C/gdm.xml:5252 (para)
msgid ""
"For example: <screen>&lt;item type=\"label\"&gt;</screen> Items can specify "
"ID values which gives them a specific look and feel or formatting. "
@@ -6729,184 +6801,184 @@ msgid ""
"with custom id's for some items (currently only the list item)"
msgstr ""
-#: ../C/gdm.xml:5204 (para)
+#: ../C/gdm.xml:5261 (para)
msgid "Entry items can have id values as follows:"
msgstr "Los elementos de entradas pueden tener valores id como siguen:"
-#: ../C/gdm.xml:5210 (term)
+#: ../C/gdm.xml:5267 (term)
msgid "user-pw-entry"
msgstr "user-pw-entry"
-#: ../C/gdm.xml:5212 (para)
+#: ../C/gdm.xml:5269 (para)
msgid ""
"Entry field for userid and password entry. This is the field used for "
"responses for the PAM/GDM questions (Username, Password, etc..)."
msgstr ""
-#: ../C/gdm.xml:5222 (para)
+#: ../C/gdm.xml:5279 (para)
msgid "List items can have id values as follows:"
msgstr "Los elementos de listas pueden tener valores id como siguen:"
-#: ../C/gdm.xml:5228 (term)
+#: ../C/gdm.xml:5285 (term)
msgid "userlist"
msgstr "userlist"
-#: ../C/gdm.xml:5230 (para)
+#: ../C/gdm.xml:5287 (para)
msgid ""
"A Face Browser list, so that users can pick their username by clicking on "
"this instead of typing."
msgstr ""
-#: ../C/gdm.xml:5239 (para)
+#: ../C/gdm.xml:5296 (para)
msgid ""
"Furthermore, you can have an arbitrary id (I'd recommend starting the id "
"with 'custom' not to conflict with future additions to this spec) and ask "
"extra information of the user. See the section 'Custom Widgetry'"
msgstr ""
-#: ../C/gdm.xml:5246 (para)
+#: ../C/gdm.xml:5303 (para)
msgid "Label items can have id values as follows:"
msgstr ""
-#: ../C/gdm.xml:5252 (term)
+#: ../C/gdm.xml:5309 (term)
msgid "clock"
msgstr "clock"
-#: ../C/gdm.xml:5254 (para)
+#: ../C/gdm.xml:5311 (para)
msgid "Label that displays the date and time."
msgstr "Etiqueta que muesta la fecha y la hora."
-#: ../C/gdm.xml:5261 (term)
+#: ../C/gdm.xml:5318 (term)
msgid "pam-prompt"
msgstr "pam-prompt"
-#: ../C/gdm.xml:5263 (para)
+#: ../C/gdm.xml:5320 (para)
msgid ""
"Label that displays the PAM prompt. This is the prompt that PAM uses to ask "
"for username, password, etc..."
msgstr ""
-#: ../C/gdm.xml:5271 (term)
+#: ../C/gdm.xml:5328 (term)
msgid "pam-error"
msgstr "pam-error"
-#: ../C/gdm.xml:5273 (para)
+#: ../C/gdm.xml:5330 (para)
msgid ""
"Label that displayst PAM/GDM error messages. Such as when user can't log in."
msgstr ""
-#: ../C/gdm.xml:5281 (term)
+#: ../C/gdm.xml:5338 (term)
msgid "pam-message"
msgstr "pam-message"
-#: ../C/gdm.xml:5283 (para)
+#: ../C/gdm.xml:5340 (para)
msgid ""
"Label that displays the PAM message. These are messages that PAM/GDM gives "
"about state of the account, help about the prompts and other information."
msgstr ""
-#: ../C/gdm.xml:5292 (term)
+#: ../C/gdm.xml:5349 (term)
msgid "timed-label"
msgstr "timed-label"
-#: ../C/gdm.xml:5294 (para)
+#: ../C/gdm.xml:5351 (para)
msgid "Label that displays timed login information."
msgstr "Etiqueta que muestra la informaciĂłn de la entrada temporizada."
-#: ../C/gdm.xml:5301 (para)
+#: ../C/gdm.xml:5358 (para)
msgid "Rectangles can have id values as follows:"
msgstr "Los rectángulos pueden tener valores id como los siguientes:"
-#: ../C/gdm.xml:5307 (term)
+#: ../C/gdm.xml:5364 (term)
msgid "caps-lock-warning"
msgstr "caps-lock-warning"
-#: ../C/gdm.xml:5309 (para)
+#: ../C/gdm.xml:5366 (para)
msgid ""
"Displays an icon that shows if the CAPS LOCK key is depressed. This "
"rectangle will be hidden/shown appropriately"
msgstr ""
-#: ../C/gdm.xml:5318 (para)
+#: ../C/gdm.xml:5375 (para)
msgid ""
"If an item is of type rect, the item can be a button. Buttons must also "
"include a \"button\" value as follows: <screen>&lt;item type=\"rect\" id="
"\"disconnect_button\" button=\"true\"&gt;.</screen>"
msgstr ""
-#: ../C/gdm.xml:5324 (para)
+#: ../C/gdm.xml:5381 (para)
msgid "Possible values for button ids are as follows:"
msgstr "Los valores posibles para los ids de los botones son los siguientes:"
-#: ../C/gdm.xml:5330 (term)
+#: ../C/gdm.xml:5387 (term)
msgid "chooser_button"
msgstr "chooser_button"
-#: ../C/gdm.xml:5332 (para)
+#: ../C/gdm.xml:5389 (para)
msgid "Runs the XDMCP chooser."
msgstr "Ejecuta el selector XDMCP."
-#: ../C/gdm.xml:5339 (term)
+#: ../C/gdm.xml:5396 (term)
msgid "config_button"
msgstr "config_button"
-#: ../C/gdm.xml:5341 (para)
+#: ../C/gdm.xml:5398 (para)
msgid "Runs the GDM configuration application."
msgstr "Ejecuta la aplicaciĂłn de configuraciĂłn de GDM."
-#: ../C/gdm.xml:5348 (term)
+#: ../C/gdm.xml:5405 (term)
msgid "disconnect_button"
msgstr "disconnect_button"
-#: ../C/gdm.xml:5350 (para)
+#: ../C/gdm.xml:5407 (para)
msgid "Disconnect from remote session."
msgstr "Desconecta de una sesiĂłn remota."
-#: ../C/gdm.xml:5357 (term)
+#: ../C/gdm.xml:5414 (term)
msgid "language_button"
msgstr "language_button"
-#: ../C/gdm.xml:5359 (para)
+#: ../C/gdm.xml:5416 (para)
msgid "Displays the language selection dialog."
msgstr "Muestra el diálogo de selección del idioma."
-#: ../C/gdm.xml:5366 (term)
+#: ../C/gdm.xml:5423 (term)
msgid "halt_button"
msgstr "halt_button"
-#: ../C/gdm.xml:5368 (para)
+#: ../C/gdm.xml:5425 (para)
msgid "Halt (shuts down) the system."
msgstr "Detiene (apaga) el sistema."
-#: ../C/gdm.xml:5375 (term)
+#: ../C/gdm.xml:5432 (term)
msgid "reboot_button"
msgstr "reboot_button"
-#: ../C/gdm.xml:5377 (para)
+#: ../C/gdm.xml:5434 (para)
msgid "Restart the system."
msgstr "Reinicia el sistema."
-#: ../C/gdm.xml:5384 (term)
+#: ../C/gdm.xml:5441 (term)
msgid "session_button"
msgstr "session_button"
-#: ../C/gdm.xml:5386 (para)
+#: ../C/gdm.xml:5443 (para)
msgid "List and select from available sessions."
msgstr "Lista y selecciona las sesiones disponibles."
-#: ../C/gdm.xml:5393 (term)
+#: ../C/gdm.xml:5450 (term)
msgid "suspend_button"
msgstr "suspend_button"
-#: ../C/gdm.xml:5395 (para)
+#: ../C/gdm.xml:5452 (para)
msgid "Suspend the system."
msgstr "Suspender el sistema."
-#: ../C/gdm.xml:5402 (term)
+#: ../C/gdm.xml:5459 (term)
msgid "system_button"
msgstr "system_button"
-#: ../C/gdm.xml:5404 (para)
+#: ../C/gdm.xml:5461 (para)
msgid ""
"Perform halt/restart/suspend/etc. options (if allowed by GDM configuration). "
"Also allows user to run configurator if user enters root password (again if "
@@ -6919,11 +6991,11 @@ msgstr ""
"permite la configuración de GDM). Esto está normalmente ahora etiquetado "
"como Acciones, y referido como el menĂş de Acciones."
-#: ../C/gdm.xml:5418 (title)
+#: ../C/gdm.xml:5475 (title)
msgid "Position Node"
msgstr "Nodo de posiciĂłn"
-#: ../C/gdm.xml:5420 (para)
+#: ../C/gdm.xml:5477 (para)
msgid ""
"Each item can specify its position and size via the \"pos\" node. For "
"example: <screen>&lt;pos x=\"0\" y=\"4\" width=\"100%\" height=\"100%\"/&gt;"
@@ -6933,7 +7005,7 @@ msgstr ""
"\"pos\". Por ejemplo <screen>&lt;pos x=\"0\" y=\"4\" width=\"100%\" height="
"\"100%\"/&gt;</screen>"
-#: ../C/gdm.xml:5426 (para)
+#: ../C/gdm.xml:5483 (para)
msgid ""
"Both position and size can be given in percent and it will be taken as the "
"percentage of the size of the current container. For toplevel items it's the "
@@ -6943,7 +7015,7 @@ msgstr ""
"el porcentaje del tamaño del contenedor actual. Para los elementos de nivel "
"superior su porcentaje es respecto de la pantalla completa."
-#: ../C/gdm.xml:5432 (para)
+#: ../C/gdm.xml:5489 (para)
msgid ""
"For x and y, you can also specify a negative position which means position "
"from the right or bottom edge. But this only applies with absolute "
@@ -6951,7 +7023,7 @@ msgid ""
"be still from the same edge."
msgstr ""
-#: ../C/gdm.xml:5439 (para)
+#: ../C/gdm.xml:5496 (para)
msgid ""
"The position also specifies the anchor of the item, this can be \"n\" \"ne\" "
"\"e\" \"se\" \"s\" \"sw\" \"w\" and \"nw\" or \"center\" which stand for the "
@@ -6960,28 +7032,28 @@ msgid ""
"screen>"
msgstr ""
-#: ../C/gdm.xml:5448 (para)
+#: ../C/gdm.xml:5505 (para)
msgid ""
"If the item contains a box, you can specify width and height to be \"box\" "
"to mean that they are supposed to be the width and height of the box, that "
"is the items in the box plus the padding."
msgstr ""
-#: ../C/gdm.xml:5454 (para)
+#: ../C/gdm.xml:5511 (para)
msgid ""
"If the item contains an SVG image, you can specify width and height to be "
"\"scale\" to mean that the SVG image should be scaled to fit the requested "
"area."
msgstr ""
-#: ../C/gdm.xml:5460 (para)
+#: ../C/gdm.xml:5517 (para)
msgid ""
"You can also specify an \"expand\" property to either be \"true\" or false. "
"If true then the child will be expanded in the box as much as possible (that "
"is it will be given more space if available)."
msgstr ""
-#: ../C/gdm.xml:5467 (para)
+#: ../C/gdm.xml:5524 (para)
msgid ""
"There are two extra properties you can specify (as of 2.4.4.3) for labels "
"(and labels only). The first is \"max-width\" which will specify the maximum "
@@ -6994,53 +7066,53 @@ msgid ""
" </screen>"
msgstr ""
-#: ../C/gdm.xml:5484 (title)
+#: ../C/gdm.xml:5541 (title)
msgid "Show Node"
msgstr "Mostrar nodo"
-#: ../C/gdm.xml:5486 (para)
+#: ../C/gdm.xml:5543 (para)
msgid ""
"Some items may only display in certain modes, like when doing a remote "
"display. Multiple values can be specified and must be separated with commas. "
"The following values are possible:"
msgstr ""
-#: ../C/gdm.xml:5492 (para)
+#: ../C/gdm.xml:5549 (para)
msgid "<filename>console</filename> - In console mode."
msgstr "<filename>console</filename> - En modo consola."
-#: ../C/gdm.xml:5495 (para)
+#: ../C/gdm.xml:5552 (para)
msgid "<filename>console-fixed</filename> - In console non-flexi mode."
msgstr ""
-#: ../C/gdm.xml:5498 (para)
+#: ../C/gdm.xml:5555 (para)
msgid "<filename>console-flexi</filename> - In console &amp; flexi mode."
msgstr ""
-#: ../C/gdm.xml:5501 (para)
+#: ../C/gdm.xml:5558 (para)
msgid "<filename>flexi</filename> - In flexi mode."
msgstr ""
-#: ../C/gdm.xml:5504 (para)
+#: ../C/gdm.xml:5561 (para)
msgid "<filename>remote</filename> - In remote mode."
msgstr ""
-#: ../C/gdm.xml:5507 (para)
+#: ../C/gdm.xml:5564 (para)
msgid "<filename>remote-flexi</filename> - In remote &amp; flexi mode."
msgstr ""
-#: ../C/gdm.xml:5511 (para)
+#: ../C/gdm.xml:5568 (para)
msgid "For example: <screen>&lt;show modes=\"flexi,remote\"/&gt;</screen>"
msgstr ""
-#: ../C/gdm.xml:5516 (para)
+#: ../C/gdm.xml:5573 (para)
msgid ""
"You can also specify the \"type\" value to indicate that certain items "
"should only be displayed if the type is true. Valid values include the "
"following:"
msgstr ""
-#: ../C/gdm.xml:5522 (para)
+#: ../C/gdm.xml:5579 (para)
msgid ""
"<filename>chooser</filename>, if ChooserButton is set to \"true\" in the GDM "
"configuration."
@@ -7048,7 +7120,7 @@ msgstr ""
"<filename>chooser</filename>, si ChooserButton está puesto a «true» en la "
"configuraciĂłn de GDM."
-#: ../C/gdm.xml:5526 (para)
+#: ../C/gdm.xml:5583 (para)
msgid ""
"<filename>config</filename>, if ConfigAvailable is set to \"true\" in the "
"GDM configuration."
@@ -7056,7 +7128,7 @@ msgstr ""
"<filename>configurar</filename>, si ConfigAvailable está puesto a «true» en "
"la configuraciĂłn de GDM."
-#: ../C/gdm.xml:5530 (para)
+#: ../C/gdm.xml:5587 (para)
msgid ""
"<filename>halt</filename>, if HaltDaemon is specified in the GDM "
"configuration."
@@ -7064,7 +7136,7 @@ msgstr ""
"<filename>halt</filename>, si HaltDaemon está especificado en la "
"configuraciĂłn de GDM."
-#: ../C/gdm.xml:5534 (para)
+#: ../C/gdm.xml:5591 (para)
msgid ""
"<filename>reboot</filename>, if RebootCommand is specified in the GDM "
"configuration."
@@ -7072,7 +7144,7 @@ msgstr ""
"<filename>reiniciar</filename>, si RebootCommand está especificado en la "
"configuraciĂłn de GDM."
-#: ../C/gdm.xml:5538 (para)
+#: ../C/gdm.xml:5595 (para)
msgid ""
"<filename>suspend</filename>, if SuspendCommand is specified in the GDM "
"configuration."
@@ -7080,7 +7152,7 @@ msgstr ""
"<filename>suspend</filename>, si SuspendCommand está especificado en la "
"configuraciĂłn de GDM."
-#: ../C/gdm.xml:5542 (para)
+#: ../C/gdm.xml:5599 (para)
msgid ""
"<filename>system</filename>, if SystemMenu is specified in the GDM "
"configuration."
@@ -7088,7 +7160,7 @@ msgstr ""
"<filename>system</filename>, si SystemMenu está especificado en la "
"configuraciĂłn de GDM."
-#: ../C/gdm.xml:5546 (para)
+#: ../C/gdm.xml:5603 (para)
msgid ""
"<filename>timed</filename>, if TimedLoginEnabled is set to \"true\" in the "
"GDM configuration."
@@ -7096,95 +7168,95 @@ msgstr ""
"<filename>timed</filename>, si TimedLoginEnabled está puesto a \"true\" en "
"la configuraciĂłn de GDM."
-#: ../C/gdm.xml:5551 (para)
+#: ../C/gdm.xml:5608 (para)
msgid ""
"For example: <screen>&lt;show modes=\"console\" type=\"system\"/&gt;</screen>"
msgstr ""
"Por ejemplo: <screen>&lt;show modes=\"console\" type=\"system\"/&gt;</screen>"
-#: ../C/gdm.xml:5556 (para)
+#: ../C/gdm.xml:5613 (para)
msgid ""
"Note that if SystemMenu is off then the halt, restart, suspend, chooser and "
"config choices will not be shown, so this is a global toggle for them all. "
"See some of the standard themes for how the show modes are used."
msgstr ""
-#: ../C/gdm.xml:5565 (title)
+#: ../C/gdm.xml:5622 (title)
msgid "Normal/Active/Prelight Nodes"
msgstr ""
-#: ../C/gdm.xml:5567 (para)
+#: ../C/gdm.xml:5624 (para)
msgid ""
"Depending on the item type (except for userlist - refer to Color node "
"below), it can specify its color, font, or image via the following tags:"
msgstr ""
-#: ../C/gdm.xml:5572 (para)
+#: ../C/gdm.xml:5629 (para)
msgid "<filename>normal</filename> - normal state."
msgstr ""
-#: ../C/gdm.xml:5575 (para)
+#: ../C/gdm.xml:5632 (para)
msgid "<filename>active</filename> - when the item has active focus."
msgstr ""
-#: ../C/gdm.xml:5578 (para)
+#: ../C/gdm.xml:5635 (para)
msgid ""
"<filename>prelight</filename> - when the mouse is hovering over the item."
msgstr ""
-#: ../C/gdm.xml:5583 (para)
+#: ../C/gdm.xml:5640 (para)
msgid ""
"When item is \"rect\" (alpha can be omitted and defaults to 0.0): "
"<screen>&lt;normal color=\"#ffffff\" alpha=\"0.0\"&gt;</screen>"
msgstr ""
-#: ../C/gdm.xml:5589 (para)
+#: ../C/gdm.xml:5646 (para)
msgid ""
"When item is \"label\" <screen>&lt;normal color=\"#ffffff\" font=\"Sans 14\"/"
"&gt;</screen>"
msgstr ""
-#: ../C/gdm.xml:5594 (para)
+#: ../C/gdm.xml:5651 (para)
msgid ""
"When the item type is \"pixmap\" or \"SVG\", then the normal, active, and "
"prelight tags specify the images to use as follows: <screen>&lt;normal file="
"\"picture.png\" tint=\"#dddddd\"/&gt;</screen>"
msgstr ""
-#: ../C/gdm.xml:5601 (para)
+#: ../C/gdm.xml:5658 (para)
msgid ""
"Note that relative pathnames are assumed to be in the same directory as the "
"theme <filename>.xml</filename> file in <filename>&lt;share&gt;/gdm/themes/"
"&lt;theme_name&gt;</filename>."
msgstr ""
-#: ../C/gdm.xml:5609 (title)
+#: ../C/gdm.xml:5666 (title)
msgid "Face Browser Icon/Label Color Nodes"
msgstr ""
-#: ../C/gdm.xml:5611 (para)
+#: ../C/gdm.xml:5668 (para)
msgid ""
"If the item type is of userlist, then the background color for the icon and "
"label can be set separately via the the following tag:"
msgstr ""
-#: ../C/gdm.xml:5617 (screen)
+#: ../C/gdm.xml:5674 (screen)
#, no-wrap
msgid "&lt;color iconcolor=\"#dddddd\" labelcolor=\"#ffffff\"/&gt;"
msgstr ""
-#: ../C/gdm.xml:5622 (title)
+#: ../C/gdm.xml:5679 (title)
msgid "Text Node"
msgstr "Nodo de texto"
-#: ../C/gdm.xml:5624 (para)
+#: ../C/gdm.xml:5681 (para)
msgid ""
"Text tags are used by labels. They can be used to display localized text as "
"follows (if the \"xml:lang\" attribute is omitted, the C locale is assumed): "
"<screen>&lt;text xml:lang=\"fr\"&gt;Option&lt;/text&gt;</screen>"
msgstr ""
-#: ../C/gdm.xml:5631 (para)
+#: ../C/gdm.xml:5688 (para)
msgid ""
"You can include pango markup in the text nodes for labels, however you must "
"encode it. So for example to have the label of \"foo&lt;sup&gt;bar&lt;/"
@@ -7192,51 +7264,51 @@ msgid ""
"bar&amp;lt;/sup&amp;&gt;&lt;/text&gt;</screen>"
msgstr ""
-#: ../C/gdm.xml:5638 (para)
+#: ../C/gdm.xml:5695 (para)
msgid ""
"Text nodes can contain the following special character sequences which will "
"be translated as follows:"
msgstr ""
-#: ../C/gdm.xml:5643 (para)
+#: ../C/gdm.xml:5700 (para)
msgid "%% - A literal % character"
msgstr "%% - Un carácter literal %"
-#: ../C/gdm.xml:5646 (para)
+#: ../C/gdm.xml:5703 (para)
msgid ""
"%c - Clock time. Only labels with the \"clock\" id will update automatically "
"every second. Other labels will contain a static timestamp."
msgstr ""
-#: ../C/gdm.xml:5651 (para)
+#: ../C/gdm.xml:5708 (para)
msgid "%d - Display name (DISPLAY environment variable)"
msgstr ""
-#: ../C/gdm.xml:5654 (para)
+#: ../C/gdm.xml:5711 (para)
msgid "%h - Hostname (gethostname output)"
msgstr ""
-#: ../C/gdm.xml:5657 (para)
+#: ../C/gdm.xml:5714 (para)
msgid "%m - Machine name (uname.machine output)"
msgstr ""
-#: ../C/gdm.xml:5660 (para)
+#: ../C/gdm.xml:5717 (para)
msgid "%n - Node name (uname.nodename output)"
msgstr ""
-#: ../C/gdm.xml:5663 (para)
+#: ../C/gdm.xml:5720 (para)
msgid "%o - Domain name (getdomainname output)"
msgstr ""
-#: ../C/gdm.xml:5666 (para)
+#: ../C/gdm.xml:5723 (para)
msgid "%r - Release name (uname.release output)"
msgstr ""
-#: ../C/gdm.xml:5669 (para)
+#: ../C/gdm.xml:5726 (para)
msgid "%s - System name (uname.sysname output)"
msgstr ""
-#: ../C/gdm.xml:5672 (para)
+#: ../C/gdm.xml:5729 (para)
msgid ""
"%t - Current timed delay value from configuration file (0 if off) followed "
"by the word \"seconds\" if value is greater than 1 or the word \"second\" if "
@@ -7245,29 +7317,29 @@ msgid ""
"updated every second."
msgstr ""
-#: ../C/gdm.xml:5680 (para)
+#: ../C/gdm.xml:5737 (para)
msgid ""
"%u - Timed username value from configuration file (empty if off) This "
"character sequence is intended to be only used internally to display the "
"\"timed-label\" message, which is automatically updated every second."
msgstr ""
-#: ../C/gdm.xml:5686 (para)
+#: ../C/gdm.xml:5743 (para)
msgid "\\n - Carriage return"
msgstr "\\n - Retorno de carro"
-#: ../C/gdm.xml:5689 (para)
+#: ../C/gdm.xml:5746 (para)
msgid ""
"_ - An underscore causes the following character to be underlined. If it "
"precedes a % character sequence, the string that replaces the character "
"sequence is underlined."
msgstr ""
-#: ../C/gdm.xml:5697 (title)
+#: ../C/gdm.xml:5754 (title)
msgid "Stock"
msgstr "Stock"
-#: ../C/gdm.xml:5699 (para)
+#: ../C/gdm.xml:5756 (para)
msgid ""
"Certain common localized labels can be specified via the stock tags. The "
"\"text\" tag is ignored if the \"stock\" tag is used. You should really use "
@@ -7281,83 +7353,83 @@ msgstr ""
"traducciones en los temas. Esto da tiempos de carga más rápidos y mejores "
"traducciones. Los valores siguientes son válidos:"
-#: ../C/gdm.xml:5708 (para)
+#: ../C/gdm.xml:5765 (para)
msgid "<filename>cancel</filename>, _(\"_Cancel\""
msgstr "<filename>cancel</filename>, _(\"_Cancelar\""
-#: ../C/gdm.xml:5711 (para)
+#: ../C/gdm.xml:5768 (para)
msgid "<filename>caps-lock-warning</filename>, _(\"Caps Lock key is on.\""
msgstr ""
"<filename>caps-lock-warning</filename>, _(\"La tecla BloqMayús está activada."
"\""
-#: ../C/gdm.xml:5714 (para)
+#: ../C/gdm.xml:5771 (para)
#, fuzzy
msgid "<filename>chooser</filename>, _(\"Remote Login via _XDMCP\""
msgstr "<filename>chooser</filename>, _(\"Selector _XDMCP\""
-#: ../C/gdm.xml:5717 (para)
+#: ../C/gdm.xml:5774 (para)
msgid "<filename>config</filename>, _(\"_Configure\""
msgstr "<filename>config</filename>, _(\"_Configurar\""
-#: ../C/gdm.xml:5720 (para)
+#: ../C/gdm.xml:5777 (para)
msgid "<filename>disconnect</filename>, _(\"D_isconnect\""
msgstr "<filename>disconnect</filename>, _(\"D_esconectar\""
-#: ../C/gdm.xml:5723 (para)
+#: ../C/gdm.xml:5780 (para)
msgid "<filename>halt</filename>, _(\"Shut _Down\""
msgstr "<filename>halt</filename>, _(\"_Apagar\")"
-#: ../C/gdm.xml:5726 (para)
+#: ../C/gdm.xml:5783 (para)
msgid "<filename>language</filename>, _(\"_Language\""
msgstr "<filename>language</filename>, _(\"_Idioma\""
-#: ../C/gdm.xml:5729 (para)
+#: ../C/gdm.xml:5786 (para)
msgid "<filename>ok</filename>, _(\"_OK\""
msgstr "<filename>ok</filename>, _(\"_Aceptar\""
-#: ../C/gdm.xml:5732 (para)
+#: ../C/gdm.xml:5789 (para)
msgid "<filename>quit</filename>, _(\"_Quit\""
msgstr "<filename>quit</filename>, _(\"_Salir\""
-#: ../C/gdm.xml:5735 (para)
+#: ../C/gdm.xml:5792 (para)
msgid "<filename>reboot</filename>, _(\"_Restart\""
msgstr "<filename>reboot</filename>, _(\"_Reiniciar\""
-#: ../C/gdm.xml:5738 (para)
+#: ../C/gdm.xml:5795 (para)
msgid "<filename>session</filename>, _(\"_Session\""
msgstr "<filename>session</filename>, _(\"_SesiĂłn\""
-#: ../C/gdm.xml:5741 (para)
+#: ../C/gdm.xml:5798 (para)
msgid "<filename>suspend</filename>, _(\"Sus_pend\""
msgstr "<filename>suspend</filename>, _(\"Sus_pender\""
-#: ../C/gdm.xml:5744 (para)
+#: ../C/gdm.xml:5801 (para)
msgid "<filename>system</filename>, _(\"_Actions\" (Formerly \"S_ystem\""
msgstr ""
"<filename>system</filename>, _(\"_Acciones\" (Anteriormente \"S_istema\""
-#: ../C/gdm.xml:5747 (para)
+#: ../C/gdm.xml:5804 (para)
msgid "<filename>timed-label</filename>, _(\"User %u will login in %t\""
msgstr "<filename>timed-label</filename>, _(\"El usuario %u entrará en %t\""
-#: ../C/gdm.xml:5750 (para)
+#: ../C/gdm.xml:5807 (para)
msgid "<filename>username-label</filename>, _(\"Username:\""
msgstr "<filename>username-label</filename>, _(\"Usuario:\""
-#: ../C/gdm.xml:5753 (para)
+#: ../C/gdm.xml:5810 (para)
msgid "<filename>welcome-label</filename>, _(\"Welcome to %n\""
msgstr "<filename>welcome-label</filename>, _(\"Bienvenido a %n\""
-#: ../C/gdm.xml:5757 (para)
+#: ../C/gdm.xml:5814 (para)
msgid "For example: <screen>&lt;stock type=\"welcome-label\"&gt;</screen>"
msgstr "Por ejemplo: <screen>&lt;stock type=\"welcome-label\"&gt;</screen>"
-#: ../C/gdm.xml:5764 (title)
+#: ../C/gdm.xml:5821 (title)
msgid "Custom Widgetry"
msgstr "Widgets personalizados"
-#: ../C/gdm.xml:5766 (para)
+#: ../C/gdm.xml:5823 (para)
msgid ""
"Currently there is one item which can be customizable and this is the list "
"item. If you need to ask the user extra things, such as to pick from a list "
@@ -7377,7 +7449,7 @@ msgstr ""
"display&gt;.GreeterInfo</filename> como <filename>&lt;list id&gt;=&lt;"
"listitem id&gt;</filename>."
-#: ../C/gdm.xml:5777 (para)
+#: ../C/gdm.xml:5834 (para)
msgid ""
"For example suppose we are on display :0, <filename>ServAuthDir</filename> "
"is <filename>&lt;var&gt;/gdm</filename> and we have the following in the "
@@ -7387,7 +7459,7 @@ msgstr ""
"filename> es <filename>/var/gdm</filename> y necesitamos tener lo "
"siguiente en el tema:"
-#: ../C/gdm.xml:5783 (screen)
+#: ../C/gdm.xml:5840 (screen)
#, no-wrap
msgid ""
"\n"
@@ -7414,7 +7486,7 @@ msgstr ""
"&lt;/item&gt;\n"
" "
-#: ../C/gdm.xml:5795 (para)
+#: ../C/gdm.xml:5852 (para)
msgid ""
"Then if the user chooses 'Foo' then <filename>&lt;var&gt;/gdm/:0."
"GreeterInfo</filename> will contain: <screen>custom-config=foo</screen>"
@@ -7422,11 +7494,11 @@ msgstr ""
"Entonces si el usuario elije «Foo» entonces <filename>&lt;var&gt;/gdm/:0."
"GreeterInfo</filename> contendrá <screen>custom-config=foo</screen>"
-#: ../C/gdm.xml:5805 (title)
+#: ../C/gdm.xml:5862 (title)
msgid "Accessibility"
msgstr "Accesibilidad"
-#: ../C/gdm.xml:5806 (para)
+#: ../C/gdm.xml:5863 (para)
msgid ""
"GDM supports \"Accessible Login\" to allow users to log in to their desktop "
"session even if they cannot easily use the screen, mouse, or keyboard in the "
@@ -7450,11 +7522,11 @@ msgstr ""
"soporta accesibilidad con el interfaz GTK+, así que el parámetro «Greeter» "
"en la configuración de GDM debe establecerse a «gdmlogin»"
-#: ../C/gdm.xml:5821 (title)
+#: ../C/gdm.xml:5878 (title)
msgid "Accessibility Configuration"
msgstr "ConfiguraciĂłn de accesibilidad"
-#: ../C/gdm.xml:5822 (para)
+#: ../C/gdm.xml:5879 (para)
msgid ""
"In order to enable Accessible Login, the system administrator must make some "
"changes to the default login configuration by manually modifying three human-"
@@ -7466,7 +7538,7 @@ msgstr ""
"manualmente tres archivos de configuraciĂłn almacenados en la configuraciĂłn "
"de GDM, AccessKeyMouseEvents y AccessDwellMouseEvents."
-#: ../C/gdm.xml:5830 (para)
+#: ../C/gdm.xml:5887 (para)
msgid ""
"In order to allow users to change the color and contrast scheme of the login "
"dialog, make sure the <filename>AllowThemeChange</filename> parameter in the "
@@ -7476,7 +7548,7 @@ msgstr ""
"entrada, asegúrese de que el parámetro <filename>AllowThemeChange</filename> "
"en la configuración de GDM está puesto a «true»."
-#: ../C/gdm.xml:5837 (para)
+#: ../C/gdm.xml:5894 (para)
msgid ""
"To restrict user changes to the visual appearance to a subset of available "
"themes, the <filename>GtkThemesToAllow</filename> parameter in the GDM "
@@ -7489,12 +7561,12 @@ msgstr ""
"establecerse a una lista de temas aceptables separados por comas. Por "
"ejemplo:"
-#: ../C/gdm.xml:5844 (screen)
+#: ../C/gdm.xml:5901 (screen)
#, no-wrap
msgid "GtkThemesToAllow=HighContrast,HighContrastInverse"
msgstr "GtkThemesToAllow=HighContrast,HighContrastInverse"
-#: ../C/gdm.xml:5846 (para)
+#: ../C/gdm.xml:5903 (para)
msgid ""
"To enable the use of assistive technologies such as the Onscreen Keyboard, "
"Screen Reader, or Magnifier, the <filename>AddGtkModules</filename> "
@@ -7509,12 +7581,12 @@ msgstr ""
"<filename>GtkModulesList</filename> debe ser descomentado y establecido como "
"sigue:"
-#: ../C/gdm.xml:5855 (screen)
+#: ../C/gdm.xml:5912 (screen)
#, no-wrap
msgid "GtkModulesList=gail:atk-bridge:dwellmouselistener:keymouselistener"
msgstr "GtkModulesList=gail:atk-bridge:dwellmouselistener:keymouselistener"
-#: ../C/gdm.xml:5857 (para)
+#: ../C/gdm.xml:5914 (para)
msgid ""
"System administrators may wish to load only the minimum subset of these "
"modules which is required to support their user base. Depending on the end-"
@@ -7542,7 +7614,7 @@ msgstr ""
"conjunto de caracterĂ­sticas reducido; paa accesibilidad optima recomendamos "
"incluir tanto gail como atk-bridge."
-#: ../C/gdm.xml:5874 (para)
+#: ../C/gdm.xml:5931 (para)
msgid ""
"Once \"keymouselistener\" and/or \"dwellmouselistener\" have been added to "
"the GtkModules loaded by GDM, you can assign end-user actions with the "
@@ -7552,7 +7624,7 @@ msgid ""
"directory. The gesture format is described in the two configuration files."
msgstr ""
-#: ../C/gdm.xml:5885 (para)
+#: ../C/gdm.xml:5942 (para)
msgid ""
"The AccessKeyMouseEvents file controls the keymouselistener Gesture Listener "
"and is used to define key-press, mouse button, or XInput device sequences "
@@ -7563,7 +7635,7 @@ msgid ""
"+xkb to your Xserver command line for gestures to work properly."
msgstr ""
-#: ../C/gdm.xml:5897 (para)
+#: ../C/gdm.xml:5954 (para)
msgid ""
"The DwellKeyMouseEvents file controls the dwellmouselistner and supports "
"gestures that involve only motion of a pointing device such as the system "
@@ -7573,7 +7645,7 @@ msgid ""
"alternate input device."
msgstr ""
-#: ../C/gdm.xml:5907 (para)
+#: ../C/gdm.xml:5964 (para)
msgid ""
"Motion gestures are defined as \"crossing events\" into and out of the login "
"dialog window. If the \"dwellmouselistener\" GtkModule is loaded, "
@@ -7582,14 +7654,14 @@ msgid ""
"the onscreen pointer."
msgstr ""
-#: ../C/gdm.xml:5916 (para)
+#: ../C/gdm.xml:5973 (para)
msgid ""
"In order to use text-to-speech services at login time (for instance, when "
"using the Screen Reader in speech mode) on some operating systems, the GDM "
"user must be made a member of the \"audio\" group"
msgstr ""
-#: ../C/gdm.xml:5923 (para)
+#: ../C/gdm.xml:5980 (para)
msgid ""
"Currently GDM does not remember what accessible technology programs have "
"been started when switching applications. So if the user switches between "
@@ -7600,7 +7672,7 @@ msgid ""
"the user session has started."
msgstr ""
-#: ../C/gdm.xml:5934 (para)
+#: ../C/gdm.xml:5991 (para)
msgid ""
"There are some issues that cause users to have problems getting the gesture "
"listeners to work. It is recommended that people use GDM version 2.8.0.5 or "
@@ -7618,11 +7690,11 @@ msgid ""
"before GDM will recognize them."
msgstr ""
-#: ../C/gdm.xml:5955 (title)
+#: ../C/gdm.xml:6012 (title)
msgid "Accessibility Login Sound Configuration"
msgstr "ConfiguraciĂłn de sonido de accesibilidad en la entrada"
-#: ../C/gdm.xml:5956 (para)
+#: ../C/gdm.xml:6013 (para)
msgid ""
"By default, GDM requires a media application such as \"sox\" to be present "
"to play sounds for successful or failed login. GDM defaults the location of "
@@ -7633,22 +7705,22 @@ msgid ""
"audio."
msgstr ""
-#: ../C/gdm.xml:5971 (title)
+#: ../C/gdm.xml:6028 (title)
msgid "Solaris Specific Features"
msgstr "CaracterĂ­sticas especĂ­ficas de Solaris"
-#: ../C/gdm.xml:5973 (para)
+#: ../C/gdm.xml:6030 (para)
msgid "GDM supports a few features specific to Solaris, as follows:"
msgstr ""
"GDM soporta unas pocas caracterĂ­sticas especĂ­ficas a Solaris, como las "
"siguientes:"
-#: ../C/gdm.xml:5977 (para)
+#: ../C/gdm.xml:6034 (para)
msgid "GDM supports Solaris Auditing if running on Solaris 10 or higher."
msgstr ""
"GDM soporta Solaris Auditing si se ejecuta sobre Solaris 10 o superior."
-#: ../C/gdm.xml:5981 (para)
+#: ../C/gdm.xml:6038 (para)
msgid ""
"GDM supports a security feature which causes the X server to run as the user "
"instead of as the root user. GDM must be using PAM for this feature to be "
@@ -7657,7 +7729,7 @@ msgid ""
"which disables the AlwaysRestartServer configuration option."
msgstr ""
-#: ../C/gdm.xml:5990 (para)
+#: ../C/gdm.xml:6047 (para)
msgid ""
"Solaris supports the <filename>/etc/default/login</filename> interface, "
"which affects the <filename>DefaultPath</filename>, <filename>RootPath</"
@@ -7666,11 +7738,11 @@ msgid ""
"Configuration section."
msgstr ""
-#: ../C/gdm.xml:6002 (title)
+#: ../C/gdm.xml:6059 (title)
msgid "Example Configurations"
msgstr "Configuraciones de ejemplo"
-#: ../C/gdm.xml:6004 (para)
+#: ../C/gdm.xml:6061 (para)
msgid ""
"This section has some example configurations that are useful for various "
"setups."
@@ -7678,11 +7750,11 @@ msgstr ""
"Esta secciĂłn tiene algunas configuraciones de ejemplo que son Ăştiles para "
"varias configuraciones."
-#: ../C/gdm.xml:6010 (title)
+#: ../C/gdm.xml:6067 (title)
msgid "Terminal Lab With One Server"
msgstr ""
-#: ../C/gdm.xml:6012 (para)
+#: ../C/gdm.xml:6069 (para)
msgid ""
"Suppose you want to make a lab full of X terminals that all connect to one "
"server machine. So let's call one X terminal <filename>xterminal</filename> "
@@ -7690,7 +7762,7 @@ msgid ""
"install GDM on both."
msgstr ""
-#: ../C/gdm.xml:6019 (para)
+#: ../C/gdm.xml:6076 (para)
msgid ""
"On <filename>appserver</filename> you enable XDMCP, so you have <screen>\n"
"[xdmcp]\n"
@@ -7699,7 +7771,7 @@ msgid ""
"<filename>[servers]</filename> section empty."
msgstr ""
-#: ../C/gdm.xml:6029 (para)
+#: ../C/gdm.xml:6086 (para)
msgid ""
"On the <filename>xterminal</filename> you disable XDMCP (you don't want "
"anyone to connect to the xterminal really). You will add a server type "
@@ -7721,11 +7793,11 @@ msgid ""
"<filename>appserver</filename>."
msgstr ""
-#: ../C/gdm.xml:6057 (title)
+#: ../C/gdm.xml:6114 (title)
msgid "Terminal Lab With Two Or More Servers"
msgstr "Laboratorio con terminales con dos o más servidores"
-#: ../C/gdm.xml:6059 (para)
+#: ../C/gdm.xml:6116 (para)
msgid ""
"Suppose you want to make a lab full of X terminals that all connect to some "
"choice of servers. For now let's make it <filename>appserverone</filename> "
@@ -7744,7 +7816,7 @@ msgstr ""
"las consultas indirectas en el servidor debido a que ejecutamos los "
"selectores localmente en las terminales X."
-#: ../C/gdm.xml:6070 (para)
+#: ../C/gdm.xml:6127 (para)
msgid ""
"So on the <filename>xterminal</filename> you again disable XDMCP. You will "
"add a server type perhaps called <filename>Chooser</filename> as follows: "
@@ -7764,7 +7836,7 @@ msgid ""
" </screen>"
msgstr ""
-#: ../C/gdm.xml:6093 (para)
+#: ../C/gdm.xml:6150 (para)
msgid ""
"The XDMCP chooser on the X terminal will normally give a broadcast query to "
"see which servers exist on the network. If the two servers are not reachable "
@@ -7774,7 +7846,7 @@ msgid ""
"wish the users to be able to connect to."
msgstr ""
-#: ../C/gdm.xml:6103 (para)
+#: ../C/gdm.xml:6160 (para)
msgid ""
"Sometimes you may want to run the chooser on the server side however. Then "
"what you want to do is to run a configuration similar to the previous "
@@ -7792,11 +7864,11 @@ msgid ""
"terminals."
msgstr ""
-#: ../C/gdm.xml:6125 (title)
+#: ../C/gdm.xml:6182 (title)
msgid "Troubleshooting"
msgstr ""
-#: ../C/gdm.xml:6127 (para)
+#: ../C/gdm.xml:6184 (para)
msgid ""
"This section discusses helpful tips for getting GDM working. In general, if "
"you have a problem using GDM, you can submit a bug to the \"gdm\" category "
@@ -7812,11 +7884,11 @@ msgid ""
"include the GDM debug information and do not sent the entire file."
msgstr ""
-#: ../C/gdm.xml:6146 (title)
+#: ../C/gdm.xml:6203 (title)
msgid "GDM Will Not Start"
msgstr ""
-#: ../C/gdm.xml:6148 (para)
+#: ../C/gdm.xml:6205 (para)
msgid ""
"There are a many problems that can cause GDM to fail to start, but this "
"section will discuss a few common problems and how to approach tracking down "
@@ -7825,7 +7897,7 @@ msgid ""
"track down problems when GDM fails silently."
msgstr ""
-#: ../C/gdm.xml:6157 (para)
+#: ../C/gdm.xml:6214 (para)
msgid ""
"First make sure that the Xserver is configured properly. The GDM "
"configuration file contains a command in the [server-Standard] section that "
@@ -7838,7 +7910,7 @@ msgid ""
"file so that it is correct for your system."
msgstr ""
-#: ../C/gdm.xml:6170 (para)
+#: ../C/gdm.xml:6227 (para)
msgid ""
"Another common problem is that the GDM greeter program is having trouble "
"starting. This can happen, for example, if GDM cannot find a needed library "
@@ -7850,18 +7922,18 @@ msgid ""
"highlight the problem."
msgstr ""
-#: ../C/gdm.xml:6182 (para)
+#: ../C/gdm.xml:6239 (para)
msgid ""
"Also make sure that the <filename>/tmp</filename> directory has reasonable "
"ownership and permissions, and that the machine's file system is not full. "
"These problems will cause GDM to fail to start."
msgstr ""
-#: ../C/gdm.xml:6190 (title)
+#: ../C/gdm.xml:6247 (title)
msgid "GDM Will Not Access User Settings"
msgstr ""
-#: ../C/gdm.xml:6192 (para)
+#: ../C/gdm.xml:6249 (para)
msgid ""
"GDM saves user settings, such as your default session and default language, "
"in the <filename>~/.dmrc</filename>. Other files, such as the user's "
@@ -7875,11 +7947,11 @@ msgid ""
"of the \"Overview\"."
msgstr ""
-#: ../C/gdm.xml:6211 (title)
+#: ../C/gdm.xml:6268 (title)
msgid "License"
msgstr "Licencia"
-#: ../C/gdm.xml:6212 (para)
+#: ../C/gdm.xml:6269 (para)
msgid ""
"This program is free software; you can redistribute it and/or modify it "
"under the terms of the <ulink type=\"help\" url=\"gnome-help:gpl"
@@ -7888,7 +7960,7 @@ msgid ""
"option) any later version."
msgstr ""
-#: ../C/gdm.xml:6220 (para)
+#: ../C/gdm.xml:6277 (para)
msgid ""
"This program is distributed in the hope that it will be useful, but WITHOUT "
"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
@@ -7896,7 +7968,7 @@ msgid ""
"License</citetitle> for more details."
msgstr ""
-#: ../C/gdm.xml:6226 (para)
+#: ../C/gdm.xml:6283 (para)
msgid ""
"A copy of the <citetitle>GNU General Public License</citetitle> is included "
"as an appendix to the <citetitle>GNOME Users Guide</citetitle>. You may also "
diff --git a/docs/es/gdm.xml b/docs/es/gdm.xml
index ab213959..a5dc8b68 100644
--- a/docs/es/gdm.xml
+++ b/docs/es/gdm.xml
@@ -128,7 +128,7 @@
<para>Las pantallas locales estáticas siempre se inician por el demonio, y cuando mueren o se les mata, se reinician. GDM puede ejecutar tantos como se necesiten. GDM puede gestionar además servidores en los cuales no gestiona la entrada él mismo, permitiendo usar GDM para soportar terminales X.</para>
- <para>Las pantallas flexibles o bajo demanda, se inician por medio del protocolo socket con el comando <command>gdmflexiserver</command>. Esta característica sólo está disponible para los usuarios que hayan entrado en la consola y mostrará una pantalla de entrada nueva. Si una pantalla flexible se ha iniciado anteriormente en la consola, ejecutando <command>gdmflexiserver</command> de nuevo se mostrará un menú permitiendo a los usuarios volver a la sesión existente. El comando <command>gdmflexiserver</command> puede usarse además para lanzar pantallas anidadas con <command>Xnest</command>. Éstas se lanzan en una ventana en la sesión actual del usuario. Las pantallas anidadas pueden iniciarse incluso si no se ha entrado en la consola y se inician ejecutando el comando <command>gdmflexiserver -n</command>. Las pantallas flexibles requieren soporte de terminales virtuales en el núcleo, y no estarán disponibles si no están soportados (como en Solaris). Las pantallas anidades requieren que el servidor X soporte Xnest.</para>
+ <para>Flexible, or on demand displays, are started via the socket protocol with the <command>gdmflexiserver</command> command. This feature is only available to users logged in on the console and will display a new login screen. If a flexible display has previously been started on the console, running <command>gdmflexiserver</command> again will display a menu allowing users to switch back to a previous session or start a new flexible session. The <command>gdmflexiserver</command> locks the current session before starting a new flexible display, so the user's password must be entered before returning to an existing session. The <command>gdmflexiserver</command> command can also be used to launch nested <command>Xnest</command> display. These are launched in a window in the user's current session. Nested displays can be started even if not logged into the console and are started by running the <command>gdmflexiserver -n</command> command. Flexible displays are not restarted when the user session ends. Flexible displays require virtual terminal (VT) support in the kernel, and will not be available if not supported (such as on Solaris). Nested displays require that the X server supports Xnest.</para>
<para>El último tipo es la pantalla remota XDMCP que se describe en la siguiente sección. Los equipos remotos pueden conectarse a GDM y presentar la pantalla de entrada si esto está activado. Algunas cosas son diferentes para las sesiones remotas. Por ejemplo, el menú Acciones que permite apagar, reiniciar o configurar GDM no se mostrará.</para>
</sect2>
@@ -191,7 +191,7 @@
<para>GDM primero buscará la imagen de la cara del usuario en <filename>~/.face</filename>. Si no la encuentra, intentará con <filename>~/.face.icon</filename>. Si aún no la encuentra, usará el valor definido para "face/picture=" en el archivo <filename>~/.gnome2/gdm</filename>. Por último intentará con <filename>~/.gnome2/photo</filename> y <filename>~/.gnome/photo</filename> los cuales están obsoletos y se soportan por compatibilidad hacia atrás.</para>
- <para>Si un usuario no tiene una imagen de rostro definida, GDM usará el icono "stock_person" definido en el tema GTK+ actual. Si dicha imagen no está definida, entonces usará la imagen especificada en la opción de configuración <filename>DefaultFace</filename> como resguardo, normalmente /usr/share/pixmaps/nobody.png.</para>
+ <para>If a user has no defined face image, GDM will use the "stock_person" icon defined in the current GTK+ theme. If no such image is defined, it will fallback to the image specified in the <filename>DefaultFace</filename> configuration option, normally /usr/share/pixmaps/nobody.png.</para>
<para>Note que cargar y escalar los iconos de rostros situados en los directorios personales de los usuarios puede ser una tarea que consuma mucho tiempo. Debido a que no es práctico cargar imágenes sobre NIS o NFS, GDM no intenta cargar imágenes de rostros desde directorios personales remotos. Además, GDM parará de cargar imágenes de rostros después de 5 segundos de actividad y sólo mostrará los usuarios cuyas imágenes haya obtenido hasta entonces. La opción <filename>Include</filename> de <filename>gdm.conf</filename> puede usarse para especificar un conjunto de usuarios que deberían aparecer en el visor de rostros. Mientras los usuarios a incluir tengan un tamaño razonable, no debería haber ningún problema con GDM siendo incapaz de acceder a las imágenes de rostros. Para evitar estos problemas, se recomienda situar las imágenes de rostros en el directorio especificado por la opción de configuración <filename>GlobalFaceDir</filename>.</para>
@@ -1817,42 +1817,112 @@ Language=es_ES.UTF-8
<para>gdmflexiserver accepts the following commands with the --command option:</para>
<screen>
-VERSION
+ADD_DYNAMIC_DISPLAY
+ALL_SERVERS
+ATTACHED_SERVERS
AUTH_LOCAL
-FLEXI_XSERVER
+CLOSE
FLEXI_XNEST
-ATTACHED_SERVERS
-ALL_SERVERS
-GET_SERVER_LIST
-GET_SERVER_DETAILS
+FLEXI_XSERVER
GET_CONFIG
GET_CONFIG_FILE
-UPDATE_CONFIG
+GET_SERVER_LIST
+GET_SERVER_DETAILS
GREETERPIDS
QUERY_LOGOUT_ACTION
+QUERY_VT
+RELEASE_DYNAMIC_DISPLAYS
+REMOVE_DYNAMIC_DISPLAY
+SERVER_BUSY
SET_LOGOUT_ACTION
SET_SAFE_LOGOUT_ACTION
-QUERY_VT
SET_VT
-CLOSE
+UPDATE_CONFIG
+VERSION
</screen>
<para>These are described in detail below, including required arguments, response format, and return codes.</para>
- <sect3 id="queryversion">
- <title>VERSION</title>
+ <sect3 id="adddynamic">
+ <title>ADD_DYNAMIC_DISPLAY</title>
<screen>
-VERSION: Query GDM version
-Supported since: 2.2.4.0
+ADD_DYNAMIC_DISPLAY: Create a new server definition that will
+ run on the specified display leaving, it
+ in DISPLAY_CONFIG state.
+Supported since: 2.8.0.0
+Arguments: &lt;display to run on&gt;=&lt;server&gt;
+ Where &lt;server&gt; is either a configuration named in the
+ GDM configuration or a literal command name.
+Answers:
+ OK &lt;display&gt;
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
+ 2 = Existing display
+ 3 = No server string
+ 4 = Display startup failure
+ 100 = Not authenticated
+ 200 = Dynamic Displays not allowed
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
+ <sect3 id="allservers">
+ <title>ALL_SERVERS</title>
+ <screen>
+ALL_SERVERS: List all displays, including console, remote, xnest.
+ This can, for example, be useful to figure out if
+ the display you are on is managed by the gdm daemon,
+ by seeing if it is in the list. It is also somewhat
+ like the 'w' command but for graphical sessions.
+Supported since: 2.4.2.96
Arguments: None
Answers:
- GDM &lt;gdm version&gt;
+ OK &lt;server&gt;;&lt;server&gt;;...
+
+ &lt;server&gt; is &lt;display&gt;,&lt;logged in user&gt;
+
+ &lt;logged in user&gt; can be empty in case no one logged in yet
+
ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
200 = Too many messages
999 = Unknown error
</screen>
</sect3>
+
+ <sect3 id="attachedservers">
+ <title>ATTACHED_SERVERS</title>
+ <screen>
+ATTACHED_SERVERS: List all attached displays. Doesn't list XDMCP
+ and xnest non-attached displays.
+Note: This command used to be named CONSOLE_SERVERS,
+ which is still recognized for backwards
+ compatibility. The optional pattern argument
+ is supported as of version 2.8.0.0.
+Supported since: 2.2.4.0
+Arguments: &lt;pattern&gt; (optional)
+ With no argument, all attached displays are returned. The optional
+ &lt;pattern&gt; is a string that may contain glob characters '*', '?', and
+ '[]'. Only displays that match the pattern will be returned.
+Answers:
+ OK &lt;server&gt;;&lt;server&gt;;...
+
+ &lt;server&gt; is &lt;display&gt;,&lt;logged in user&gt;,&lt;vt or xnest display&gt;
+
+ &lt;logged in user&gt; can be empty in case no one logged
+ in yet, and &lt;vt&gt; can be -1 if it's not known or not
+ supported (on non-Linux for example). If the display is an
+ xnest display and is a console one (that is, it is an xnest
+ inside another console display) it is listed and instead of
+ vt, it lists the parent display in standard form.
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 1 = Not implemented
+ 200 = Too many messages
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
<sect3 id="authlocal">
<title>AUTH_LOCAL</title>
<screen>
@@ -1884,29 +1954,16 @@ Answers:
</screen>
</sect3>
- <sect3 id="flexixserver">
- <title>FLEXI_XSERVER</title>
+ <sect3 id="close">
+ <title>CLOSE</title>
<screen>
-FLEXI_XSERVER: Start a new X flexible display. Only supported on
- connection that passed AUTH_LOCAL
+CLOSE: Close sockets connection
Supported since: 2.2.4.0
-Arguments: &lt;xserver type&gt;
- If no arguments, starts the standard X server
-Answers:
- OK &lt;display&gt;
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 0 = Not implemented
- 1 = No more flexi servers
- 2 = Startup errors
- 3 = X failed
- 4 = X too busy
- 6 = No server binary
- 100 = Not authenticated
- 200 = Too many messages
- 999 = Unknown error
+Arguments: None
+Answers: None
</screen>
</sect3>
-
+
<sect3 id="flexixnest">
<title>FLEXI_XNEST</title>
<screen>
@@ -1946,134 +2003,66 @@ Answers:
</screen>
</sect3>
- <sect3 id="adddynamic">
- <title>ADD_DYNAMIC_DISPLAY</title>
- <screen>
-ADD_DYNAMIC_DISPLAY: Create a new server definition that will
- run on the specified display leaving, it
- in DISPLAY_CONFIG state.
-Supported since: 2.8.0.0
-Arguments: &lt;display to run on&gt;=&lt;server&gt;
- Where &lt;server&gt; is either a configuration named in the
- GDM configuration or a literal command name.
-Answers:
- OK &lt;display&gt;
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 0 = Not implemented
- 2 = Existing display
- 3 = No server string
- 4 = Display startup failure
- 100 = Not authenticated
- 200 = Dynamic Displays not allowed
- 999 = Unknown error
- </screen>
- </sect3>
-
- <sect3 id="releasedynamic">
- <title>RELEASE_DYNAMIC_DISPLAYS</title>
- <screen>
-RELEASE_DYNAMIC_DISPLAYS: Release dynamic displays currently in
- DISPLAY_CONFIG state
-Supported since: 2.8.0.0
-Arguments: None
-Answers:
- OK &lt;display&gt;
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 0 = Not implemented
- 100 = Not authenticated
- 200 = Dynamic Displays not allowed
- 999 = Unknown error
- </screen>
- </sect3>
-
- <sect3 id="removedynamic">
- <title>REMOVE_DYNAMIC_DISPLAY</title>
+ <sect3 id="flexixserver">
+ <title>FLEXI_XSERVER</title>
<screen>
-REMOVE_DYNAMIC_DISPLAY: Remove a dynamic display, killing the server
- and purging the display configuration
-Supported since: 2.8.0.0
-Arguments: &lt;display to remove&gt;
+FLEXI_XSERVER: Start a new X flexible display. Only supported on
+ connection that passed AUTH_LOCAL
+Supported since: 2.2.4.0
+Arguments: &lt;xserver type&gt;
+ If no arguments, starts the standard X server
Answers:
OK &lt;display&gt;
ERROR &lt;err number&gt; &lt;english error description&gt;
0 = Not implemented
- 1 = Bad display number
+ 1 = No more flexi servers
+ 2 = Startup errors
+ 3 = X failed
+ 4 = X too busy
+ 6 = No server binary
100 = Not authenticated
- 200 = Dynamic Displays not allowed
- 999 = Unknown error
- </screen>
- </sect3>
-
- <sect3 id="attachedservers">
- <title>ATTACHED_SERVERS</title>
- <screen>
-ATTACHED_SERVERS: List all attached displays. Doesn't list XDMCP
- and xnest non-attached displays.
-Note: This command used to be named CONSOLE_SERVERS,
- which is still recognized for backwards
- compatibility. The optional pattern argument
- is supported as of version 2.8.0.0.
-Supported since: 2.2.4.0
-Arguments: &lt;pattern&gt; (optional)
- With no argument, all attached displays are returned. The optional
- &lt;pattern&gt; is a string that may contain glob characters '*', '?', and
- '[]'. Only displays that match the pattern will be returned.
-Answers:
- OK &lt;server&gt;;&lt;server&gt;;...
-
- &lt;server&gt; is &lt;display&gt;,&lt;logged in user&gt;,&lt;vt or xnest display&gt;
-
- &lt;logged in user&gt; can be empty in case no one logged
- in yet, and &lt;vt&gt; can be -1 if it's not known or not
- supported (on non-Linux for example). If the display is an
- xnest display and is a console one (that is, it is an xnest
- inside another console display) it is listed and instead of
- vt, it lists the parent display in standard form.
-
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 1 = Not implemented
200 = Too many messages
999 = Unknown error
</screen>
</sect3>
-
- <sect3 id="allservers">
- <title>ALL_SERVERS</title>
+
+ <sect3 id="getconfig">
+ <title>GET_CONFIG</title>
<screen>
-ALL_SERVERS: List all displays, including console, remote, xnest.
- This can, for example, be useful to figure out if
- the display you are on is managed by the gdm daemon,
- by seeing if it is in the list. It is also somewhat
- like the 'w' command but for graphical sessions.
-Supported since: 2.4.2.96
-Arguments: None
+GET_CONFIG: Get configuration value for key. Useful so
+ that other applications can request configuration
+ information from GDM. Any key defined as GDM_KEY_*
+ in gdm.h is supported. Starting with version 2.13.0.2
+ translated keys (such as "greeter/GdmWelcome[cs]" are
+ supported via GET_CONFIG. Also starting with version
+ 2.13.0.2 it is no longer necessary to include the
+ default value (i.e. you can use key "greeter/IncludeAll"
+ instead of having to use "greeter/IncludeAll=false".
+Supported since: 2.6.0.9
+Arguments: &lt;key&gt;
Answers:
- OK &lt;server&gt;;&lt;server&gt;;...
-
- &lt;server&gt; is &lt;display&gt;,&lt;logged in user&gt;
-
- &lt;logged in user&gt; can be empty in case no one logged in yet
-
+ OK &lt;value&gt;
ERROR &lt;err number&gt; &lt;english error description&gt;
0 = Not implemented
+ 50 = Unsupported key
200 = Too many messages
999 = Unknown error
</screen>
</sect3>
-
- <sect3 id="getserverlist">
- <title>GET_SERVER_LIST</title>
+
+ <sect3 id="getconfigfile">
+ <title>GET_CONFIG_FILE</title>
<screen>
-GET_SERVER_LIST: Get a list of the server sections from
- the configuration file.
-Supported since: 2.13.0.4
+GET_CONFIG_FILE: Get config file location being used by
+ the daemon. If the GDM daemon was started
+ with the --config option, it will return
+ the value passed in via the argument.
+Supported since: 2.8.0.2
Arguments: None
Answers:
- OK &lt;value&gt;;&lt;value&gt;;...
+ OK &lt;full path to GDM configuration file&gt;
ERROR &lt;err number&gt; &lt;english error description&gt;
0 = Not implemented
- 1 = No servers found
- 50 = Unsupported key
200 = Too many messages
999 = Unknown error
</screen>
@@ -2109,125 +2098,24 @@ Answers:
</screen>
</sect3>
- <sect3 id="getconfig">
- <title>GET_CONFIG</title>
- <screen>
-GET_CONFIG: Get configuration value for key. Useful so
- that other applications can request configuration
- information from GDM. Any key defined as GDM_KEY_*
- in gdm.h is supported. Starting with version 2.13.0.2
- translated keys (such as "greeter/GdmWelcome[cs]" are
- supported via GET_CONFIG. Also starting with version
- 2.13.0.2 it is no longer necessary to include the
- default value (i.e. you can use key "greeter/IncludeAll"
- instead of having to use "greeter/IncludeAll=false".
-Supported since: 2.6.0.9
-Arguments: &lt;key&gt;
-Answers:
- OK &lt;value&gt;
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 0 = Not implemented
- 50 = Unsupported key
- 200 = Too many messages
- 999 = Unknown error
- </screen>
- </sect3>
-
- <sect3 id="getconfigfile">
- <title>GET_CONFIG_FILE</title>
+ <sect3 id="getserverlist">
+ <title>GET_SERVER_LIST</title>
<screen>
-GET_CONFIG_FILE: Get config file location being used by
- the daemon. If the GDM daemon was started
- with the --config option, it will return
- the value passed in via the argument.
-Supported since: 2.8.0.2
+GET_SERVER_LIST: Get a list of the server sections from
+ the configuration file.
+Supported since: 2.13.0.4
Arguments: None
Answers:
- OK &lt;full path to GDM configuration file&gt;
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 0 = Not implemented
- 200 = Too many messages
- 999 = Unknown error
- </screen>
- </sect3>
-
- <sect3 id="updateconfig">
- <title>UPDATE_CONFIG</title>
- <screen>
-UPDATE_CONFIG: Tell the daemon to re-read a key from the
- GDM configuration file. Any user can request
- that values are re-read but the daemon will
- only do so if the file has been modified
- since GDM first read the file. Only users
- who can change the GDM configuration file
- (normally writable only by the root user) can
- actually modify the GDM configuration. This
- command is useful to cause the GDM to update
- itself to recognize a change made to the GDM
- configuration file by the root user.
-
- Starting with version 2.13.0.0, all GDM keys are
- supported except for the following:
-
- daemon/PidFile
- daemon/ConsoleNotify
- daemon/User
- daemon/Group
- daemon/LogDir
- daemon/ServAuthDir
- daemon/UserAuthDir
- daemon/UserAuthFile
- daemon/UserAuthFBDir
-
- GDM also supports the following Psuedokeys:
-
- xdmcp/PARAMETERS (2.3.90.2) updates the following:
- xdmcp/MaxPending
- xdmcp/MaxSessions
- xdmcp/MaxWait
- xdmcp/DisplaysPerHost
- xdmcp/HonorIndirect
- xdmcp/MaxPendingIndirect
- xdmcp/MaxWaitIndirect
- xdmcp/PingIntervalSeconds (only affects new connections)
-
- xservers/PARAMETERS (2.13.0.4) updates the following:
- all [server-foo] sections.
-
- Supported keys for previous versions of GDM:
-
- security/AllowRoot (2.3.90.2)
- security/AllowRemoteRoot (2.3.90.2)
- security/AllowRemoteAutoLogin (2.3.90.2)
- security/RetryDelay (2.3.90.2)
- security/DisallowTCP (2.4.2.0)
- daemon/Greeter (2.3.90.2)
- daemon/RemoteGreeter (2.3.90.2)
- xdmcp/Enable (2.3.90.2)
- xdmcp/Port (2.3.90.2)
- daemon/TimedLogin (2.3.90.3)
- daemon/TimedLoginEnable (2.3.90.3)
- daemon/TimedLoginDelay (2.3.90.3)
- greeter/SystemMenu (2.3.90.3)
- greeter/ConfigAvailable (2.3.90.3)
- greeter/ChooserButton (2.4.2.0)
- greeter/SoundOnLoginFile (2.5.90.0)
- daemon/AddGtkModules (2.5.90.0)
- daemon/GtkModulesList (2.5.90.0)
-Supported since: 2.3.90.2
-Arguments: &lt;key&gt;
- &lt;key&gt; is just the base part of the key such as
- "security/AllowRemoteRoot"
-Answers:
- OK
+ OK &lt;value&gt;;&lt;value&gt;;...
ERROR &lt;err number&gt; &lt;english error description&gt;
0 = Not implemented
+ 1 = No servers found
50 = Unsupported key
200 = Too many messages
999 = Unknown error
</screen>
</sect3>
-
+
<sect3 id="greeterpids">
<title>GREETERPIDS</title>
<screen>
@@ -2268,6 +2156,83 @@ Answers:
</screen>
</sect3>
+ <sect3 id="queryvt">
+ <title>QUERY_VT</title>
+ <screen>
+QUERY_VT: Ask the daemon about which VT we are currently on.
+ This is useful for logins which don't own
+ /dev/console but are still console logins. Only
+ supported on Linux currently, other places will
+ just get ERROR 8. This is also the way to query
+ if VT support is available in the daemon in the
+ first place. Only supported on connections that
+ passed AUTH_LOCAL.
+Supported since: 2.5.90.0
+Arguments: None
+Answers:
+ OK &lt;vt number&gt;
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
+ 8 = Virtual terminals not supported
+ 100 = Not authenticated
+ 200 = Too many messages
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
+ <sect3 id="releasedynamic">
+ <title>RELEASE_DYNAMIC_DISPLAYS</title>
+ <screen>
+RELEASE_DYNAMIC_DISPLAYS: Release dynamic displays currently in
+ DISPLAY_CONFIG state
+Supported since: 2.8.0.0
+Arguments: None
+Answers:
+ OK &lt;display&gt;
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
+ 100 = Not authenticated
+ 200 = Dynamic Displays not allowed
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
+ <sect3 id="removedynamic">
+ <title>REMOVE_DYNAMIC_DISPLAY</title>
+ <screen>
+REMOVE_DYNAMIC_DISPLAY: Remove a dynamic display, killing the server
+ and purging the display configuration
+Supported since: 2.8.0.0
+Arguments: &lt;display to remove&gt;
+Answers:
+ OK &lt;display&gt;
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
+ 1 = Bad display number
+ 100 = Not authenticated
+ 200 = Dynamic Displays not allowed
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
+ <sect3 id="serverbusy">
+ <title>SERVER_BUSY</title>
+ <screen>
+SERVER_BUSY: Returns true if half or more of the daemon's sockets
+ are busy, false otherwise. Used by slave programs
+ which want to ensure they do not overwhelm the
+ sever.
+Supported since: 2.13.0.8
+Arguments: None
+Answers:
+ OK &lt;value&gt;
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
+ 200 = Too many messages
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
<sect3 id="setlogoutaction">
<title>SET_LOGOUT_ACTION</title>
<screen>
@@ -2321,30 +2286,6 @@ Answers:
</screen>
</sect3>
- <sect3 id="queryvt">
- <title>QUERY_VT</title>
- <screen>
-QUERY_VT: Ask the daemon about which VT we are currently on.
- This is useful for logins which don't own
- /dev/console but are still console logins. Only
- supported on Linux currently, other places will
- just get ERROR 8. This is also the way to query
- if VT support is available in the daemon in the
- first place. Only supported on connections that
- passed AUTH_LOCAL.
-Supported since: 2.5.90.0
-Arguments: None
-Answers:
- OK &lt;vt number&gt;
- ERROR &lt;err number&gt; &lt;english error description&gt;
- 0 = Not implemented
- 8 = Virtual terminals not supported
- 100 = Not authenticated
- 200 = Too many messages
- 999 = Unknown error
- </screen>
- </sect3>
-
<sect3 id="setvt">
<title>SET_VT</title>
<screen>
@@ -2367,15 +2308,97 @@ Answers:
</screen>
</sect3>
- <sect3 id="close">
- <title>CLOSE</title>
+ <sect3 id="updateconfig">
+ <title>UPDATE_CONFIG</title>
<screen>
-CLOSE: Close sockets connection
+UPDATE_CONFIG: Tell the daemon to re-read a key from the
+ GDM configuration file. Any user can request
+ that values are re-read but the daemon will
+ only do so if the file has been modified
+ since GDM first read the file. Only users
+ who can change the GDM configuration file
+ (normally writable only by the root user) can
+ actually modify the GDM configuration. This
+ command is useful to cause the GDM to update
+ itself to recognize a change made to the GDM
+ configuration file by the root user.
+
+ Starting with version 2.13.0.0, all GDM keys are
+ supported except for the following:
+
+ daemon/PidFile
+ daemon/ConsoleNotify
+ daemon/User
+ daemon/Group
+ daemon/LogDir
+ daemon/ServAuthDir
+ daemon/UserAuthDir
+ daemon/UserAuthFile
+ daemon/UserAuthFBDir
+
+ GDM also supports the following Psuedokeys:
+
+ xdmcp/PARAMETERS (2.3.90.2) updates the following:
+ xdmcp/MaxPending
+ xdmcp/MaxSessions
+ xdmcp/MaxWait
+ xdmcp/DisplaysPerHost
+ xdmcp/HonorIndirect
+ xdmcp/MaxPendingIndirect
+ xdmcp/MaxWaitIndirect
+ xdmcp/PingIntervalSeconds (only affects new connections)
+
+ xservers/PARAMETERS (2.13.0.4) updates the following:
+ all [server-foo] sections.
+
+ Supported keys for previous versions of GDM:
+
+ security/AllowRoot (2.3.90.2)
+ security/AllowRemoteRoot (2.3.90.2)
+ security/AllowRemoteAutoLogin (2.3.90.2)
+ security/RetryDelay (2.3.90.2)
+ security/DisallowTCP (2.4.2.0)
+ daemon/Greeter (2.3.90.2)
+ daemon/RemoteGreeter (2.3.90.2)
+ xdmcp/Enable (2.3.90.2)
+ xdmcp/Port (2.3.90.2)
+ daemon/TimedLogin (2.3.90.3)
+ daemon/TimedLoginEnable (2.3.90.3)
+ daemon/TimedLoginDelay (2.3.90.3)
+ greeter/SystemMenu (2.3.90.3)
+ greeter/ConfigAvailable (2.3.90.3)
+ greeter/ChooserButton (2.4.2.0)
+ greeter/SoundOnLoginFile (2.5.90.0)
+ daemon/AddGtkModules (2.5.90.0)
+ daemon/GtkModulesList (2.5.90.0)
+Supported since: 2.3.90.2
+Arguments: &lt;key&gt;
+ &lt;key&gt; is just the base part of the key such as
+ "security/AllowRemoteRoot"
+Answers:
+ OK
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 0 = Not implemented
+ 50 = Unsupported key
+ 200 = Too many messages
+ 999 = Unknown error
+ </screen>
+ </sect3>
+
+ <sect3 id="queryversion">
+ <title>VERSION</title>
+ <screen>
+VERSION: Query GDM version
Supported since: 2.2.4.0
Arguments: None
-Answers: None
+Answers:
+ GDM &lt;gdm version&gt;
+ ERROR &lt;err number&gt; &lt;english error description&gt;
+ 200 = Too many messages
+ 999 = Unknown error
</screen>
</sect3>
+
</sect2>
</sect1>
@@ -2513,7 +2536,7 @@ Answers: None
<para>The <command>gdmdynamic</command> command which creates, runs, and removes displays (X servers) on demand.</para>
- <para>Some environments need the ability to tell GDM to create and manage new displays on the fly, where it is not possible to list the possible displays in GDM configuration files. The <command>gdmdynamic</command> command can be used to create a new display on a particular display number, run all newly created displays, or remove a display. The <command>gdmdynamic</command> command can also be used to list all attached displays, or only attached displays that match a pattern.</para>
+ <para>Some environments need the ability to tell GDM to create and manage new displays on the fly, where it is not possible to list the possible displays in GDM configuration files. The <command>gdmdynamic</command> command can be used to create a new display on a particular display number, run all newly created displays, or remove a display. The <command>gdmdynamic</command> command can also be used to list all attached displays, or only attached displays that match a pattern. This program is designed to manage multiple simultaneous requests and works to avoid flooding the daemon with requests. If the socket connection is busy, it will sleep and retry a certain number of times that can be tuned with the <command>-t</command> and <command>-s</command> arguments. <command>gdmdynamic</command> returns 1 on normal failure, and returns 2 if it is unable to connect to the daemon. Callers can choose to call again if a return code of 2 is received.</para>
<variablelist>
<title>Opciones de lĂ­nea de comandos de <command>gdmdynamic</command></title>
@@ -2573,6 +2596,21 @@ Answers: None
<para>Background mode. Fork child to do the work and return immediately.</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term>-t RETRY</term>
+ <listitem>
+ <para>If the daemon socket is busy, <command>gdmdynamic</command> will retry to open the connection the specified RETRY number of times. Default value is 15.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-s SLEEP</term>
+ <listitem>
+ <para>If the daemon socket is busy, <command>gdmdynamic</command> will sleep an amount of time between retries. A random number of seconds 0-5 is added to the SLEEP value to help ensure that multiple calls to gdmdynamic do not all try to restart at the same time. A SLEEP value of zero causes the sleep time to be 1 second. Default value is 8 seconds.</para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</sect3>
@@ -2729,7 +2767,7 @@ remote-flexi - In remote (XDMCP) &amp; flexi mode.
<sect3 id="gdm-ssh-session">
<title><command>gdm-ssh-session</command></title>
- <para>The <command>gdm-ssh-session</command> is normally executed by the GDM daemon when starting a securte remote connection through ssh. It does not take any options.</para>
+ <para>The <command>gdm-ssh-session</command> is normally executed by the GDM daemon when starting a secure remote connection through ssh. It does not take any options.</para>
</sect3>
</sect2>
diff --git a/gui/gdmchooser.c b/gui/gdmchooser.c
index 9c7b71fc..af70291e 100644
--- a/gui/gdmchooser.c
+++ b/gui/gdmchooser.c
@@ -1102,13 +1102,13 @@ gdm_chooser_xdmcp_init (char **hosts)
#endif
if ( ! have_ipv6) {
if ((sockfd = socket (AF_INET, SOCK_DGRAM, 0)) == -1) {
- gdm_common_fail (EXIT_FAILURE, "Could not create socket!");
+ gdm_common_fail_exit ("Could not create socket!");
}
}
if (setsockopt (sockfd, SOL_SOCKET, SO_BROADCAST,
(char *) &sockopts, sizeof (sockopts)) < 0) {
- gdm_common_fail (EXIT_FAILURE, "Could not set socket options!");
+ gdm_common_fail_exit ("Could not set socket options!");
}
/* Assemble XDMCP BROADCAST_QUERY packet in static buffer */
@@ -1165,8 +1165,7 @@ gdm_chooser_choose_host (const char *hostname)
if (strlen (xdm_address) > 64 ||
from_hex (xdm_address, xdm_addr, strlen (xdm_address)) != 0) {
- gdm_common_fail (EXIT_FAILURE,
- "gdm_chooser_chooser_host: Invalid xdm address.");
+ gdm_common_fail_exit ("gdm_chooser_chooser_host: Invalid xdm address.");
}
family = (xdm_addr[0] << 8) | xdm_addr[1];
@@ -1182,15 +1181,13 @@ gdm_chooser_choose_host (const char *hostname)
memcpy (&in6_addr.sin6_addr, &xdm_address[4], 16);
if ((fd = socket (PF_INET6, SOCK_STREAM, 0)) == -1) {
- gdm_common_fail (EXIT_FAILURE,
- "gdm_chooser_choose_host: Could not create response socket.");
+ gdm_common_fail_exit ("gdm_chooser_choose_host: Could not create response socket.");
}
if (connect (fd, (struct sockaddr *) &in6_addr,
sizeof (in6_addr)) == -1) {
- gdm_common_fail (EXIT_FAILURE,
- "gdm_chooser_chooser_host: Could not connect to xdm.");
+ gdm_common_fail_exit ("gdm_chooser_chooser_host: Could not connect to xdm.");
}
} else
#endif
@@ -1203,15 +1200,13 @@ gdm_chooser_choose_host (const char *hostname)
in_addr.sin_addr.s_addr = htonl (addr);
if ((fd = socket (PF_INET, SOCK_STREAM, 0)) == -1) {
- gdm_common_fail (EXIT_FAILURE,
- "gdm_chooser_chooser_host: Could not create response socket.");
+ gdm_common_fail_exit ("gdm_chooser_chooser_host: Could not create response socket.");
}
if (connect (fd, (struct sockaddr *) &in_addr,
sizeof (in_addr)) == -1) {
- gdm_common_fail (EXIT_FAILURE,
- "gdm_chooser_chooser_host: Could not connect to xdm.");
+ gdm_common_fail_exit ("gdm_chooser_chooser_host: Could not connect to xdm.");
}
}
@@ -1223,8 +1218,7 @@ gdm_chooser_choose_host (const char *hostname)
if (strlen (client_address) > 64 || from_hex (client_address,
client_addr, strlen (client_address)) != 0) {
- gdm_common_fail (EXIT_FAILURE,
- "gdm_chooser_chooser_host: Invalid client address.");
+ gdm_common_fail_exit ("gdm_chooser_chooser_host: Invalid client address.");
}
tmparr.data = (BYTE *) client_addr;
@@ -1241,8 +1235,7 @@ gdm_chooser_choose_host (const char *hostname)
status = getaddrinfo (hostname, NULL, &hints, &result);
if (status != 0) {
- gdm_common_fail (EXIT_FAILURE,
- "gdm_chooser_chooser_host: Could not get host entry for %s",
+ gdm_common_fail_exit ("gdm_chooser_chooser_host: Could not get host entry for %s",
hostname);
}
@@ -1255,8 +1248,7 @@ gdm_chooser_choose_host (const char *hostname)
hentry = gethostbyname (hostname);
if (!hentry) {
- gdm_common_fail (EXIT_FAILURE,
- "gdm_chooser_chooser_host: Could not get host entry for %s",
+ gdm_common_fail_exit ("gdm_chooser_chooser_host: Could not get host entry for %s",
hostname);
}
@@ -1879,20 +1871,17 @@ gdm_chooser_signals_init (void)
sigemptyset (&term.sa_mask);
if (sigaction (SIGHUP, &hup, NULL) < 0) {
- gdm_common_fail (EXIT_FAILURE,
- _("%s: Error setting up %s signal handler: %s"),
+ gdm_common_fail_exit ("%s: Error setting up %s signal handler: %s",
"gdm_signals_init", "HUP", strerror (errno));
}
if (sigaction (SIGINT, &term, NULL) < 0) {
- gdm_common_fail (EXIT_FAILURE,
- _("%s: Error setting up %s signal handler: %s"),
+ gdm_common_fail_exit ("%s: Error setting up %s signal handler: %s",
"gdm_signals_init", "INT", strerror (errno));
}
if (sigaction (SIGTERM, &term, NULL) < 0) {
- gdm_common_fail (EXIT_FAILURE,
- _("%s: Error setting up %s signal handler: %s"),
+ gdm_common_fail_exit ("%s: Error setting up %s signal handler: %s",
"gdm_signals_init", "TERM", strerror (errno));
}
@@ -1902,7 +1891,7 @@ gdm_chooser_signals_init (void)
sigdelset (&mask, SIGINT);
if (sigprocmask (SIG_SETMASK, &mask, NULL) == -1)
- gdm_common_fail (EXIT_FAILURE, _("Could not set signal mask!"));
+ gdm_common_fail_exit ("Could not set signal mask!");
}
struct poptOption xdm_options [] = {
diff --git a/gui/gdmcomm.c b/gui/gdmcomm.c
index 4b5e7d84..d668be0e 100644
--- a/gui/gdmcomm.c
+++ b/gui/gdmcomm.c
@@ -43,15 +43,16 @@
#include "gdmconfig.h"
static gboolean debug = FALSE;
+static gboolean quiet = FALSE;
static int num_cmds = 0;
/*
- * Note, we have to call gdm_common_error instead of gdm_common_debug,
- * since gdm_common_debug accesses the GDM_KEY_DEBUG which can cause
- * this function to be called again, causing an infinite loop. This
- * is why clients must call the gdmcomm_set_debug function to turn
- * on debug for these functions. We use gdm_common_error instead
- * of gdm_common_info so the messages really go to the syslog.
+ * Note, in this function we have to call gdm_common_error instead
+ * of gdm_common_debug, since gdm_common_debug accesses the
+ * GDM_KEY_DEBUG which can cause a sockets connection to get the
+ * config data, causing an infinite loop. This is why clients must
+ * call the gdmcomm_set_debug function to turn on debug for these
+ * functions.
*/
void
gdmcomm_set_debug (gboolean enable)
@@ -59,6 +60,16 @@ gdmcomm_set_debug (gboolean enable)
debug = enable;
}
+/*
+ * Normally errors are printed. Setting quiet to TRUE turns off
+ * display of error messages.
+ */
+void
+gdmcomm_set_quiet_errors (gboolean enable)
+{
+ quiet = enable;
+}
+
static char *
do_command (int fd, const char *command, gboolean get_response)
{
@@ -88,7 +99,7 @@ do_command (int fd, const char *command, gboolean get_response)
num_cmds++;
if (ret < 0) {
- if (debug)
+ if ( !quiet)
gdm_common_error ("Command failed, no data returned");
return NULL;
}
@@ -109,8 +120,19 @@ do_command (int fd, const char *command, gboolean get_response)
cstr = str->str;
g_string_free (str, FALSE);
- if (strcmp (ve_sure_string (cstr), "ERROR 200 Too many messages") == 0) {
- if (debug)
+ /*
+ * If string is empty, then the daemon likely closed the connection
+ * because of too many subconnections. At any rate the daemon should
+ * not return an empty string. All return values should start with
+ * "OK" or "ERROR". Daemon should never complain about too many
+ * messages since the slave keeps track of the number of commands sent
+ * and should not send too many, but it does not hurt to check and
+ * manage it if it somehow happens. In either case return NULL
+ * instead so the caller can try again.
+ */
+ if (ve_string_empty (cstr) ||
+ strcmp (ve_sure_string (cstr), "ERROR 200 Too many messages") == 0) {
+ if ( !quiet)
gdm_common_error ("Command failed, daemon busy.");
g_free (cstr);
return NULL;
@@ -139,9 +161,9 @@ version_ok_p (const char *version, const char *min_version)
return FALSE;
}
-static gboolean did_sleep_on_failure = FALSE;
static gboolean allow_sleep = TRUE;
-static int comm_fd = 0;
+static gboolean did_sleep_on_failure = FALSE;
+static int comm_fd = 0;
static char *
gdmcomm_call_gdm_real (const char *command,
@@ -166,24 +188,23 @@ gdmcomm_call_gdm_real (const char *command,
}
if (tries <= 0) {
- if (debug)
+ if ( !quiet)
gdm_common_error (" Command failed %d times, aborting.", try_start);
return NULL;
}
- if (debug && tries != try_start) {
- gdm_common_error (" Trying failed command again. Retry %d of %d.",
- (try_start - tries), try_start);
+ if (!quiet && tries != try_start) {
+ gdm_common_error (" Trying failed command again. Try %d of %d.",
+ (try_start - tries + 1), try_start);
}
if (comm_fd <= 0) {
struct sockaddr_un addr;
strcpy (addr.sun_path, GDM_SUP_SOCKET);
addr.sun_family = AF_UNIX;
-
comm_fd = socket (AF_UNIX, SOCK_STREAM, 0);
if (comm_fd < 0) {
- if (debug)
+ if ( !quiet)
gdm_common_error (" Failed to open socket");
return gdmcomm_call_gdm_real (command, auth_cookie, min_version, tries - 1, try_start);
@@ -191,8 +212,6 @@ gdmcomm_call_gdm_real (const char *command,
if (connect (comm_fd, (struct sockaddr *)&addr, sizeof (addr)) < 0) {
- if (debug)
- gdm_common_error (" Failed to connect to socket");
/*
* If there is a failure on connect, there are probably
@@ -204,9 +223,22 @@ gdmcomm_call_gdm_real (const char *command,
* will get set to FALSE if the first call to this
* function fails all retries.
*/
- if ((allow_sleep == TRUE) && (tries > 1)) {
+ if (allow_sleep == TRUE) {
+
did_sleep_on_failure = TRUE;
- sleep (1);
+
+ /*
+ * Only actualy sleep if we are going to try
+ * again.
+ */
+ if (tries > 1) {
+ if ( !quiet)
+ gdm_common_error (" Failed to connect to socket, sleep 1 second and retry");
+ sleep (1);
+ }
+ } else {
+ if ( !quiet)
+ gdm_common_error (" Failed to connect to socket, not sleeping");
}
VE_IGNORE_EINTR (close (comm_fd));
comm_fd = 0;
@@ -225,7 +257,7 @@ gdmcomm_call_gdm_real (const char *command,
/* Version check first - only check first time */
ret = do_command (comm_fd, GDM_SUP_VERSION, TRUE);
if (ret == NULL) {
- if (debug)
+ if ( !quiet)
gdm_common_error (" Version check failed");
VE_IGNORE_EINTR (close (comm_fd));
comm_fd = 0;
@@ -233,7 +265,7 @@ gdmcomm_call_gdm_real (const char *command,
min_version, tries - 1, try_start);
}
if (strncmp (ret, "GDM ", strlen ("GDM ")) != 0) {
- if (debug)
+ if ( !quiet)
gdm_common_error (" Version check failed, bad name");
g_free (ret);
@@ -242,7 +274,7 @@ gdmcomm_call_gdm_real (const char *command,
return NULL;
}
if ( ! version_ok_p (&ret[4], min_version)) {
- if (debug)
+ if ( !quiet)
gdm_common_error (" Version check failed, bad version");
g_free (ret);
VE_IGNORE_EINTR (close (comm_fd));
@@ -266,7 +298,7 @@ gdmcomm_call_gdm_real (const char *command,
}
/* not auth'ed */
if (strcmp (ve_sure_string (ret), "OK") != 0) {
- if (debug)
+ if ( !quiet)
gdm_common_error (" Error, auth check failed");
VE_IGNORE_EINTR (close (comm_fd));
comm_fd = 0;
@@ -308,6 +340,26 @@ gdmcomm_call_gdm (const char *command, const char * auth_cookie,
return (retstr);
}
+/**
+ * gdmcomm_did_connection_fail
+ *
+ * If allow_sleep is TRUE, then connection was able to go through.
+ * so the client can call this function after calling to see if
+ * the failure was due to the connection being too busy. This is
+ * useful for gdmdynamic.
+ */
+gboolean
+gdmcomm_did_connection_fail (void)
+{
+ return !allow_sleep;
+}
+
+void
+gdmcomm_set_allow_sleep (gboolean val)
+{
+ allow_sleep = val;
+}
+
void
gdmcomm_comm_close (void)
{
diff --git a/gui/gdmcomm.h b/gui/gdmcomm.h
index d947e2be..f56efbfb 100644
--- a/gui/gdmcomm.h
+++ b/gui/gdmcomm.h
@@ -24,10 +24,13 @@
#define GDMCOMM_H
void gdmcomm_set_debug (gboolean enable);
+void gdmcomm_set_quiet_errors (gboolean enable);
char * gdmcomm_call_gdm (const char *command,
const char *auth_cookie,
const char *min_version,
int tries);
+gboolean gdmcomm_did_connection_fail (void);
+void gdmcomm_set_allow_sleeping (void);
void gdmcomm_comm_close (void);
const char * gdmcomm_get_display (void);
diff --git a/gui/gdmcommon.c b/gui/gdmcommon.c
index 6e0bffc7..bd088434 100644
--- a/gui/gdmcommon.c
+++ b/gui/gdmcommon.c
@@ -60,13 +60,13 @@ gdm_common_openlog (const char *ident, int logopt, int facility)
}
void
-gdm_common_fail (int exitstatus, const gchar *format, ...)
+gdm_common_fail_exit (const gchar *format, ...)
{
va_list args;
gchar *s;
if (!format) {
- _exit (exitstatus);
+ _exit (EXIT_FAILURE);
}
va_start (args, format);
@@ -81,7 +81,32 @@ gdm_common_fail (int exitstatus, const gchar *format, ...)
g_free (s);
- _exit (exitstatus);
+ _exit (EXIT_FAILURE);
+}
+
+void
+gdm_common_fail_greeter (const gchar *format, ...)
+{
+ va_list args;
+ gchar *s;
+
+ if (!format) {
+ _exit (DISPLAY_GREETERFAILED);
+ }
+
+ va_start (args, format);
+ s = g_strdup_vprintf (format, args);
+ va_end (args);
+
+ if (using_syslog) {
+ syslog (LOG_ERR, "%s", s);
+ closelog ();
+ } else
+ g_printf ("%s\n", s);
+
+ g_free (s);
+
+ _exit (DISPLAY_GREETERFAILED);
}
void
diff --git a/gui/gdmcommon.h b/gui/gdmcommon.h
index 2277b87e..2f88f495 100644
--- a/gui/gdmcommon.h
+++ b/gui/gdmcommon.h
@@ -30,8 +30,9 @@
void gdm_common_openlog (const char *ident,
int logopt,
int facility);
-void gdm_common_fail (int exitstatus,
- const gchar *format, ...)
+void gdm_common_fail_exit (const gchar *format, ...)
+ G_GNUC_PRINTF (1, 2);
+void gdm_common_fail_greeter (const gchar *format, ...)
G_GNUC_PRINTF (1, 2);
void gdm_common_info (const gchar *format, ...)
G_GNUC_PRINTF (1, 2);
diff --git a/gui/gdmconfig.c b/gui/gdmconfig.c
index fc48b851..a522aaf6 100644
--- a/gui/gdmconfig.c
+++ b/gui/gdmconfig.c
@@ -37,6 +37,7 @@ static GHashTable *int_hash = NULL;
static GHashTable *bool_hash = NULL;
static GHashTable *string_hash = NULL;
static gboolean gdm_never_cache = FALSE;
+static int comm_tries = 5;
/**
* gdm_config_never_cache
@@ -57,6 +58,18 @@ gdm_config_never_cache (gboolean never_cache)
}
/**
+ * gdm_config_set_comm_retries
+ *
+ * If a client wants to specify how many times it will retry to
+ * get a config value, this function can be used.
+ */
+void
+gdm_config_set_comm_retries (int tries)
+{
+ comm_tries = tries;
+}
+
+/**
* gdm_config_hash_lookup
*
* Accesses hash with key, stripping it so it doesn't contain
@@ -120,7 +133,7 @@ gdm_config_get_result (gchar *key)
command = g_strdup_printf ("GET_CONFIG %s", newkey);
result = gdmcomm_call_gdm (command, NULL /* auth cookie */,
- "2.13.0.1", 5);
+ "2.13.0.1", comm_tries);
g_free (command);
g_free (newkey);
@@ -141,7 +154,7 @@ gdm_config_get_xserver_details (gchar *xserver, gchar *key)
command = g_strdup_printf ("GET_SERVER_DETAILS %s %s", xserver, key);
result = gdmcomm_call_gdm (command, NULL /* auth cookie */,
- "2.13.0.1", 5);
+ "2.13.0.1", comm_tries);
g_free (command);
@@ -179,7 +192,7 @@ gdm_config_get_xservers (gboolean flexible)
command = g_strdup_printf ("GET_SERVER_LIST");
result = gdmcomm_call_gdm (command, NULL /* auth cookie */,
- "2.13.0.1", 5);
+ "2.13.0.1", comm_tries);
g_free (command);
diff --git a/gui/gdmconfig.h b/gui/gdmconfig.h
index f11fa729..e0e8d390 100644
--- a/gui/gdmconfig.h
+++ b/gui/gdmconfig.h
@@ -27,6 +27,7 @@
#include "ve-miscui.h"
void gdm_config_never_cache (gboolean never_cache);
+void gdm_config_set_comm_retries (int tries);
gchar * gdm_config_get_string (gchar *key);
gchar * gdm_config_get_translated_string (gchar *key);
gint gdm_config_get_int (gchar *key);
@@ -34,12 +35,12 @@ gboolean gdm_config_get_bool (gchar *key);
gboolean gdm_config_reload_string (gchar *key);
gboolean gdm_config_reload_int (gchar *key);
gboolean gdm_config_reload_bool (gchar *key);
+GSList * gdm_config_get_xservers (gboolean flexible);
void gdm_set_servauth (gchar *file,
gchar *key,
gchar *id);
char * gdm_get_theme_greeter (gchar *file,
const char *fallback);
-GSList * gdm_config_get_xservers (gboolean flexible);
#endif /* GDMCONFIG_H */
diff --git a/gui/gdmdynamic.c b/gui/gdmdynamic.c
index 2128ca2e..f2b4f1b2 100644
--- a/gui/gdmdynamic.c
+++ b/gui/gdmdynamic.c
@@ -33,6 +33,8 @@
#include <sys/un.h>
#include <errno.h>
+#include <glib/gi18n.h>
+
#include "gdm.h"
#include "gdmcomm.h"
#include "gdmcommon.h"
@@ -43,34 +45,47 @@ static char *myname = NULL; /* name of this program */
static void
usage ()
{
- fprintf (stderr, "Usage: %s [-b][-v] and one of the following:\n", myname);
- fprintf (stderr, "\t-a display\n");
- fprintf (stderr, "\t-r display\n");
- fprintf (stderr, "\t-d display\n");
- fprintf (stderr, "\t-l [server_name]\n");
+ fprintf (stderr, _("Usage: %s [-b][-v] and one of the following:\n"), myname);
+ fprintf (stderr, _("\t-a display\n"));
+ fprintf (stderr, _("\t-r display\n"));
+ fprintf (stderr, _("\t-d display\n"));
+ fprintf (stderr, _("\t-l [server_name]\n"));
+ fprintf (stderr, _("\t-t maximum tries to connect (default 15)\n"));
+ fprintf (stderr, _("\t-s sleep value (default 8)\n"));
}
-
+/*
+ * Note: gdmdynamic does work to deal with the socket being congested
+ * because it is intended that the an umlimited number of gdmdynamic
+ * requests could be made at any moment. It is the responsibility of
+ * gdmdynamic to manage the socket connection to the daemon to make sure
+ * that it does not starve the socket, especially since the GUI login
+ * program will also be using the socket on startup.
+ */
int
main (int argc, char *argv[])
{
- char *command = NULL;
- char *cstr;
- char *version;
- char *ret = NULL;
- char *params = "";
+ gchar *cstr;
+ gchar *version;
+ gchar *params = "";
+ gchar *command = NULL;
+ gchar *ret = NULL;
+ gchar *cookie = NULL;
int optc;
- int verbose = 0;
- int background = 0;
- gboolean error = TRUE;
- char *cookie = NULL;
-
- myname = basename (argv[0]);
+ int try_num = 0;
+ int max_tries = 15;
+ int sleep_val = 8;
+ int verbose = 0;
+ int background = 0;
+ gboolean error = TRUE;
+ gboolean conn_failed = FALSE;
+ gboolean gdm_running;
+
+ myname = basename (argv[0]);
argv[0] = myname;
-
version = "2.8.0.0";
- while ((optc = getopt (argc, argv, "a:d:r:blv")) != EOF) {
+ while ((optc = getopt (argc, argv, "a:d:r:t:s:blv")) != EOF) {
switch (optc) {
case 'a':
if (command == NULL)
@@ -103,6 +118,14 @@ main (int argc, char *argv[])
params = optarg;
break;
+ case 't':
+ max_tries = atoi (optarg);
+ break;
+
+ case 's':
+ sleep_val = atoi (optarg);
+ break;
+
case 'v':
verbose++;
break;
@@ -134,42 +157,180 @@ main (int argc, char *argv[])
}
gdmcomm_set_debug (verbose);
+ /*
+ * If verbose is not on, then set quiet errors to TRUE since
+ * errors are expected and managed by gdmdynamic, so we want
+ * errors to be quiet.
+ */
+ gdmcomm_set_quiet_errors (!verbose);
if (params && strlen (params))
cstr = g_strdup_printf ("%s %s", command, params);
else
cstr = g_strdup (command);
- /* All other commands besides LIST need root cookie */
- if (strcmp (command, GDM_SUP_ATTACHED_SERVERS) != 0) {
- char *filename;
- gchar *GdmServAuthDir = NULL;
- FILE *fp;
- char buf[BUFSIZ];
-
- GdmServAuthDir = gdm_config_get_string (GDM_KEY_SERV_AUTHDIR);
- filename = g_build_filename (GdmServAuthDir, ".cookie", NULL);
-
- VE_IGNORE_EINTR (fp = fopen (filename, "r"));
- if (fp != NULL) {
- fgets (buf, sizeof (buf), fp);
- cookie = g_strdup (buf);
- VE_IGNORE_EINTR (fclose (fp));
- }
- g_free (filename);
- }
-
- ret = gdmcomm_call_gdm (cstr, cookie, version, 5);
-
- /* At this point we are done using the socket, so close it */
- gdmcomm_comm_close ();
+ /* Seed the random number generator in case we have to sleep. */
+ srand (getpid () * time (NULL));
+
+ /*
+ * Setting comm_retries to 1 ensures that gdmdynamic will fail if
+ * it fails the first time to connect. We manage sleeping and
+ * retrying in gdmdynamic instead of wanting gdmcomm to manage
+ * this.
+ */
+ gdm_config_set_comm_retries (1);
+
+ /*
+ * Never cache config data because if it fails to connect, then
+ * we want it to reload config data over the socket and not
+ * default to the compiled in value.
+ */
+ gdm_config_never_cache (TRUE);
+
+ /*
+ * If the connection is so busy that it fails, then we do not
+ * want gdmdynamic to retry and further congest the connection.
+ * Instead gdmdynamic will manage backing off and trying again
+ * after waiting.
+ */
+ do {
+ conn_failed = FALSE;
+ try_num++;
+
+ /*
+ * Verify server is not busy, sleep if it is. No need to do this
+ * check if doing LIST since this does not much much load on the
+ * daemon.
+ */
+ if (strcmp (command, GDM_SUP_ATTACHED_SERVERS) != 0) {
+ ret = gdmcomm_call_gdm (GDM_SUP_SERVER_BUSY, NULL, version, 1);
+ conn_failed = gdmcomm_did_connection_fail ();
+ if (ret == NULL)
+ conn_failed = TRUE;
+ else if (strncmp (ret, "OK", 2) == 0) {
+ ret += 2;
+ if (strlen (ret)) {
+ ret++; /* skip over space char */
+ if (strcmp (ret, "true") == 0) {
+ conn_failed = TRUE;
+ if (verbose)
+ g_print (_("Server busy, will sleep.\n"));
+ }
+ }
+ }
+ }
+
+ /*
+ * All other commands besides LIST need root cookie. Only bother
+ * getting the cookie if we haven't already gotten it since we do
+ * this in a loop.
+ */
+ if (conn_failed == FALSE &&
+ (strcmp (command, GDM_SUP_ATTACHED_SERVERS) != 0) &&
+ (cookie == NULL)) {
+ gchar *GdmServAuthDir = NULL;
+ char *filename;
+ FILE *fp;
+ char buf[BUFSIZ];
+
+ GdmServAuthDir = gdm_config_get_string (GDM_KEY_SERV_AUTHDIR);
+ conn_failed = gdmcomm_did_connection_fail ();
+
+ /*
+ * We can't build a cookie if the auth dir is NULL.
+ * Since we only connect once, this could happen if
+ * the daemon closed the connection due to too many
+ * subconnections, for example. So consider this
+ * getting a NULL value back a connection failed.
+ */
+ if (ve_string_empty (GdmServAuthDir)) {
+ conn_failed = TRUE;
+ }
+
+ if (conn_failed == FALSE) {
+
+ filename = g_build_filename (GdmServAuthDir, ".cookie", NULL);
+
+ VE_IGNORE_EINTR (fp = fopen (filename, "r"));
+ if (fp != NULL) {
+ fgets (buf, sizeof (buf), fp);
+ cookie = g_strdup (buf);
+ VE_IGNORE_EINTR (fclose (fp));
+ }
+ g_free (filename);
+ }
+ }
+
+ if (conn_failed == FALSE) {
+ /* Allow to fail if connection fails after 1 try */
+ ret = gdmcomm_call_gdm (cstr, cookie, version, 1);
+
+ /* Verify the connection did not fail */
+ conn_failed = gdmcomm_did_connection_fail ();
+
+ /*
+ * If the call returned NULL, there must be a failure
+ * talking to the daemon, consider this a connection
+ * failure.
+ */
+ if (ret == NULL) {
+ conn_failed = TRUE;
+ }
+ }
+
+ /* Close socket now we are done using it. */
+ gdmcomm_comm_close ();
+
+ /*
+ * If the connection failed, sleep and try again. The sleep time is
+ * somewhat random to ensure that if multiple calls to gdmdynamic
+ * all all failing to connect that they do not retry all at the
+ * same time.
+ */
+ if (conn_failed == TRUE) {
+ /* Sleep at least 1 second */
+ int rand_sleep = 1;
+
+
+ /*
+ * Make the sleep a bit random so if lots of calls hit the
+ * server at once, they are staggared.
+ */
+ if (sleep_val > 0)
+ rand_sleep = ((int) ((rand () % 10)/2)) + sleep_val;
+
+
+ if (verbose) {
+ g_print (_("Connection to daemon failed, sleeping for %d seconds. Retry %d of %d\n"),
+ rand_sleep, try_num, max_tries);
+ }
+
+ sleep (rand_sleep);
+
+ /* Reset the connection failed flag so it can be tried again */
+ gdmcomm_set_allow_sleep (TRUE);
+ }
+ } while ((conn_failed == TRUE) && (try_num < max_tries));
g_free (cstr);
if (cookie)
g_free (cookie);
+ /*
+ * If we failed to connect to the daemon after trying a certain number of
+ * times, then return with code 2 to let the caller know that the failure
+ * was due to connection problems. The caller can decide to perhaps
+ * sleep a bit an try this command again.
+ */
+ if (conn_failed == TRUE) {
+ /* This is a serious error, so print a message even if verbose is off */
+ fprintf (stderr, _("Failed to connect to server after %d retries\n"),
+ try_num);
+ return 2;
+ }
+
if (verbose && ret != NULL)
- fprintf (stderr,"%s\n", ret);
+ g_print ("%s\n", ret);
if (ret != NULL &&
strncmp (ret, "OK", 2) == 0) {
@@ -178,11 +339,11 @@ main (int argc, char *argv[])
ret += 2;
if (strlen (ret)) {
ret++; /* skip over space char */
- printf ("%s\n", ret);
+ g_print ("%s\n", ret);
}
- }
+ }
- /* all fine and dandy */
+ /* Success! */
return 0;
}
diff --git a/gui/gdmlogin.c b/gui/gdmlogin.c
index 90662683..1e1cadb0 100644
--- a/gui/gdmlogin.c
+++ b/gui/gdmlogin.c
@@ -2051,8 +2051,7 @@ gdm_login_ctrl_handler (GIOChannel *source, GIOCondition cond, gint fd)
default:
gdm_kill_thingies ();
- gdm_common_fail (DISPLAY_GREETERFAILED,
- "Unexpected greeter command received: '%c'", buf[0]);
+ gdm_common_fail_greeter ("Unexpected greeter command received: '%c'", buf[0]);
break;
}
@@ -3521,8 +3520,7 @@ main (int argc, char *argv[])
if G_UNLIKELY (sigaction (SIGHUP, &hup, NULL) < 0) {
gdm_kill_thingies ();
- gdm_common_fail (DISPLAY_GREETERFAILED,
- _("%s: Error setting up %s signal handler: %s"), "main",
+ gdm_common_fail_greeter (_("%s: Error setting up %s signal handler: %s"), "main",
"HUP", strerror (errno));
}
@@ -3533,15 +3531,13 @@ main (int argc, char *argv[])
if G_UNLIKELY (sigaction (SIGINT, &term, NULL) < 0) {
gdm_kill_thingies ();
- gdm_common_fail (DISPLAY_GREETERFAILED,
- _("%s: Error setting up %s signal handler: %s"), "main",
+ gdm_common_fail_greeter (_("%s: Error setting up %s signal handler: %s"), "main",
"INT", strerror (errno));
}
if G_UNLIKELY (sigaction (SIGTERM, &term, NULL) < 0) {
gdm_kill_thingies ();
- gdm_common_fail (DISPLAY_GREETERFAILED,
- _("%s: Error setting up %s signal handler: %s"), "main",
+ gdm_common_fail_greeter (_("%s: Error setting up %s signal handler: %s"), "main",
"TERM", strerror (errno));
}
@@ -3552,8 +3548,7 @@ main (int argc, char *argv[])
if G_UNLIKELY (sigprocmask (SIG_UNBLOCK, &mask, NULL) == -1) {
gdm_kill_thingies ();
- gdm_common_fail (DISPLAY_GREETERFAILED,
- _("Could not set signal mask!"));
+ gdm_common_fail_greeter (_("Could not set signal mask!"));
}
g_atexit (gdm_kill_thingies);
diff --git a/gui/gdmwm.c b/gui/gdmwm.c
index 5fa5f7a7..e06c136b 100644
--- a/gui/gdmwm.c
+++ b/gui/gdmwm.c
@@ -31,8 +31,6 @@
#include <pwd.h>
#include <unistd.h>
-#include <gdk/gdkx.h>
-
#include "gdmwm.h"
#include "gdm.h"
#include "gdmcommon.h"
diff --git a/gui/greeter/greeter.c b/gui/greeter/greeter.c
index a0a8494f..d1b483ff 100644
--- a/gui/greeter/greeter.c
+++ b/gui/greeter/greeter.c
@@ -462,8 +462,7 @@ greeter_ctrl_handler (GIOChannel *source,
break;
default:
- gdm_common_fail (DISPLAY_GREETERFAILED,
- "Unexpected greeter command received: '%c'", buf[0]);
+ gdm_common_fail_greeter ("Unexpected greeter command received: '%c'", buf[0]);
break;
}
@@ -1093,8 +1092,7 @@ main (int argc, char *argv[])
sigaddset (&hup.sa_mask, SIGCHLD);
if (sigaction (SIGHUP, &hup, NULL) < 0) {
- gdm_common_fail (DISPLAY_GREETERFAILED,
- _("%s: Error setting up %s signal handler: %s"), "main",
+ gdm_common_fail_greeter ("%s: Error setting up %s signal handler: %s", "main",
"HUP", strerror (errno));
}
@@ -1104,14 +1102,12 @@ main (int argc, char *argv[])
sigaddset (&term.sa_mask, SIGCHLD);
if G_UNLIKELY (sigaction (SIGINT, &term, NULL) < 0) {
- gdm_common_fail (DISPLAY_GREETERFAILED,
- _("%s: Error setting up %s signal handler: %s"), "main",
+ gdm_common_fail_greeter ("%s: Error setting up %s signal handler: %s", "main",
"INT", strerror (errno));
}
if G_UNLIKELY (sigaction (SIGTERM, &term, NULL) < 0) {
- gdm_common_fail (DISPLAY_GREETERFAILED,
- _("%s: Error setting up %s signal handler: %s"), "main",
+ gdm_common_fail_greeter ("%s: Error setting up %s signal handler: %s", "main",
"TERM", strerror (errno));
}
@@ -1121,8 +1117,7 @@ main (int argc, char *argv[])
sigaddset (&mask, SIGINT);
if G_UNLIKELY (sigprocmask (SIG_UNBLOCK, &mask, NULL) == -1) {
- gdm_common_fail (DISPLAY_GREETERFAILED,
- _("Could not set signal mask!"));
+ gdm_common_fail_greeter ("Could not set signal mask!");
}
/* ignore SIGCHLD */
@@ -1130,8 +1125,7 @@ main (int argc, char *argv[])
sigaddset (&mask, SIGCHLD);
if G_UNLIKELY (sigprocmask (SIG_BLOCK, &mask, NULL) == -1) {
- gdm_common_fail (DISPLAY_GREETERFAILED,
- _("Could not set signal mask!"));
+ gdm_common_fail_greeter ("Could not set signal mask!");
}
if G_LIKELY (! DOING_GDM_DEVELOPMENT) {