sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #01180
[Bug 1817738] Re: Can't change virtual terminal on login screen or when auto-login is enabled
Verification successful with bionic-proposed.
Tested in login screen and auto-login session;
repeated 5 times with consistent results.
bionic-updates
--------------
$ dpkg -s plymouth | grep ^Version:
Version: 0.9.3-1ubuntu7.18.04.1
$ grep -wo splash /proc/cmdline
splash
$ dmesg | grep console
[ 0.004000] console [tty0] enabled
$ sudo fgconsole
1
$ sudo chvt 4
^C # blocked.
$ sudo strace -e ioctl chvt 4
<...>
ioctl(3, VT_ACTIVATE, 0x4) = 0
ioctl(3, VT_WAITACTIVE, 0x4
<blocks until...> ^C) = -1 EINTR (Interrupted system call)
strace: Process 1518 detached
bionic-proposed
---------------
$ dpkg -s plymouth | grep ^Version:
Version: 0.9.3-1ubuntu7.18.04.2
$ grep -wo splash /proc/cmdline
splash
$ dmesg | grep console
[ 0.004000] console [tty0] enabled
$ sudo fgconsole
1
$ sudo chvt 4
$ # finished.
** Tags removed: verification-needed verification-needed-bionic
** Tags added: verification-done verification-done-bionic
--
You received this bug notification because you are a member of STS
Sponsors, which is subscribed to the bug report.
https://bugs.launchpad.net/bugs/1817738
Title:
Can't change virtual terminal on login screen or when auto-login is
enabled
Status in OEM Priority Project:
Confirmed
Status in gdm3 package in Ubuntu:
Invalid
Status in plymouth package in Ubuntu:
Fix Released
Status in gdm3 source package in Bionic:
Invalid
Status in plymouth source package in Bionic:
Fix Committed
Status in plymouth source package in Cosmic:
Fix Released
Bug description:
[Impact]
When AutomaticLogin is enabled in gdm3, or it is showing the login screen,
the "chvt" command blocks indefinitely (usually resumes with gdm3 restart).
This prevents users to change the foreground virtual terminal, and it can
also prevent pm-suspend to complete (as it invokes chvt).
This problem happens in Bionic; it's already fixed in Cosmic and
later.
This patch to plymouth helps it not to revert the VT/tty to VT_AUTO
(after gdm calls 'plymouth deactivate' and changes it to VT_PROCESS)
which causes the ioctl(VT_SETACTIVE) not to generate the event that
the ioctl(VT_WAITACTIVE) will block/wait on just afterward.
Workarounds are to either disable plymouth / remove 'splash' from the
kernel command line or change it to use a different/non-graphical VT
for console (console=tty0 [default] or console=tty1 [equivalent] are
affected, but console=ttyS0 or console=ttyS1 are not, being serial).
[Test case]
1) Install Bionic/18.04 LTS Desktop
2) Ensure plymouth / 'splash' is enabled (default)
$ grep splash /proc/cmdline
BOOT_IMAGE=... root=... splash ...
3) Ensure console is tty0 (default) or tty1
$ dmesg | grep console
[ 0.004000] console [tty0] enabled
A) Login screen, regardless of automatic login
4) Ensure the login screen/tty 1 is the displaying
(i.e., it's foregound/active VT) or change to it:
$ sudo chvt 1 # this works/finishes.
$
5) $ ssh <SYSTEM> 'sudo fgconsole' # check tty1 is foreground VT
1
6) $ ssh <SYSTEM> 'sudo chvt 4' # this blocks/doesn't finish
B) Automatic login, regardless of login screen
4) Enable AutomaticLogin in /etc/gdm3/custom.conf
[daemon]
AutomaticLoginEnable = true
AutomaticLogin = <YOUR_USER>
5) Reboot your system and make sure AutoLogin works by not
requesting password before opening the <YOUR_USER> session.
6) Print active VT
(in Bionic, autologin user session runs on tty1)
$ sudo fgconsole
1
7) sudo chvt 4 # this blocks/doesn't finish
From SSH one can check that chvt is blocked waiting
on new VT to become active, which doesn't happen in
this case (old VT in VT_AUTO + KB_GRAPHICS mode):
$ cat /proc/$(pidof chvt)/stack
[<0>] __vt_event_wait.isra.2.part.3+0x40/0x90
[<0>] vt_waitactive+0x80/0xd0
[<0>] vt_ioctl+0xd26/0x1140
[<0>] tty_ioctl+0xf6/0x8c0
[<0>] do_vfs_ioctl+0xa8/0x630
[<0>] SyS_ioctl+0x79/0x90
[<0>] do_syscall_64+0x73/0x130
[<0>] entry_SYSCALL_64_after_hwframe+0x3d/0xa2
[<0>] 0xffffffffffffffff
[Potential regression]
Low. This plymouth patch is upstream and it's already applied
in Cosmic and later for ~6 months (0.9.3-1ubuntu10 / Oct 2018)
for LP: #1795637 (different problem/effect, same root cause).
Besides, it's conservative in nature, and it's spirit makes a
lot of sense (stop handling more udev events after deactivate).
There are no additional fixes to its code changes upstream.
[Original Description]
$ sudo strace chvt 4
<...>
openat(AT_FDCWD, "/dev/tty0", O_RDWR) = 3
ioctl(3, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(3, KDGKBTYPE, 0x7ffdcdb0efa7) = 0
ioctl(3, VT_ACTIVATE, 0x4) = 0
ioctl(3, VT_WAITACTIVE, 0x4
VT_ACTIVATE will cause a switch to VT number.
VT_WAITACTIVE will sleep/wait until the specified VT has been activated.
$ sudo cat /proc/$(pidof chvt)/stack
[<0>] __vt_event_wait.isra.2.part.3+0x40/0x90
[<0>] vt_waitactive+0x80/0xd0
[<0>] vt_ioctl+0xd26/0x1140
[<0>] tty_ioctl+0xf6/0x8c0
[<0>] do_vfs_ioctl+0xa8/0x630
[<0>] SyS_ioctl+0x79/0x90
[<0>] do_syscall_64+0x73/0x130
[<0>] entry_SYSCALL_64_after_hwframe+0x3d/0xa2
[<0>] 0xffffffffffffffff
To manage notifications about this bug go to:
https://bugs.launchpad.net/oem-priority/+bug/1817738/+subscriptions