diff -u -r --exclude=CVS --exclude=Makefile --exclude='*.o' --exclude='*.Po' xserver.original/hw/kdrive/ephyr/ephyr.c xserver/hw/kdrive/ephyr/ephyr.c
--- xserver.original/hw/kdrive/ephyr/ephyr.c	2005-12-16 10:36:04.000000000 -0200
+++ xserver/hw/kdrive/ephyr/ephyr.c	2005-12-16 10:44:20.320600392 -0200
@@ -420,7 +420,8 @@
   *rotations = RR_Rotate_All|RR_Reflect_All;
   
   if (!hostx_want_preexisting_window()
-      && !hostx_want_fullscreen()) /* only if no -parent switch */
+      && !hostx_want_fullscreen()
+      && !hostx_want_user_geometry()) /* only if no -parent switch */
     {
       while (sizes[n].width != 0 && sizes[n].height != 0)
 	{
@@ -729,6 +730,9 @@
 
   while (hostx_get_event(&ev))
     {
+      if (use_evdev)
+        continue;
+	
       switch (ev.type)
 	{
 	case EPHYR_EV_MOUSE_MOTION:
diff -u -r --exclude=CVS --exclude=Makefile --exclude='*.o' --exclude='*.Po' xserver.original/hw/kdrive/ephyr/ephyr.h xserver/hw/kdrive/ephyr/ephyr.h
--- xserver.original/hw/kdrive/ephyr/ephyr.h	2005-12-16 10:36:04.000000000 -0200
+++ xserver/hw/kdrive/ephyr/ephyr.h	2005-12-16 10:36:40.000000000 -0200
@@ -51,6 +51,7 @@
 } EphyrScrPriv;
 
 extern KdCardFuncs  ephyrFuncs;
+extern int use_evdev;
 
 Bool
 ephyrInitialize (KdCardInfo *card, EphyrPriv *priv);
diff -u -r --exclude=CVS --exclude=Makefile --exclude='*.o' --exclude='*.Po' xserver.original/hw/kdrive/ephyr/ephyrinit.c xserver/hw/kdrive/ephyr/ephyrinit.c
--- xserver.original/hw/kdrive/ephyr/ephyrinit.c	2005-12-16 10:36:04.000000000 -0200
+++ xserver/hw/kdrive/ephyr/ephyrinit.c	2005-12-16 10:36:40.000000000 -0200
@@ -28,6 +28,8 @@
 #endif
 #include "ephyr.h"
 
+int use_evdev = FALSE;
+
 extern Window EphyrPreExistingHostWin;
 
 void
@@ -50,7 +52,10 @@
 void
 InitInput (int argc, char **argv)
 {
-  KdInitInput (&EphyrMouseFuncs, &EphyrKeyboardFuncs);
+  if (use_evdev)
+    KdInitInput (&LinuxEvdevMouseFuncs, &LinuxEvdevKeyboardFuncs);
+  else
+    KdInitInput (&EphyrMouseFuncs, &EphyrKeyboardFuncs);
 }
 
 void
@@ -62,6 +67,7 @@
   ErrorF("-parent XID   Use existing window as Xephyr root win\n");
   ErrorF("-host-cursor  Re-use exisiting X host server cursor\n");
   ErrorF("-fullscreen   Attempt to run Xephyr fullscreen\n");
+  ErrorF("-use-evdev	Use the evdev input driver\n");
   ErrorF("\n");
 
   exit(1);
@@ -93,10 +99,23 @@
       hostx_use_fullscreen();
       return 1;
     }
+  else if (!strcmp (argv[i], "-geometry"))
+    {
+      if(i+1 < argc) 
+	{
+	  hostx_use_user_geometry (argv[i+1]);
+	  return 2;
+	}
+    }
   else if (argv[i][0] == ':')
     {
       hostx_set_display_name(argv[i]);
     }
+  else if (!strcmp (argv[i], "-use-evdev"))
+    {
+      use_evdev = TRUE;
+      return 1;
+    }
 
   return KdProcessArgument (argc, argv, i);
 }
diff -u -r --exclude=CVS --exclude=Makefile --exclude='*.o' --exclude='*.Po' xserver.original/hw/kdrive/ephyr/hostx.c xserver/hw/kdrive/ephyr/hostx.c
--- xserver.original/hw/kdrive/ephyr/hostx.c	2005-12-16 10:36:04.000000000 -0200
+++ xserver/hw/kdrive/ephyr/hostx.c	2005-12-16 10:46:00.716337920 -0200
@@ -59,9 +59,10 @@
   int             depth;
   int             server_depth;
   XImage         *ximg;
-  int             win_width, win_height;
+  int             win_width, win_height, win_x, win_y;
   Bool            use_host_cursor;
   Bool            use_fullscreen;
+  Bool            use_user_geometry;
   Bool            have_shm;
 
   long            damage_debug_msec;
@@ -73,7 +74,7 @@
 };
 
 /* memset ( missing> ) instead of below  */
-static EphyrHostXVars HostX = { "?", 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+static EphyrHostXVars HostX = { "?", 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 
 static int            HostXWantDamageDebug = 0;
 
@@ -124,7 +125,8 @@
 hostx_want_screen_size(int *width, int *height)
 {
  if (HostX.win_pre_existing != None
-     || HostX.use_fullscreen == True)
+     || HostX.use_fullscreen == True
+     || HostX.use_user_geometry == True)
     {
       *width  = HostX.win_width;
       *height = HostX.win_height;
@@ -174,6 +176,21 @@
 }
 
 void
+hostx_use_user_geometry(char *geometry)
+{
+  if (XParseGeometry (geometry,
+		      &HostX.win_x, &HostX.win_y,
+		      &HostX.win_width, &HostX.win_height))
+    HostX.use_user_geometry = True;
+}
+
+int
+hostx_want_user_geometry(void)
+{
+  return HostX.use_user_geometry;
+}
+
+void
 hostx_use_fullscreen(void)
 {
   HostX.use_fullscreen = True;
@@ -444,6 +461,7 @@
   int         bitmap_pad;
   Bool        shm_success = False;
   XSizeHints *size_hints;
+  XWindowChanges values;
 
   EPHYR_DBG("mark");
 
@@ -519,6 +537,13 @@
 
   XResizeWindow(HostX.dpy, HostX.win, width, height);
 
+  if (HostX.use_user_geometry)
+    {
+      values.x = HostX.win_x;
+      values.y = HostX.win_y;
+      XConfigureWindow(HostX.dpy, HostX.win, CWX | CWY, &values);
+    }
+
   /* Ask the WM to keep our size static */
   size_hints = XAllocSizeHints();
 #if 0
diff -u -r --exclude=CVS --exclude=Makefile --exclude='*.o' --exclude='*.Po' xserver.original/hw/kdrive/ephyr/hostx.h xserver/hw/kdrive/ephyr/hostx.h
--- xserver.original/hw/kdrive/ephyr/hostx.h	2005-12-16 10:36:04.000000000 -0200
+++ xserver/hw/kdrive/ephyr/hostx.h	2005-12-16 10:46:07.474310552 -0200
@@ -89,6 +89,12 @@
 void
 hostx_use_host_cursor(void);
 
+int
+hostx_want_user_geometry(void);
+
+void
+hostx_use_user_geometry(char *);
+
 void
 hostx_use_fullscreen(void);
 
