Index: uspace/srv/hid/input/layout.h
===================================================================
--- uspace/srv/hid/input/layout.h	(revision 95f603c7a1c68d12cf2e892b79607d9722377118)
+++ uspace/srv/hid/input/layout.h	(revision f9edc7b0761beb45018ddf98a81d955a74a24d79)
@@ -54,4 +54,5 @@
 	void (*destroy)(layout_t *);
 	wchar_t (*parse_ev)(layout_t *, kbd_event_t *);
+	const char *(*get_name)(void);
 } layout_ops_t;
 
Index: uspace/srv/hid/input/layout/ar.c
===================================================================
--- uspace/srv/hid/input/layout/ar.c	(revision 95f603c7a1c68d12cf2e892b79607d9722377118)
+++ uspace/srv/hid/input/layout/ar.c	(revision f9edc7b0761beb45018ddf98a81d955a74a24d79)
@@ -49,9 +49,11 @@
 static void ar_destroy(layout_t *);
 static wchar_t ar_parse_ev(layout_t *, kbd_event_t *ev);
+static const char *ar_name(void);
 
 static const layout_ops_t layout_intern = {
 	.create = ar_create,
 	.destroy = ar_destroy,
-	.parse_ev = ar_parse_ev
+	.parse_ev = ar_parse_ev,
+	.get_name = ar_name
 };
 
@@ -66,4 +68,9 @@
 layout_ops_t layout_active = layout_intern;
 #endif
+
+static const char *ar_name(void)
+{
+	return "ar";
+}
 
 static wchar_t map_not_shifted[] = {
Index: uspace/srv/hid/input/layout/cz.c
===================================================================
--- uspace/srv/hid/input/layout/cz.c	(revision 95f603c7a1c68d12cf2e892b79607d9722377118)
+++ uspace/srv/hid/input/layout/cz.c	(revision f9edc7b0761beb45018ddf98a81d955a74a24d79)
@@ -50,9 +50,11 @@
 static void cz_destroy(layout_t *);
 static wchar_t cz_parse_ev(layout_t *, kbd_event_t *ev);
+static const char *cz_name(void);
 
 static const layout_ops_t layout_intern = {
 	.create = cz_create,
 	.destroy = cz_destroy,
-	.parse_ev = cz_parse_ev
+	.parse_ev = cz_parse_ev,
+	.get_name = cz_name
 };
 
@@ -67,4 +69,9 @@
 layout_ops_t layout_active = layout_intern;
 #endif
+
+static const char *cz_name(void)
+{
+	return "cz";
+}
 
 enum m_state {
Index: uspace/srv/hid/input/layout/us_dvorak.c
===================================================================
--- uspace/srv/hid/input/layout/us_dvorak.c	(revision 95f603c7a1c68d12cf2e892b79607d9722377118)
+++ uspace/srv/hid/input/layout/us_dvorak.c	(revision f9edc7b0761beb45018ddf98a81d955a74a24d79)
@@ -48,9 +48,11 @@
 static void us_dvorak_destroy(layout_t *);
 static wchar_t us_dvorak_parse_ev(layout_t *, kbd_event_t *ev);
+static const char *us_dvorak_name(void);
 
 static const layout_ops_t layout_intern = {
 	.create = us_dvorak_create,
 	.destroy = us_dvorak_destroy,
-	.parse_ev = us_dvorak_parse_ev
+	.parse_ev = us_dvorak_parse_ev,
+	.get_name = us_dvorak_name
 };
 
@@ -65,4 +67,9 @@
 layout_ops_t layout_active = layout_intern;
 #endif
+
+static const char *us_dvorak_name(void)
+{
+	return "us_dvorak";
+}
 
 static wchar_t map_lcase[] = {
Index: uspace/srv/hid/input/layout/us_qwerty.c
===================================================================
--- uspace/srv/hid/input/layout/us_qwerty.c	(revision 95f603c7a1c68d12cf2e892b79607d9722377118)
+++ uspace/srv/hid/input/layout/us_qwerty.c	(revision f9edc7b0761beb45018ddf98a81d955a74a24d79)
@@ -48,9 +48,11 @@
 static void us_qwerty_destroy(layout_t *);
 static wchar_t us_qwerty_parse_ev(layout_t *, kbd_event_t *ev);
+static const char *us_qwerty_name(void);
 
 static const layout_ops_t layout_intern = {
 	.create = us_qwerty_create,
 	.destroy = us_qwerty_destroy,
-	.parse_ev = us_qwerty_parse_ev
+	.parse_ev = us_qwerty_parse_ev,
+	.get_name = us_qwerty_name
 };
 
@@ -65,4 +67,10 @@
 layout_ops_t layout_active = layout_intern;
 #endif
+
+
+static const char *us_qwerty_name(void)
+{
+	return "us_qwerty";
+}
 
 static wchar_t map_lcase[] = {
