Re: Question and project



George wrote:
I think that you didn't setup pam correctly.  I would take a look at the

Actually, I did not even compile it in ;)
But now I understood the mistake, it is just that I did not have the development package for pam... Now things just rocks!

Nothing being done in this domain, although plugin modules can kind of open
up a can of worms in terms of security, so be careful if you decide to work
on this.  Feel free to send patches :)

yes, I understand very well. Up to now, the changes I have made simply consists of running very specific programs called from a path given
directly in the configuration xml file. Can it be a security issue?

The patches attached do the following things:
- various cleanups on xmlFreeDoc() (which did not seem to be called anywhere (or did I misunderstand xml library api?...)
- adding a new item type (module) that has 2 parameters
exetype
exe

right now the only valid value for exetype is "script" but I thought of extending later with "real" modules (libraries that will be smarter than
just static xml data).

the exe property must contain the path to the script (or compiled code).
Example:
<item type="module" exetype="script" exe="/usr/share/gdm/scripts/weather-tokyo.pl"/>

The module item is handled by patches in greeter_parser.c to simply open a pipe to the script, read the full content of the pipe as an XML document and feed that output to the parser "as if" the text was contained in the original XML file.

It enables to make very funky personalised login screen:
- display of the weather
- number of emails waiting in the mailbox
- Change the background/tint of the theme according to the time of the day (night theme, midday theme, evening theme)
- Display birthday dates or appointment from Evolutions
- display some todos (with support from a third party program, you could
setup the todos content from X)
- show the TV programs of the day
- etc.
The only problem is that it is still static. But I don't really see that
as an enormous problem. The rest will come when it is due ! :-)

As a final note:
in the attachements you will be able to find:
- popinfo.pl a simple perl program to act as a module to get info about a POP3 account
- the diff for greeter_parser.c and greeter_item.h from 2.4.1.2
- circles.xml modified to use my module changes and popinfo.pl
- mail.png and nomail.png added (they come from the stockicons in my Mandrake, I am not the author...)

I use that as my login screen since one week (for testing) and I have experienced no problem at all.

What would you like to appear dynamically on the login screen menu?
What kind of "module" would people want?

Of course mandatory screenshot of the feature (yes, it is japanese
on that screen ;)):

# mail waiting in the box
http://www.acesoliton.com/~gproux/Screenshot.png
# no mail
http://www.acesoliton.com/~gproux/Screenshot-1.png


cheers,

Guillaume
#!/usr/bin/perl

use Net::POP3;

my $mail_server = 'xxx';
my $username = 'xxx';
my $password = 'xxx';

my $pop = Net::POP3->new($mail_server,Timeout => 10);
if (!$pop)
  {
  $text="<i>No connection to server</i>";
  exit 0;
  }
$pop->login($username, $password)
    or exit 2;
my $messages = $pop->list
    or exit 3;

my $count=scalar(keys %$messages);
if ($count)
	{
	my $totalbytes=0;
		foreach (keys %$messages)
		{
		$totalbytes += $$messages{$_};
		}
	my $kb=int($totalbytes/1024);
	my $message = "message";
	$message.="s" if ($count>1);
	$text = "$count $message ($kb kbytes) for gproux";
	$mailicon="mail.png";
	}
else
	{
	$text = "No message for gproux";
	$mailicon="nomail.png";
	}

print<<EOF;
<pluginresult>
<item type="rect" id="mailinfo">
  <normal color="#FFFFFF" alpha="0.5"/>
    <pos anchor="ne" x="-20" y="20" width="box" height="box"/>
    <box orientation="horizontal" min-width="200" xpadding="10" ypadding="5" spacing="0">
<item type="pixmap">
 <normal file="$mailicon"/>
 <pos y="50%" anchor="w"/>
</item>
<item type="label">
	    <normal color="#000000" font="Sans 12"/>
	    <pos anchor="c" x="50%" y="50%"/>
	    <text>$text</text>
    </item>
  </box>
</item>
</pluginresult>
EOF
exit 0;
--- ../../../gdm-2.4.1.2/gui/greeter/greeter_item.h	2002-06-02 09:11:58.000000000 +0900
+++ greeter_item.h	2003-01-29 00:21:22.000000000 +0900
@@ -23,6 +23,7 @@
   GREETER_ITEM_TYPE_PIXMAP,
   GREETER_ITEM_TYPE_LABEL,
   GREETER_ITEM_TYPE_ENTRY,
+  GREETER_ITEM_TYPE_MODULE
 };
 
 enum _GreeterItemSizeType {
--- ../../../gdm-2.4.1.2/gui/greeter/greeter_parser.c	2003-01-03 03:06:50.000000000 +0900
+++ greeter_parser.c	2003-02-01 00:23:43.000000000 +0900
@@ -987,6 +987,8 @@
     }
 }
 
+
+
 static gboolean
 parse_label (xmlNodePtr        node,
 	     GreeterItemInfo  *info,
@@ -1120,20 +1122,134 @@
   return TRUE;
 }
 
