Index: uspace/lib/ui/include/types/ui/ui.h
===================================================================
--- uspace/lib/ui/include/types/ui/ui.h	(revision b48e680f7fd780655df7bd1559d565a3abb1f45f)
+++ uspace/lib/ui/include/types/ui/ui.h	(revision f05f413833a5111b7083577d666c37f4be97cdcc)
@@ -43,7 +43,9 @@
 
 /** Use the default display service (argument to ui_create()) */
-#define UI_DISPLAY_DEFAULT NULL
+#define UI_DISPLAY_DEFAULT "disp@"
 /** Use the default console service (argument to ui_create()) */
 #define UI_CONSOLE_DEFAULT "cons@"
+/** Use any available service (argument to ui_create()) */
+#define UI_ANY_DEFAULT "@"
 /** Use dummy output (argument to ui_create()) */
 #define UI_DISPLAY_NULL "null@"
@@ -57,4 +59,6 @@
 	/** Console */
 	ui_ws_console,
+	/** Any non-dummy output backend */
+	ui_ws_any,
 	/** Dummy output */
 	ui_ws_null
Index: uspace/lib/ui/src/ui.c
===================================================================
--- uspace/lib/ui/src/ui.c	(revision b48e680f7fd780655df7bd1559d565a3abb1f45f)
+++ uspace/lib/ui/src/ui.c	(revision f05f413833a5111b7083577d666c37f4be97cdcc)
@@ -69,10 +69,4 @@
 	const char *cp;
 
-	if (ospec == UI_DISPLAY_DEFAULT) {
-		*ws = ui_ws_display;
-		*osvc = DISPLAY_DEFAULT;
-		return;
-	}
-
 	cp = ospec;
 	while (isalpha(*cp))
@@ -86,4 +80,6 @@
 		} else if (str_lcmp(ospec, "null@", str_length("null@")) == 0) {
 			*ws = ui_ws_null;
+		} else if (str_lcmp(ospec, "@", str_length("@")) == 0) {
+			*ws = ui_ws_any;
 		} else {
 			*ws = ui_ws_unknown;
@@ -123,23 +119,31 @@
 	ui_ospec_parse(ospec, &ws, &osvc);
 
-	if (ws == ui_ws_display) {
-		rc = display_open(osvc, &display);
+	if (ws == ui_ws_display || ws == ui_ws_any) {
+		rc = display_open(osvc != NULL ? osvc : DISPLAY_DEFAULT,
+		    &display);
 		if (rc != EOK)
-			return rc;
+			goto disp_fail;
 
 		rc = ui_create_disp(display, &ui);
 		if (rc != EOK) {
 			display_close(display);
-			return rc;
-		}
-	} else if (ws == ui_ws_console) {
+			goto disp_fail;
+		}
+
+		ui->myoutput = true;
+		*rui = ui;
+		return EOK;
+	}
+
+disp_fail:
+	if (ws == ui_ws_console || ws == ui_ws_any) {
 		console = console_init(stdin, stdout);
 		if (console == NULL)
-			return EIO;
+			goto cons_fail;
 
 		rc = console_get_size(console, &cols, &rows);
 		if (rc != EOK) {
 			console_done(console);
-			return rc;
+			goto cons_fail;
 		}
 
@@ -150,5 +154,5 @@
 		if (rc != EOK) {
 			console_done(console);
-			return rc;
+			goto cons_fail;
 		}
 
@@ -157,5 +161,5 @@
 			ui_destroy(ui);
 			console_done(console);
-			return rc;
+			goto cons_fail;
 		}
 
@@ -167,15 +171,21 @@
 
 		(void) ui_paint(ui);
-	} else if (ws == ui_ws_null) {
+		ui->myoutput = true;
+		*rui = ui;
+		return EOK;
+	}
+
+cons_fail:
+	if (ws == ui_ws_null) {
 		rc = ui_create_disp(NULL, &ui);
 		if (rc != EOK)
 			return rc;
-	} else {
-		return EINVAL;
-	}
-
-	ui->myoutput = true;
-	*rui = ui;
-	return EOK;
+
+		ui->myoutput = true;
+		*rui = ui;
+		return EOK;
+	}
+
+	return EINVAL;
 }
 
