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; --