+/* forward declaration for recursively calling methods */
+static gboolean parse_items_in_order (xmlNodePtr,GList**,GreeterItemInfo*,GError**);
+
+
+static gboolean 
+parse_module (xmlNodePtr       node,
+	      GList          **items,
+	      GreeterItemInfo *parent,
+	      GError         **error)
+{ 
+  xmlChar *prop;
+  prop = xmlGetProp (node, "exetype");
+
+  if (prop && (strcmp(prop,"script") == 0))
+    {
+      xmlFree(prop);
+      
+      gchar *text;
+      const guint textbuffersize = 1024;
+      guint textsize=0;
+      guint buffersize = textbuffersize;
+     
+      if (! (text = g_malloc(buffersize)))
+	{
+	return FALSE;
+	}
+      prop = xmlGetProp (node,"exe");
+      FILE *script;
+      script=popen(prop, "r");
+      xmlFree(prop);
+      
+      if (!script)
+	{
+	g_set_error (error,
+		     GREETER_PARSER_ERROR,
+		     GREETER_PARSER_ERROR_BAD_SPEC,
+		     "Could not open script in module");
+	  g_free(text);
+	  return FALSE;
+	}
+      else
+	{
+	  while (1)
+	    {
+	      gint read;
+	      gchar *ptext = &text[textsize];
+	      guint leftinbuffer=buffersize-textsize;
+	      
+	      read = fread(ptext,sizeof(gchar),leftinbuffer-1,script);
+	      textsize+=read;
+	      gboolean scripteof = feof(script);
+	      if ((read == (leftinbuffer-1)) && !scripteof)
+	        {
+		  /* we might need more space -- reallocate text */
+		  buffersize *= 2;
+		  text = g_realloc(text,buffersize);
+		  if (!text)
+		    {
+		      pclose(script);
+		      return FALSE;
+		    }
+		      
+		}
+	      if (scripteof)
+		{
+		break;
+		}
+	    }
+	  
+	  text[textsize]='\0';
+ 	  pclose(script);
+	  /* at that point I can call the xmlParse */
+	  xmlDoc *doc;
+	  gboolean res=TRUE;
+	  doc = xmlParseMemory(text,textsize);
+	  xmlNodePtr pipe_node;
+	  if (doc)
+	    {
+  	      pipe_node = xmlDocGetRootElement(doc);
+	      if (pipe_node)
+	          res = parse_items_in_order(pipe_node,items,parent,error);  
+	      else	        
+		  res=FALSE;
+	    }
+	  else
+	      res=FALSE;
+	 
+	  if (res == FALSE)
+		  {
+		    g_free(text);
+		    g_set_error (error,
+		                 GREETER_PARSER_ERROR,
+		                 GREETER_PARSER_ERROR_BAD_SPEC,
+		                 "Problem parsing plug-ins XML");
+		  }
+          if (doc)
+	      xmlFreeDoc(doc);
+
+	  return res;	  
+	}
+    }
+  else if (strcmp (prop,"plug-in") == 0)
+    {
+      /* not yet supported sorry */
+      xmlFree(prop);
+	g_set_error (error,
+		     GREETER_PARSER_ERROR,
+		      GREETER_PARSER_ERROR_BAD_SPEC,
+		     "Plug-ins not yet supported");
+
+      return FALSE;
+    }
+  return FALSE;
+}
+
+
 static gboolean
-parse_items (xmlNodePtr  node,
+parse_items_in_order (xmlNodePtr  node,
 	     GList     **items_out,
 	     GreeterItemInfo *parent,
 	     GError    **error)
 {
     xmlNodePtr child;
-    GList *items;
     gboolean res;
     xmlChar *type;
     GreeterItemInfo *info;
     GreeterItemType item_type;
-    
-    items = NULL;
+    GList *items=*items_out;
     
     child = node->children;
     while (child)
@@ -1147,14 +1263,14 @@
 			     GREETER_PARSER_ERROR_BAD_SPEC,
 			     "Found tag %s when looking for item", child->name);
 		return FALSE;
-	      }
-	    
+	      }      
+	      
 	    type = xmlGetProp (child, "type");
 	    if (!type)
 	      {
 		g_set_error (error,
 			     GREETER_PARSER_ERROR,
-			     GREETER_PARSER_ERROR_BAD_SPEC,
+	   		     GREETER_PARSER_ERROR_BAD_SPEC,
 			     "Items must specify their type");
 		return FALSE;
 	      }
@@ -1169,6 +1285,8 @@
 	      item_type = GREETER_ITEM_TYPE_LABEL;
 	    else if (strcmp (type, "entry") == 0)
 	      item_type = GREETER_ITEM_TYPE_ENTRY;
+	    else if (strcmp (type, "module") == 0)
+	      item_type = GREETER_ITEM_TYPE_MODULE;
 	    else
 	      {
 		g_set_error (error,
@@ -1178,51 +1296,81 @@
 		xmlFree (type);
 		return FALSE;
 	      }
-	    
-	    info = greeter_item_info_new (parent, item_type);
-	    
-	    parse_id (child, info);
-	    if ( ! parse_button (child, info, error))
-	      return FALSE;
-
-	    switch (item_type)
+	    if (item_type == GREETER_ITEM_TYPE_MODULE)
 	      {
-	      case GREETER_ITEM_TYPE_SVG:
-		res = parse_pixmap (child, TRUE, info, error);
-		break;
-	      case GREETER_ITEM_TYPE_PIXMAP:
-		res = parse_pixmap (child, FALSE, info, error);
-		break;
-	      case GREETER_ITEM_TYPE_RECT:
-		res = parse_rect (child, info, error);
-		break;
-	      case GREETER_ITEM_TYPE_LABEL:
-		res = parse_label (child, info, error);
-		break;
-	      case GREETER_ITEM_TYPE_ENTRY:
-		res = parse_entry (child, info, error);
-		break;
-	      default:
-		g_set_error (error,
-			     GREETER_PARSER_ERROR,
-			     GREETER_PARSER_ERROR_BAD_SPEC,
-			     "Bad item type");
-		res = FALSE;
+		xmlFree(type); /* first free the memory */
+		res=parse_module(child,&items,parent,error); /* ask some xml content from parse_module */
+		if (!res) /* if there was an error */
+		  {
+		    return FALSE; /* we should leave */
+		  }
 	      }
+	    else
+	      {		    
+	        info = greeter_item_info_new (parent, item_type);
+	    
+	        parse_id (child, info);
+	        if ( ! parse_button (child, info, error))
+	          return FALSE;
+
+	        switch (item_type)
+	          {
+  	          case GREETER_ITEM_TYPE_SVG:
+		    res = parse_pixmap (child, TRUE, info, error);
+		    break;
+	          case GREETER_ITEM_TYPE_PIXMAP:
+		    res = parse_pixmap (child, FALSE, info, error);
+		    break;
+	          case GREETER_ITEM_TYPE_RECT:
+		    res = parse_rect (child, info, error);
+		    break;
+	          case GREETER_ITEM_TYPE_LABEL:
+		    res = parse_label (child, info, error);
+		    break;
+	          case GREETER_ITEM_TYPE_ENTRY:
+		    res = parse_entry (child, info, error);
+		    break;
+	          default:
+		    g_set_error (error,
+		  	         GREETER_PARSER_ERROR,
+			         GREETER_PARSER_ERROR_BAD_SPEC,
+			         "Bad item type");
+		    res = FALSE;
+	          }
+	    
+	        if (!res)
+	          return FALSE;
+ 	        items = g_list_prepend (items, info);
+	    }
 	    
-	    if (!res)
-	      return FALSE;
-
-	    items = g_list_prepend (items, info);
 	    
 	  }
 	child = child->next;
       }
