diff --git a/debian/changelog b/debian/changelog index 45a0893..b00bc1e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +ddm (0.1.6) unstable; urgency=medium + + * allow user take tty control + + -- Dingyuan Zhang Thu, 05 Dec 2024 20:58:00 +0800 + ddm (0.1.5) unstable; urgency=medium * active user tty diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp index 3fc2613..3386490 100644 --- a/src/daemon/Display.cpp +++ b/src/daemon/Display.cpp @@ -592,7 +592,7 @@ namespace DDM { } } - VirtualTerminal::jumpToVt(auth->tty(), true); + VirtualTerminal::jumpToVt(auth->tty(), false); } m_socket = nullptr; } diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp index 629fcce..db850d4 100644 --- a/src/helper/UserSession.cpp +++ b/src/helper/UserSession.cpp @@ -217,7 +217,7 @@ namespace DDM { // when this is true we'll take control of the tty bool takeControl = false; - if (vtFd > 0 && !m_helperApp->isSingleMode()) { + if (vtFd > 0) { dup2(vtFd, STDIN_FILENO); ::close(vtFd); takeControl = true; @@ -243,16 +243,20 @@ namespace DDM { } } - if (m_helperApp->isSingleMode() && m_helperApp->isGreeter()) { - // FIXME: if jumpToVt vt_auto is false, when switching tty, greeter sesion will died. - VirtualTerminal::jumpToVt(vtNumber, true); + VirtualTerminal::jumpToVt(vtNumber, m_helperApp->isGreeter()); - // disable physical tty standard output in greeter work tty. - struct termios tios; - tcgetattr(STDOUT_FILENO, &tios); - tios.c_oflag &= ~OPOST; - tcsetattr(STDOUT_FILENO, TCSANOW, &tios); - } + // skip Ctrl-C SIGINT + struct termios oldt, newt; + tcgetattr(STDIN_FILENO, &oldt); + newt = oldt; + newt.c_lflag &= ~ISIG; + tcsetattr(STDIN_FILENO, TCSANOW, &newt); + + // disable physical tty standard output in greeter work tty. + struct termios tios; + tcgetattr(STDOUT_FILENO, &tios); + tios.c_oflag &= ~OPOST; + tcsetattr(STDOUT_FILENO, TCSANOW, &tios); } #ifdef Q_OS_LINUX