Index: kernel/generic/src/console/console.c
===================================================================
--- kernel/generic/src/console/console.c	(revision ca21f1e2563262ce9dfca34baebb191c134e3037)
+++ kernel/generic/src/console/console.c	(revision 392f0e70ef522bdba4b17f9342b519027e983356)
@@ -209,4 +209,5 @@
 void grab_console(void)
 {
+	sysinfo_set_item_val("kconsole", NULL, true);
 	event_notify_1(EVENT_KCONSOLE, false, true);
 	bool prev = console_override;
@@ -226,4 +227,5 @@
 void release_console(void)
 {
+	sysinfo_set_item_val("kconsole", NULL, false);
 	console_override = false;
 	event_notify_1(EVENT_KCONSOLE, false, false);
Index: uspace/drv/char/ski-con/ski-con.c
===================================================================
--- uspace/drv/char/ski-con/ski-con.c	(revision ca21f1e2563262ce9dfca34baebb191c134e3037)
+++ uspace/drv/char/ski-con/ski-con.c	(revision 392f0e70ef522bdba4b17f9342b519027e983356)
@@ -1,5 +1,5 @@
 /*
  * Copyright (c) 2005 Jakub Jermar
- * Copyright (c) 2017 Jiri Svoboda
+ * Copyright (c) 2018 Jiri Svoboda
  * All rights reserved.
  *
@@ -40,4 +40,5 @@
 #include <stdlib.h>
 #include <stdbool.h>
+#include <sysinfo.h>
 
 #include "ski-con.h"
@@ -127,4 +128,26 @@
 }
 
+/** Detect if SKI console is in use by the kernel.
+ *
+ * This is needed since the kernel has no way of fencing off the user-space
+ * driver.
+ *
+ * @return @c true if in use by the kernel.
+ */
+static bool ski_con_disabled(void)
+{
+	sysarg_t kconsole;
+
+	/*
+	 * XXX Ideally we should get information from our kernel counterpart
+	 * driver. But there needs to be a mechanism for the kernel console
+	 * to inform the kernel driver.
+	 */
+	if (sysinfo_get_value("kconsole", &kconsole) != EOK)
+		return false;
+
+	return kconsole != false;
+}
+
 /** Poll Ski for keypresses. */
 static errno_t ski_con_fibril(void *arg)
@@ -135,5 +158,5 @@
 
 	while (true) {
-		while (true) {
+		while (!ski_con_disabled()) {
 			c = ski_con_getchar();
 			if (c == 0)
@@ -246,6 +269,8 @@
 	uint8_t *dp = (uint8_t *) data;
 
-	for (i = 0; i < size; i++)
-		ski_con_putchar(con, dp[i]);
+	for (i = 0; i < size; i++) {
+		if (!ski_con_disabled())
+			ski_con_putchar(con, dp[i]);
+	}
 
 	*nwr = size;