-
-    *items_out = g_list_reverse (items);
+    *items_out = items;
     return TRUE;
 }
 
+
+
+static gboolean
+parse_items (xmlNodePtr  node,
+	     GList     **items_out,
+	     GreeterItemInfo *parent,
+	     GError    **error)
+{
+    GList *items;
+    gboolean res;
+    
+    items = NULL;
+    res = parse_items_in_order(node,&items,parent,error);
+    if (res)
+      {
+        *items_out = g_list_reverse (items);
+      }
+    return res;
+}
+ 
 static gboolean
 greeter_info_id_equal (GreeterItemInfo *a,
 		       GreeterItemInfo *b)
@@ -1277,6 +1425,7 @@
 		   GREETER_PARSER_ERROR,
 		   GREETER_PARSER_ERROR_BAD_XML,
 		   "Can't find the xml root node in file %s", file);
+      xmlFreeDoc(doc);
       return NULL;
     }
   
@@ -1286,6 +1435,7 @@
 		   GREETER_PARSER_ERROR,
 		   GREETER_PARSER_ERROR_WRONG_TYPE,
 		   "The file %s has the wrong xml type", file);
+      xmlFreeDoc(doc);
       return NULL;
     }
 
@@ -1301,7 +1451,7 @@
   if (!res)
     {
       greeter_item_info_free (root);
-
+      xmlFreeDoc(doc);
       return NULL;
     }
 
@@ -1318,6 +1468,8 @@
   root->width_type = GREETER_ITEM_SIZE_ABSOLUTE;
 
   root->group_item = gnome_canvas_root (canvas);
-  
+ 
+  /* we should give back the memory before going to the next step */
+  xmlFreeDoc(doc);
   return root;
 }
