Index: uspace/app/terminal/terminal.c
===================================================================
--- uspace/app/terminal/terminal.c	(revision 6a753a9c0e43387ce66206ccacb8c6067f49bb07)
+++ uspace/app/terminal/terminal.c	(revision 09f41d3d60ae4abb40aff09edace1ef60c15b484)
@@ -70,5 +70,6 @@
 
 #define TERM_CAPS \
-	(CONSOLE_CAP_STYLE | CONSOLE_CAP_INDEXED | CONSOLE_CAP_RGB)
+	(CONSOLE_CAP_CURSORCTL | CONSOLE_CAP_STYLE | CONSOLE_CAP_INDEXED | \
+	CONSOLE_CAP_RGB)
 
 #define SCROLLBACK_MAX_LINES 1000
Index: uspace/app/tetris/screen.c
===================================================================
--- uspace/app/tetris/screen.c	(revision 6a753a9c0e43387ce66206ccacb8c6067f49bb07)
+++ uspace/app/tetris/screen.c	(revision 09f41d3d60ae4abb40aff09edace1ef60c15b484)
@@ -1,3 +1,4 @@
 /*
+ * Copyright (c) 2024 Jiri Svoboda
  * Copyright (c) 2011 Martin Decky
  * All rights reserved.
@@ -143,5 +144,5 @@
 	console_cursor_visibility(console, 0);
 	resume_normal();
-	scr_clear();
+	scr_set();
 }
 
@@ -170,4 +171,8 @@
 	}
 
+	if ((ccap & CONSOLE_CAP_CURSORCTL) == 0) {
+		stop("Your screen does not support cursor control.\n");
+		return;
+	}
 	*rgb = ((ccap & CONSOLE_CAP_RGB) == CONSOLE_CAP_RGB);
 	*color = ((ccap & CONSOLE_CAP_INDEXED) == CONSOLE_CAP_INDEXED);
@@ -195,5 +200,5 @@
 
 		snprintf(smallscr, sizeof(smallscr),
-		    "the screen is too small (must be at least %dx%d)",
+		    "the screen is too small (must be at least %dx%d)\n",
 		    MINROWS, MINCOLS);
 		stop(smallscr);
Index: uspace/lib/output/include/io/concaps.h
===================================================================
--- uspace/lib/output/include/io/concaps.h	(revision 6a753a9c0e43387ce66206ccacb8c6067f49bb07)
+++ uspace/lib/output/include/io/concaps.h	(revision 09f41d3d60ae4abb40aff09edace1ef60c15b484)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -38,7 +38,8 @@
 typedef enum {
 	CONSOLE_CAP_NONE = 0,
-	CONSOLE_CAP_STYLE = 1,
-	CONSOLE_CAP_INDEXED = 2,
-	CONSOLE_CAP_RGB = 4
+	CONSOLE_CAP_CURSORCTL = 1,
+	CONSOLE_CAP_STYLE = 2,
+	CONSOLE_CAP_INDEXED = 4,
+	CONSOLE_CAP_RGB = 8
 } console_caps_t;
 
Index: uspace/srv/hid/output/ctl/serial.c
===================================================================
--- uspace/srv/hid/output/ctl/serial.c	(revision 6a753a9c0e43387ce66206ccacb8c6067f49bb07)
+++ uspace/srv/hid/output/ctl/serial.c	(revision 09f41d3d60ae4abb40aff09edace1ef60c15b484)
@@ -85,5 +85,6 @@
 static console_caps_t serial_get_caps(outdev_t *dev)
 {
-	return (CONSOLE_CAP_STYLE | CONSOLE_CAP_INDEXED | CONSOLE_CAP_RGB);
+	return (CONSOLE_CAP_CURSORCTL | CONSOLE_CAP_STYLE |
+	    CONSOLE_CAP_INDEXED | CONSOLE_CAP_RGB);
 }
 
Index: uspace/srv/hid/output/port/ddev.c
===================================================================
--- uspace/srv/hid/output/port/ddev.c	(revision 6a753a9c0e43387ce66206ccacb8c6067f49bb07)
+++ uspace/srv/hid/output/port/ddev.c	(revision 09f41d3d60ae4abb40aff09edace1ef60c15b484)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2020 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * Copyright (c) 2008 Martin Decky
  * Copyright (c) 2006 Jakub Vana
@@ -198,5 +198,6 @@
 static console_caps_t output_ddev_get_caps(outdev_t *dev)
 {
-	return (CONSOLE_CAP_STYLE | CONSOLE_CAP_INDEXED | CONSOLE_CAP_RGB);
+	return (CONSOLE_CAP_CURSORCTL | CONSOLE_CAP_STYLE |
+	    CONSOLE_CAP_INDEXED | CONSOLE_CAP_RGB);
 }
 
Index: uspace/srv/hid/output/port/ega.c
===================================================================
--- uspace/srv/hid/output/port/ega.c	(revision 6a753a9c0e43387ce66206ccacb8c6067f49bb07)
+++ uspace/srv/hid/output/port/ega.c	(revision 09f41d3d60ae4abb40aff09edace1ef60c15b484)
@@ -143,5 +143,6 @@
 static console_caps_t ega_get_caps(outdev_t *dev)
 {
-	return (CONSOLE_CAP_STYLE | CONSOLE_CAP_INDEXED);
+	return (CONSOLE_CAP_CURSORCTL | CONSOLE_CAP_STYLE |
+	    CONSOLE_CAP_INDEXED);
 }
 
Index: uspace/srv/hid/remcons/remcons.c
===================================================================
--- uspace/srv/hid/remcons/remcons.c	(revision 6a753a9c0e43387ce66206ccacb8c6067f49bb07)
+++ uspace/srv/hid/remcons/remcons.c	(revision 09f41d3d60ae4abb40aff09edace1ef60c15b484)
@@ -248,8 +248,13 @@
 	remcons_t *remcons = srv_to_remcons(srv);
 
-	if (remcons->enable_ctl)
-		*ccaps = CONSOLE_CAP_INDEXED | CONSOLE_CAP_RGB;
-	else
-		*ccaps = 0;
+	*ccaps = 0;
+
+	if (remcons->enable_ctl) {
+		*ccaps |= CONSOLE_CAP_CURSORCTL | CONSOLE_CAP_STYLE |
+		    CONSOLE_CAP_INDEXED;
+	}
+
+	if (remcons->enable_rgb)
+		*ccaps |= CONSOLE_CAP_RGB;
 
 	return EOK;
@@ -437,4 +442,5 @@
 
 	remcons->enable_ctl = !no_ctl;
+	remcons->enable_rgb = !no_ctl && !no_rgb;
 	remcons->user = user;
 
@@ -448,5 +454,5 @@
 	    remcons_vt_putchar, remcons_vt_cputs, remcons_vt_flush);
 	assert(remcons->vt != NULL); // XXX
-	remcons->vt->enable_rgb = !no_rgb;
+	remcons->vt->enable_rgb = remcons->enable_rgb;
 
 	if (remcons->enable_ctl) {
Index: uspace/srv/hid/remcons/remcons.h
===================================================================
--- uspace/srv/hid/remcons/remcons.h	(revision 6a753a9c0e43387ce66206ccacb8c6067f49bb07)
+++ uspace/srv/hid/remcons/remcons.h	(revision 09f41d3d60ae4abb40aff09edace1ef60c15b484)
@@ -48,4 +48,5 @@
 	vt100_state_t *vt;
 	bool enable_ctl;
+	bool enable_rgb;
 } remcons_t;
 
