uterm: vt: set K_RAW before trying K_OFF
authorDavid Herrmann <dh.herrmann@googlemail.com>
Sun, 2 Dec 2012 09:18:15 +0000 (10:18 +0100)
committerDavid Herrmann <dh.herrmann@googlemail.com>
Sun, 2 Dec 2012 09:18:15 +0000 (10:18 +0100)
K_OFF is not available on older kernels and it is currently discussed
whether it should be replaced on newer kernels. Therefore, set K_RAW
before trying K_OFF and then ignore errors if K_OFF cannot be set.

Reported-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
src/uterm_vt.c

index 5390f6d..c386f53 100644 (file)
@@ -370,13 +370,17 @@ static int real_open(struct uterm_vt *vt, const char *vt_name)
                vt->real_kbmode = K_UNICODE;
        }
 
-       ret = ioctl(vt->real_fd, KDSKBMODE, K_OFF);
+       ret = ioctl(vt->real_fd, KDSKBMODE, K_RAW);
        if (ret) {
-               log_error("cannot set VT KBMODE to K_OFF (%d): %m", errno);
+               log_error("cannot set VT KBMODE to K_RAW (%d): %m", errno);
                ret = -EFAULT;
                goto err_setmode;
        }
 
+       ret = ioctl(vt->real_fd, KDSKBMODE, K_OFF);
+       if (ret)
+               log_warning("cannot set VT KBMODE to K_OFF (%d): %m", errno);
+
        if (vts.v_active == vt->real_num) {
                ret = ev_eloop_register_idle_cb(vt->vtm->eloop, real_delayed,
                                                vt);