diff -Naur src.orig/evdev.c src/evdev.c
--- src.orig/evdev.c	2013-11-07 15:14:27.475807062 +0000
+++ src/evdev.c	2013-11-07 15:05:32.624935740 +0000
@@ -34,6 +34,8 @@
 #include "compositor.h"
 #include "evdev.h"
 
+#include "../shared/config-parser.h"
+
 #define DEFAULT_AXIS_STEP_DISTANCE wl_fixed_from_int(10)
 
 void
@@ -595,12 +597,18 @@
 	struct evdev_device *device;
 	struct weston_compositor *ec;
 	char devname[256] = "unknown";
+	struct weston_config_section *s;
+	char *ignored;
 
 	device = zalloc(sizeof *device);
 	if (device == NULL)
 		return NULL;
 
 	ec = seat->compositor;
+
+	s = weston_config_get_section(ec->config, "input-method", NULL, NULL);
+	weston_config_section_get_string(s, "ignored", &ignored, "");
+
 	device->output =
 		container_of(ec->output_list.next, struct weston_output, link);
 
@@ -621,6 +629,9 @@
 	devname[sizeof(devname) - 1] = '\0';
 	device->devname = strdup(devname);
 
+	if ( strcmp(device->devname, ignored) == 0 )
+		goto ignoredev;
+
 	if (!evdev_handle_device(device)) {
 		evdev_device_destroy(device);
 		return EVDEV_UNHANDLED_DEVICE;
@@ -641,9 +652,15 @@
 	if (device->source == NULL)
 		goto err;
 
+	free(ignored);
+
 	return device;
 
+ignoredev:
+	weston_log("Ignoring input device %s, %s\n", device->devname, device->devnode);
+
 err:
+	free(ignored);
 	evdev_device_destroy(device);
 	return NULL;
 }
diff -Naur src.orig/input.c src/input.c
--- src.orig/input.c	2013-11-07 15:14:27.455809229 +0000
+++ src/input.c	2013-11-07 15:18:46.265721005 +0000
@@ -33,6 +33,8 @@
 #include "../shared/os-compatibility.h"
 #include "compositor.h"
 
+#include "../shared/config-parser.h"
+
 static void
 empty_region(pixman_region32_t *region)
 {
@@ -1323,6 +1325,13 @@
 {
 	struct weston_pointer *pointer = wl_resource_get_user_data(resource);
 	struct weston_surface *surface = NULL;
+	struct weston_config_section *s = weston_config_get_section(pointer->seat->compositor->config, "shell", NULL, NULL);
+	int cursorDisabled = 0;
+
+	weston_config_section_get_bool(s, "cursor-disabled", &cursorDisabled, 0);
+
+	if (cursorDisabled)
+		return;
 
 	if (surface_resource)
 		surface = wl_resource_get_user_data(surface_resource);
