devilhorns pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=fed49b9709daf57a9a346eeebe6403183e9b3d45

commit fed49b9709daf57a9a346eeebe6403183e9b3d45
Author: Seunghun Lee <[email protected]>
Date:   Wed Dec 10 08:03:44 2014 -0500

    ecore-drm: restore VT to text mode when close tty.
    
    Summary: if ecore-drm failed to be run after changing tty mode, need to 
restore VT to text mode.
    
    Test Plan:
    - run enlightenment(drm backend) without systemd.
    after changing tty graphics mode, if it's failed to be run by any reason,
    you'll see black screen and coulnd't control session.
    
    @fix
    
    Reviewers: devilhorns
    
    Reviewed By: devilhorns
    
    Subscribers: cedric
    
    Differential Revision: https://phab.enlightenment.org/D1764
---
 src/lib/ecore_drm/ecore_drm_tty.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/src/lib/ecore_drm/ecore_drm_tty.c 
b/src/lib/ecore_drm/ecore_drm_tty.c
index 86482e2..6b3652f 100644
--- a/src/lib/ecore_drm/ecore_drm_tty.c
+++ b/src/lib/ecore_drm/ecore_drm_tty.c
@@ -254,6 +254,24 @@ ecore_drm_tty_open(Ecore_Drm_Device *dev, const char *name)
    return EINA_TRUE;
 }
 
+static void
+_ecore_drm_tty_restore(Ecore_Drm_Device *dev)
+{
+   int fd = dev->tty.fd;
+   struct vt_mode mode = { 0 };
+
+   if (fd < 0) return;
+
+   if (ioctl(fd, KDSETMODE, KD_TEXT))
+     ERR("Could not set KD_TEXT mode on tty: %m\n");
+
+   ecore_drm_device_master_drop(dev);
+
+   mode.mode = VT_AUTO;
+   if (ioctl(fd, VT_SETMODE, &mode) < 0)
+     ERR("Could not reset VT handling\n");
+}
+
 /**
  * Close an already opened tty
  * 
@@ -269,6 +287,8 @@ ecore_drm_tty_close(Ecore_Drm_Device *dev)
    /* check for valid device */
    if ((!dev) || (!dev->drm.name)) return EINA_FALSE;
 
+   _ecore_drm_tty_restore(dev);
+
    close(dev->tty.fd);
 
    dev->tty.fd = -1;

-- 


Reply via email to