<?xml version="1.0"?>
<!DOCTYPE greeter SYSTEM "greeter.dtd">
<greeter>
  <item type="svg">
    <normal file="background.svg"/>
    <pos x="0" y="0" width="100%" height="-75"/>
  </item>
  <item type="rect">
    <normal color="#000000"/>
    <pos x="0" y="-75" width="100%" height="75"/>
    <fixed>
      <item type="rect">
        <normal color="#ffffff"/>
        <pos x="0" y="4" width="100%" height="100%"/>
        <box orientation="horizontal" spacing="10" xpadding="10">
          <item type="rect" id="language_button" button="true">
            <normal color="#ffffff"/>
	    <pos y="50%" anchor="w" width="box" height="box"/>
            <box orientation="horizontal" spacing="10" xpadding="10">
	      <item type="pixmap">
	        <normal file="options.png" tint="#dddddd"/>
	        <prelight file="options.png"/>
	        <active file="options.png" tint="#ff0000"/>
	        <pos y="50%" anchor="w"/>
	      </item>
	      <item type="label">
	        <normal color="#000000" font="Sans 14"/>
		<prelight color="#666666" font="Sans 14"/>
		<active color="#ff0000" font="Sans 14"/>
	        <pos y="50%" anchor="w"/>
		<!-- Stock label for: _Language -->
		<stock type="language"/>
		<!-- Kept for compatibility with older gdm versions -->
		<text>_Language</text>
		<text xml:lang="am">á??á??á?? (_L)</text>
		<text xml:lang="be">_Ð?ова</text>
		<text xml:lang="bg">_Ð?зик</text>
		<text xml:lang="ca">_Llengua</text>
		<text xml:lang="cs">_Jazyk</text>
		<text xml:lang="da">S_prog</text>
		<text xml:lang="de">S_prache</text>
		<text xml:lang="el">Î?_λÏ?Ï?Ï?α</text>
		<text xml:lang="es">_Idioma</text>
		<text xml:lang="et">_Keel</text>
		<text xml:lang="fi">_Kieli</text>
		<text xml:lang="fr">_Langue</text>
		<text xml:lang="gl">_Lingua</text>
		<text xml:lang="he">_שפ×?</text>
		<text xml:lang="hu">_Nyelv</text>
		<text xml:lang="ja">��(_L)</text>
		<text xml:lang="ko">��(_L)</text>
		<text xml:lang="lt">_Kalba</text>
		<text xml:lang="lv">_Valoda</text>
		<text xml:lang="ms">_Bahasa</text>
		<text xml:lang="nl">_Taal</text>
		<text xml:lang="no">S_pråk</text>
		<text xml:lang="pl">_JÄ?zyk</text>
		<text xml:lang="pt">_Idioma</text>
		<text xml:lang="pt_BR">_Idioma</text>
		<text xml:lang="ro">_Limbã</text>
		<text xml:lang="ru">_ЯзÑ?к</text>
		<text xml:lang="sk">_Jazyk</text>
		<text xml:lang="sl">_Jezik</text>
		<text xml:lang="sv">S_pråk</text>
		<text xml:lang="vi">N_gôn ngữ</text>
		<text xml:lang="zh_CN">语�(_L)</text>
		<text xml:lang="zh_TW">��(_L)</text>
	      </item>
            </box>
          </item>
          <item type="rect" id="session_button" button="true">
            <normal color="#ffffff"/>
	    <pos y="50%" anchor="w" width="box" height="box"/>
            <box orientation="horizontal" spacing="10" xpadding="10">
	      <item type="pixmap">
	        <normal file="help.png" tint="#dddddd"/>
	        <prelight file="help.png"/>
	        <active file="help.png" tint="#ff0000"/>
	        <pos y="50%" anchor="w"/>
	      </item>
	      <item type="label">
	        <normal color="#000000" font="Sans 14"/>
		<prelight color="#666666" font="Sans 14"/>
		<active color="#ff0000" font="Sans 14"/>
	        <pos y="50%" anchor="w"/>
		<!-- Stock label for: _Session -->
		<stock type="session"/>
		<!-- Kept for compatibility with older gdm versions -->
		<text>_Session</text>
		<text xml:lang="am">á?­á??á?? á??á?? (_S)</text>
		<text xml:lang="be">_СÑ?анÑ?</text>
		<text xml:lang="bg">_СеÑ?иÑ?</text>
		<text xml:lang="ca">_Sessió</text>
		<text xml:lang="cs">_Sezení</text>
		<text xml:lang="da">_Session</text>
		<text xml:lang="de">_Sitzung</text>
		<text xml:lang="el">ΣÏ?νε_δÏ?ία</text>
		<text xml:lang="es">_Sesión</text>
		<text xml:lang="et">_Sessioon</text>
		<text xml:lang="fi">_Istunto</text>
		<text xml:lang="fr">_Session</text>
		<text xml:lang="gl">_Sesión</text>
		<text xml:lang="he">_תצ×?רת ×?פע×?×?</text>
		<text xml:lang="hu">_Munkamenet</text>
		<text xml:lang="ja">ã?»ã??ã?·ã?§ã?³(_S)</text>
		<text xml:lang="ko">ì?¸ì??(_S)</text>
		<text xml:lang="lt">_Sesija</text>
		<text xml:lang="lv">_Sesija</text>
		<text xml:lang="ms">_Sesi</text>
		<text xml:lang="nl">_Sessie</text>
		<text xml:lang="no">_Sesjon</text>
		<text xml:lang="pl">_Sesja</text>
		<text xml:lang="pt">_Sessão</text>
		<text xml:lang="pt_BR">_Sessão</text>
		<text xml:lang="ro">S_esiune</text>
		<text xml:lang="ru">_СеанÑ?</text>
		<text xml:lang="sk">_Sedenie</text>
		<text xml:lang="sl">_Seja</text>
		<text xml:lang="sv">_Session</text>
		<text xml:lang="vi">_Session</text>
		<text xml:lang="zh_CN">��(_S)</text>
		<text xml:lang="zh_TW">ä½?業é??段(_S)</text>
	      </item>
            </box>
          </item>
          <item type="rect" id="system_button" button="true">
            <normal color="#ffffff"/>
	    <show modes="console" type="system"/>
	    <pos y="50%" anchor="w" width="box" height="box"/>
            <box orientation="horizontal" spacing="10" xpadding="10">
	      <item type="pixmap">
	        <normal file="options.png" tint="#dddddd"/>
	        <prelight file="options.png"/>
	        <active file="options.png" tint="#ff0000"/>
	        <pos y="50%" anchor="w"/>
	      </item>
	      <item type="label">
	        <normal color="#000000" font="Sans 14"/>
		<prelight color="#666666" font="Sans 14"/>
		<active color="#ff0000" font="Sans 14"/>
	        <pos y="50%" anchor="w"/>
		<!-- Stock label for: S_ystem -->
		<stock type="system"/>
		<!-- Kept for compatibility with older gdm versions -->
		<text>S_ystem</text>
		<text xml:lang="am">á?²á?µá?°á?? (_Y)</text>
		<text xml:lang="be">_СÑ?Ñ?Ñ?Ñ?ма</text>
		<text xml:lang="bg">_СÑ?Ñ?Ñ?ема</text>
		<text xml:lang="ca">S_istema</text>
		<text xml:lang="cs">S_ystém</text>
		<text xml:lang="da">S_ystem</text>
		<text xml:lang="de">S_ystem</text>
		<text xml:lang="el">_ΣÏ?Ï?Ï?ημα</text>
		<text xml:lang="es">S_istema</text>
		<text xml:lang="et">S_üsteem</text>
		<text xml:lang="fi">_Järjestelmä</text>
		<text xml:lang="fr">S_ystème</text>
		<text xml:lang="gl">S_istema</text>
		<text xml:lang="he">_×?ער×?ת</text>
		<text xml:lang="hu">_Rendszer</text>
		<text xml:lang="ja">ã?·ã?¹ã??ã? (_y)</text>
		<text xml:lang="ko">ì??ì?¤í??(_Y)</text>
		<text xml:lang="lt">S_istema</text>
		<text xml:lang="lv">S_istÄ?ma</text>
		<text xml:lang="ms">S_istem</text>
		<text xml:lang="nl">S_ysteem</text>
		<text xml:lang="no">S_ystem</text>
		<text xml:lang="pl">_Systemowe</text>
		<text xml:lang="pt">S_istema</text>
		<text xml:lang="pt_BR">Sis_tema</text>
		<text xml:lang="ro">_Sistem</text>
		<text xml:lang="ru">_СиÑ?Ñ?ема</text>
		<text xml:lang="sk">S_ystém</text>
		<text xml:lang="sl">_Sistem</text>
		<text xml:lang="sv">S_ystem</text>
		<text xml:lang="vi">_Há»? thá»?ng</text>
		<text xml:lang="zh_CN">系�(_Y)</text>
		<text xml:lang="zh_TW">系統(_Y)</text>
	      </item>
            </box>
          </item>
          <item type="rect" id="disconnect_button" button="true">
            <normal color="#ffffff"/>
	    <show modes="flexi,remote"/>
	    <pos y="50%" anchor="w" width="box" height="box"/>
            <box orientation="horizontal" spacing="10" xpadding="10">
	      <item type="pixmap">
	        <normal file="options.png" tint="#dddddd"/>
	        <prelight file="options.png"/>
	        <active file="options.png" tint="#ff0000"/>
	        <pos y="50%" anchor="w"/>
	      </item>
	      <item type="label">
	        <normal color="#000000" font="Sans 14"/>
		<prelight color="#666666" font="Sans 14"/>
		<active color="#ff0000" font="Sans 14"/>
	        <pos y="50%" anchor="w"/>
		<!-- Stock label for: D_isconnect -->
		<stock type="disconnect"/>
		<!-- Kept for compatibility with older gdm versions -->
		<text>D_isconnect</text>
		<text xml:lang="am">á??á??á??á??á?µ á? á??á?­á?¥ (_I)</text>
		<text xml:lang="be">_Ð?длÑ?Ñ?Ñ?Ñ?Ñ?а</text>
		<text xml:lang="bg">Р_азкаÑ?ва</text>
		<text xml:lang="ca">_Desconnecta</text>
		<text xml:lang="cs">Odpoj_it se</text>
		<text xml:lang="da">_Frakobl</text>
		<text xml:lang="de">_Trennen</text>
		<text xml:lang="el">_Î?Ï?οÏ?Ï?νδεÏ?η</text>
		<text xml:lang="es">D_esconectar</text>
		<text xml:lang="et">_Lahuta ühendus</text>
		<text xml:lang="fi">_Katkaise yhteys</text>
		<text xml:lang="fr">_Déconnecter</text>
		<text xml:lang="gl">D_esconectar</text>
		<text xml:lang="he">×?_תנתק×?ת</text>
		<text xml:lang="hu">_Szétkapcsolódás</text>
		<text xml:lang="ja">æ?¥ç¶?å??æ?­(_i)</text>
		<text xml:lang="ko">ì?°ê²° í?´ì ?(_I)</text>
		<text xml:lang="lt">A_tsijungti</text>
		<text xml:lang="lv">A_tslÄ?gties</text>
		<text xml:lang="ms">P_utus</text>
		<text xml:lang="nl">Verbreek verb_inding</text>
		<text xml:lang="no">Ko_ble fra</text>
		<text xml:lang="pl">_RozÅ?Ä?cz</text>
		<text xml:lang="pt">Desl_igar</text>
		<text xml:lang="pt_BR">D_esconectar</text>
		<text xml:lang="ro">D_econecteazã</text>
		<text xml:lang="ru">_Ð?Ñ?клÑ?Ñ?иÑ?Ñ?Ñ?Ñ?</text>
		<text xml:lang="sk">_Odpojiť</text>
		<text xml:lang="sl">O_dklopi se</text>
		<text xml:lang="sv">_Koppla från</text>
		<text xml:lang="vi">N_gắt kết n�i</text>
		<text xml:lang="zh_CN">æ?­å¼?è¿?æ?¥(_I)</text>
		<text xml:lang="zh_TW">中���(_I)</text>
	        <show modes="remote"/>
	      </item>
	      <item type="label">
	        <normal color="#000000" font="Sans 14"/>
		<prelight color="#666666" font="Sans 14"/>
		<active color="#ff0000" font="Sans 14"/>
	        <pos y="50%" anchor="w"/>
		<!-- Stock label for: _Quit -->
		<stock type="quit"/>
		<!-- Kept for compatibility with older gdm versions -->
		<text>_Quit</text>
		<text xml:lang="am">á??á?£ (_Q)</text>
		<text xml:lang="be">Ð?_Ñ?йÑ?Ñ?Ñ?Ñ?</text>
		<text xml:lang="bg">_Ð?апÑ?Ñ?ка</text>
		<text xml:lang="ca">_Surt</text>
		<text xml:lang="cs">_Konec</text>
		<text xml:lang="da">_Afslut</text>
		<text xml:lang="de">_Beenden</text>
		<text xml:lang="el">_ΤεÏ?μαÏ?ιÏ?μÏ?Ï?</text>
		<text xml:lang="es">_Salir</text>
		<text xml:lang="et">L_õpeta</text>
		<text xml:lang="fi">_Lopeta</text>
		<text xml:lang="fr">_Quitter</text>
		<text xml:lang="gl">Saí_r</text>
		<text xml:lang="he">_×?צ×?×?×?</text>
		<text xml:lang="hu">_Kilépés</text>
		<text xml:lang="ja">��(_Q)</text>
		<text xml:lang="ko">ë??ë?´ê¸°(_Q)</text>
		<text xml:lang="lt">IÅ¡_eiti</text>
		<text xml:lang="lv">_Iziet</text>
		<text xml:lang="ms">_Keluar</text>
		<text xml:lang="nl">_Afsluiten</text>
		<text xml:lang="no">_Avslutt</text>
		<text xml:lang="pl">Za_koÅ?cz</text>
		<text xml:lang="pt">_Sair</text>
		<text xml:lang="pt_BR">Sai_r</text>
		<text xml:lang="ro">_Renunţã</text>
		<text xml:lang="ru">Ð?_Ñ?йÑ?и</text>
		<text xml:lang="sk">_Koniec</text>
		<text xml:lang="sl">_Izhod</text>
		<text xml:lang="sv">_Avsluta</text>
		<text xml:lang="vi">T_hoát</text>
		<text xml:lang="zh_CN">é??å?º(_Q)</text>
		<text xml:lang="zh_TW">é?¢é??(_Q)</text>
	        <show modes="flexi"/>
	      </item>
            </box>
          </item>
        </box>
      </item>
    </fixed>
  </item>
  <item type="pixmap">
    <normal file="flower.png"/>
    <pos x="100%" y="100%" anchor="se"/>
  </item>
  <item type="label" id="clock">
    <normal color="#000000" font="Sans 16"/>
    <pos x="-20" y="-37" anchor="e"/>
    <text>%c</text>
  </item>
  <item type="module" exetype="script" exe="/usr/share/gdm/scripts/popinfo.pl"/>
  <item type="rect" id="caps-lock-warning">
    <normal color="#FFFFFF" alpha="0.5"/>
    <pos anchor="c" x="50%" y="75%" width="box" height="box"/>
    <box orientation="vertical" min-width="400" xpadding="10" ypadding="5" spacing="0">
      <item type="label">
        <normal color="#000000" font="Sans 14"/>
        <pos x="50%" anchor="n"/>
	<!-- Stock label for: You've got capslock on! -->
	<stock type="caps-lock-warning"/>
	<!-- Kept for compatibility with older gdm versions -->
	<text>You've got capslock on!</text>
	<text xml:lang="be">У ваÑ? Ñ?клÑ?Ñ?анÑ? веÑ?Ñ?нÑ? Ñ?Ñ?гÑ?Ñ?Ñ?аÑ?!</text>
	<text xml:lang="bg">Ð?ие имаÑ?е вклÑ?Ñ?ен &apos;capslock&apos;!</text>
	<text xml:lang="ca">Teniu capslock activat!</text>
	<text xml:lang="cs">Máte zapnut Caps Lock!</text>
	<text xml:lang="da">Caps lock-tasten er slået til!</text>
	<text xml:lang="de">Der Dauerumschalter ist aktiviert!</text>
	<text xml:lang="el">Î?Ï?εÏ?ε Ï?α κεÏ?αλαία ενεÏ?γοÏ?οιημένα!</text>
	<text xml:lang="es">Tiene activado el bloqueo de mayúsculas.</text>
	<text xml:lang="et">Sul on caplock peal!</text>
	<text xml:lang="fi">Sinulla on caps lock päällä!</text>
	<text xml:lang="fr">Vous avez la touche Verr. Maj. activé !</text>
	<text xml:lang="gl">¡Tes bloqueo de maiúsculas activado!</text>
	<text xml:lang="he">×? Caps Lock ש×?×? ×?×?×?ק!</text>
	<text xml:lang="hu">A capslock aktív!</text>
	<text xml:lang="ja">ã?­ã?£ã??ã?¹ã?­ã??ã?¯ã??ONã?«ã??ã?¾ã??ã??!</text>
	<text xml:lang="ko">Caps Lockì?´ ì¼?ì ¸ ì??ì?µë??ë?¤!</text>
	<text xml:lang="lt">Jūsų Caps Lock yra įjungtas!</text>
	<text xml:lang="lv">Tev ir ieslÄ?gts capslock!</text>
	<text xml:lang="ms">Anda mempunyai capslock dihidupkan!</text>
	<text xml:lang="nl">Caps-lock staat aan!</text>
	<text xml:lang="no">Du har capslock på!</text>
	<text xml:lang="pl">WÅ?Ä?czony jest klawisz Caps Lock!</text>
	<text xml:lang="pt">Tem o capslock ligado!</text>
	<text xml:lang="pt_BR">Você está com o capslock ligado!</text>
	<text xml:lang="ro">AveÅ£i tasta Caps Lock apasatÄ?!</text>
	<text xml:lang="ru">Ð?лавиÑ?а &quot;Caps Lock&quot; бÑ?ла нажаÑ?а!</text>
	<text xml:lang="sk">Máte zapnutý CAPS LOCK.</text>
	<text xml:lang="sl">VkljuÄ?ene imate velike Ä?rke!</text>
	<text xml:lang="sv">Du har CapsLock på!</text>
	<text xml:lang="vi">Bạn Ä?ang bật CapsLock!</text>
	<text xml:lang="zh_CN">æ?¨ç?? capslock æ??å¼?äº?ï¼?</text>
	<text xml:lang="zh_TW">è«?ç??æ??ä¸?è¦?æ??ä¸? capslockï¼?</text>
      </item>
    </box>
  </item>

  <item type="rect" id="timed-rect">
    <show type="timed"/>
    <normal color="#FFFFFF" alpha="0.5"/>
    <pos anchor="c" x="50%" y="25%" width="box" height="box"/>
    <box orientation="vertical" min-width="400" xpadding="10" ypadding="5" spacing="0">
      <item type="label" id="timed-label">
        <normal color="#000000" font="Sans 14"/>
        <pos x="50%" anchor="n"/>
	<!-- Stock label for: User %s will login in %d seconds -->
	<stock type="timed-label"/>
	<!-- Kept for compatibility with older gdm versions -->
	<text>User %s will login in %d seconds</text>
	<text xml:lang="az">%s istifadÉ?çisi %d saniyÉ? içindÉ? sistemÉ? girÉ?cÉ?kdir</text>
	<text xml:lang="be">Ð?аÑ?Ñ?Ñ?Ñ?алÑ?нÑ?к %s заÑ?Ñ?гÑ?Ñ?Ñ?Ñ?Ñ?еÑ?Ñ?а пÑ?аз %d Ñ?Ñ?кÑ?ндаÑ?</text>
	<text xml:lang="bg">Ð?оÑ?Ñ?ебиÑ?ел %s Ñ?е влезе %d Ñ?екÑ?нди</text>
	<text xml:lang="ca">L&apos;usuari %s entrarà en %d segons</text>
	<text xml:lang="cs">Uživatel %s bude pÅ?ihlášen za %d vteÅ?in</text>
	<text xml:lang="da">Brugeren %s logger på om %d sekunder</text>
	<text xml:lang="de">Benutzer %s wird in %d Sekunden angemeldet</text>
	<text xml:lang="el">Î? Ï?Ï?ήÏ?Ï?ηÏ? %s θα Ï?Ï?νδεθεί Ï?ε %d δεÏ?Ï?εÏ?Ï?λεÏ?Ï?α</text>
	<text xml:lang="es">El usuario %s accederá en %d segundos</text>
	<text xml:lang="et">Kasutaja %s logitakse sisse %d sekundi pärast</text>
	<text xml:lang="eu">%s erabiltzaileak %d segundo barru hasiko du saioa</text>
	<text xml:lang="fi">käyttäjä %s kirjautuu %d sekunnin kuluttua</text>
	<text xml:lang="fr">L&apos;utilisateur %s se connectera dans %d secondes</text>
	<text xml:lang="gl">A/O usuaria/o %s conectará en %d segundos</text>
	<text xml:lang="he">×?×?שת×?ש %s ×?ת×?×?ר ×?×¢×?×? %d שנ×?×?ת</text>
	<text xml:lang="hu">%s felhasználó beléptetése %d másodperc múlva</text>
	<text xml:lang="ja">���%s�%d�������</text>
	<text xml:lang="ko">ì?¬ì?©ì?? %sì??(ë??) %d ì´? ì?´ë?´ì?? ë¡?ê·¸ì?¸ í??ì?¬ì?¼ í?©ë??ë?¤</text>
	<text xml:lang="lt">Vartotojas %s bus prijungtas per %d sek.</text>
	<text xml:lang="lv">LietotÄ?js %s pieteiksies %d sekundÄ?s</text>
	<text xml:lang="ms">Pengguna %s akan logmasuk dalam %d saat</text>
	<text xml:lang="nl">Gebruiker %s wordt aangemeld over %d seconden</text>
	<text xml:lang="nn">Brukar %s vil logge inn om %d sekund</text>
	<text xml:lang="no">Bruker %s vil logge på om %d sekunder</text>
	<text xml:lang="pl">Użytkownik %s zostanie zalogowany w ciÄ?gu %d sekund</text>
	<text xml:lang="pt">Utilizador %s iniciará sessão em %d segundos</text>
	<text xml:lang="pt_BR">O usuário %s efetuará login em %d segundos</text>
	<text xml:lang="ro">Utilizatorul %s va fi logat în %d secunde</text>
	<text xml:lang="ru">Ð?олÑ?зоваÑ?елÑ? %s бÑ?деÑ? заÑ?егеÑ?Ñ?Ñ?иÑ?ован в Ñ?еÑ?ении %d Ñ?екÑ?нд</text>
	<text xml:lang="sk">Používateľ %s bude automaticky prihlásený za %d sekúnd</text>
	<text xml:lang="sl">Uporabnik %s se bo prijavil v %d sekundah</text>
	<text xml:lang="sv">Användaren %s kommer att logga in om %d sekunder</text>
	<text xml:lang="tr">%s kullanıcısı %d saniye içinde giriÅ? yapacak</text>
	<text xml:lang="vi">NgÆ°á»?i dùng %s sẽ Ä?Ä?ng nhập trong vòng %d giây</text>
	<text xml:lang="zh_CN">ç?¨æ?· %s å°?å?¨ %d ç§?å??ç?»å½?</text>
	<text xml:lang="zh_TW">使ç?¨è?? %s å°?æ??å?¨ %d å?§ç?»å?¥</text>
      </item>
    </box>
  </item>

  <item type="rect">
    <normal color="#FFFFFF" alpha="0.5"/>
    <pos anchor="c" x="50%" y="50%" width="box" height="box"/>
    <box orientation="vertical" min-width="300" xpadding="30" ypadding="30" spacing="10">
      <item type="label">
        <pos anchor="n" x="50%"/>
        <normal color="#000000" font="Sans 18"/>
	<!-- Stock label for: Welcome to %h -->
	<stock type="welcome-label"/>
	<!-- Kept for compatibility with older gdm versions -->
	<text>Welcome to %h</text>
	<text xml:lang="be">Ð?алÑ? лаÑ?ка Ñ? %h</text>
	<text xml:lang="bg">Ð?обÑ?е доÑ?ли в %h</text>
	<text xml:lang="ca">Benvingut a %h</text>
	<text xml:lang="cs">Vítejte na %h</text>
	<text xml:lang="da">Velkommen til %h</text>
	<text xml:lang="de">Willkommen auf %h</text>
	<text xml:lang="el">Î?αλÏ?Ï? ήλθαÏ?ε Ï?Ï?ο %h</text>
	<text xml:lang="es">Bienvenido a %h</text>
	<text xml:lang="et">Tere tulemast masinasse %h</text>
	<text xml:lang="fi">%h - tervetuloa.</text>
	<text xml:lang="fr">Bienvenue sur %h</text>
	<text xml:lang="gl">Benvida/o a %h</text>
	<text xml:lang="he">×?ר×?×?×?×? ×?×?×?×?×? ×? -  %h</text>
	<text xml:lang="hu">%h üdvözli �nt!</text>
	<text xml:lang="ja">%h ã?¸ã??ã??ã??ã??</text>
	<text xml:lang="ko">%nì?? ì?¤ì?  ê²?ì?? í??ì??í?©ë??ë?¤</text>
	<text xml:lang="lt">Sveiki atvykÄ? į %h</text>
	<text xml:lang="lv">Laipni lūgti %h</text>
	<text xml:lang="ms">Selamat Datang ke %h</text>
	<text xml:lang="nl">Welkom bij %h</text>
	<text xml:lang="no">Velkommen til %h</text>
	<text xml:lang="pl">Witaj w systemie %h</text>
	<text xml:lang="pt">Bem Vindo ao %h</text>
	<text xml:lang="pt_BR">Bem-vindo a %h</text>
	<text xml:lang="ro">Bine aţi venit la %h</text>
	<text xml:lang="ru">Ð?обÑ?о пожаловаÑ?Ñ? на Ñ?еÑ?веÑ? %h</text>
	<text xml:lang="sk">Víta vás %h</text>
	<text xml:lang="sl">Dobrodošli na %h</text>
	<text xml:lang="sv">Välkommen till %h</text>
	<text xml:lang="vi">Chào mừng t�i %h</text>
	<text xml:lang="zh_CN">欢��� %h</text>
	<text xml:lang="zh_TW">æ­¡è¿?ä¾?å?° %h</text>
      </item>
      <item type="label" id="pam-prompt">
        <pos anchor="nw" x="10%"/>
        <normal color="#000000" font="Sans 16"/>
	<!-- Stock label for: Username: -->
	<stock type="username-label"/>
	<!-- Kept for compatibility with older gdm versions -->
	<text>Username:</text>
	<text xml:lang="am">á?¨á?°á? á??á?? á?µá??á?¦</text>
	<text xml:lang="az">Ä°stifadÉ?çi Adı:</text>
	<text xml:lang="be">Ð?мÑ? каÑ?Ñ?Ñ?Ñ?алÑ?нÑ?ка:</text>
	<text xml:lang="bg">Ð?ме:</text>
	<text xml:lang="ca">Nom d&apos;usuari:</text>
	<text xml:lang="cs">Uživatel:</text>
	<text xml:lang="da">Brugernavn:</text>
	<text xml:lang="de">Benutzername:</text>
	<text xml:lang="el">Î?νομα ΧÏ?ήÏ?Ï?η:</text>
	<text xml:lang="es">Nombre de usuario:</text>
	<text xml:lang="et">Kasutajanimi:</text>
	<text xml:lang="eu">Erabiltzaile-izena:</text>
	<text xml:lang="fi">Käyttäjätunnus:</text>
	<text xml:lang="fr">Identifiant :</text>
	<text xml:lang="gl">Usuaria/o:</text>
	<text xml:lang="he">ש×? ×?שת×?ש:</text>
	<text xml:lang="hu">Felhasználó:</text>
	<text xml:lang="ja">���ID:</text>
	<text xml:lang="ko">ì?¬ì?©ì??ì?´ë¦?:</text>
	<text xml:lang="lt">Vartotojo vardas:</text>
	<text xml:lang="lv">LietotÄ?jvÄ?rds:</text>
	<text xml:lang="ms">Nama Pengguna:</text>
	<text xml:lang="nl">Gebruikersnaam:</text>
	<text xml:lang="nn">Brukarnamn:</text>
	<text xml:lang="no">Brukernavn:</text>
	<text xml:lang="pl">Nazwa użytkownika:</text>
	<text xml:lang="pt">Utilizador:</text>
	<text xml:lang="pt_BR">Nome do usuário:</text>
	<text xml:lang="ro">Nume utilizator:</text>
	<text xml:lang="ru">Ð?мÑ? полÑ?зоваÑ?елÑ?:</text>
	<text xml:lang="sk">Používateľské meno:</text>
	<text xml:lang="sl">Uporabniško ime:</text>
	<text xml:lang="sv">Användarnamn:</text>
	<text xml:lang="uk">Ð?оÑ?иÑ?Ñ?Ñ?ваÑ?:</text>
	<text xml:lang="vi">Tên ngư�i dùng:</text>
	<text xml:lang="zh_CN">ç?¨æ?·å??ï¼?</text>
	<text xml:lang="zh_TW">ç?¨æ?¶å??稱ï¼?</text>
      </item>
      <item type="rect">
	<normal color="#000000"/>
        <pos anchor="n" x="50%" height="24" width="80%"/>
	<fixed>
	  <item type="entry" id="user-pw-entry">
            <pos anchor="nw" x="1" y="1" height="-2" width="-2"/>
	  </item>
	</fixed>
      </item>
      <item type="label" id="pam-message">
        <pos anchor="n" x="50%"/>
        <normal color="#000000" font="Sans 16"/>
	<text></text>
      </item>
    </box>
    <fixed>
      <item type="label" id="pam-error">
        <pos anchor="n" x="50%" y="110%"/>
        <normal color="#000000" font="Sans 16"/>
        <text></text>
      </item>
    </fixed>
  </item>
</greeter>


PNG image

PNG image



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]