Index: uspace/srv/kbd/ctl/gxe_fb.c
===================================================================
--- uspace/srv/kbd/ctl/gxe_fb.c	(revision 6ac14a70ed101ee9fa8379a5f9ef15a38f08aec5)
+++ uspace/srv/kbd/ctl/gxe_fb.c	(revision c145bc2fc737a941e2d7e0c94b3479d3c11bb93d)
@@ -225,4 +225,9 @@
 }
 
+void kbd_ctl_set_ind(unsigned mods)
+{
+	(void) mods;
+}
+
 /**
  * @}
Index: uspace/srv/kbd/ctl/pc.c
===================================================================
--- uspace/srv/kbd/ctl/pc.c	(revision 6ac14a70ed101ee9fa8379a5f9ef15a38f08aec5)
+++ uspace/srv/kbd/ctl/pc.c	(revision c145bc2fc737a941e2d7e0c94b3479d3c11bb93d)
@@ -40,4 +40,5 @@
 #include <io/keycode.h>
 #include <kbd_ctl.h>
+#include <kbd_port.h>
 #include <gsp.h>
 
@@ -45,4 +46,19 @@
 	ds_s,
 	ds_e
+};
+
+enum special_code {
+	SC_ACK = 0xfa,
+	SC_NAK = 0xfe
+};
+
+enum lock_ind_bits {
+	LI_SCROLL	= 0x01,
+	LI_NUM		= 0x02,
+	LI_CAPS		= 0x04
+};
+
+enum kbd_command {
+	KBD_CMD_SET_LEDS = 0xed
 };
 
@@ -194,4 +210,11 @@
 	size_t map_length;
 
+	/*
+	 * ACK/NAK are returned as response to us sending a command.
+	 * We are not interested in them.
+	 */
+	if (scancode == SC_ACK || scancode == SC_NAK)
+		return;
+
 	if (scancode == 0xe0) {
 		ds = ds_e;
@@ -230,4 +253,20 @@
 }
 
+void kbd_ctl_set_ind(unsigned mods)
+{
+	uint8_t b;
+
+	b = 0;
+	if ((mods & KM_CAPS_LOCK) != 0)
+		b = b | LI_CAPS;
+	if ((mods & KM_NUM_LOCK) != 0)
+		b = b | LI_NUM;
+	if ((mods & KM_SCROLL_LOCK) != 0)
+		b = b | LI_SCROLL;
+
+	kbd_port_write(KBD_CMD_SET_LEDS);
+	kbd_port_write(b);
+}
+
 /**
  * @}
Index: uspace/srv/kbd/ctl/pl050.c
===================================================================
--- uspace/srv/kbd/ctl/pl050.c	(revision 6ac14a70ed101ee9fa8379a5f9ef15a38f08aec5)
+++ uspace/srv/kbd/ctl/pl050.c	(revision c145bc2fc737a941e2d7e0c94b3479d3c11bb93d)
@@ -258,4 +258,9 @@
 }
 
+void kbd_ctl_set_ind(unsigned mods)
+{
+	(void) mods;
+}
+
 /**
  * @}
Index: uspace/srv/kbd/ctl/stty.c
===================================================================
--- uspace/srv/kbd/ctl/stty.c	(revision 6ac14a70ed101ee9fa8379a5f9ef15a38f08aec5)
+++ uspace/srv/kbd/ctl/stty.c	(revision c145bc2fc737a941e2d7e0c94b3479d3c11bb93d)
@@ -224,4 +224,9 @@
 }
 
+void kbd_ctl_set_ind(unsigned mods)
+{
+	(void) mods;
+}
+
 /**
  * @}
Index: uspace/srv/kbd/ctl/sun.c
===================================================================
--- uspace/srv/kbd/ctl/sun.c	(revision 6ac14a70ed101ee9fa8379a5f9ef15a38f08aec5)
+++ uspace/srv/kbd/ctl/sun.c	(revision c145bc2fc737a941e2d7e0c94b3479d3c11bb93d)
@@ -72,4 +72,9 @@
 	if (key != 0)
 		kbd_push_ev(type, key);
+}
+
+void kbd_ctl_set_ind(unsigned mods)
+{
+	(void) mods;
 }
 
