启动后如何更改控制台tty?

启动后如何更改控制台tty?

该命令dmesg | grep console返回:

Kernel command line: console=ttys6,115200 root=/dev/mmcblk1p2 
rootwait rw
console [ttys6] enabled

我想在启动后将其更改为ttys3。是否可以?

答案1

的手册页tty_ioctl列出 ioctl TIOCCONS。当应用于 tty 的打开文件描述符时,它将把未来的输出重定向/dev/console到该 tty。

您可以在简单的 perl 脚本中使用它。创建chmod +x一个包含以下内容的文件 mysetconsole:

#!/usr/bin/perl
# https://unix.stackexchange.com/a/397790/119298
# see man tty_ioctl for TIOCCONS
# and perldoc IO::Tty::Constant
require "sys/ioctl.ph";
use IO::Tty::Constant qw(TIOCCONS);
ioctl(STDIN,TIOCCONS,0) or die $!;

假设您可以打开所需的设备,只需将其用作

sudo ./mysetconsole </dev/ttys3

/dev/console除非您将控制台设置回,否则您将无法再次使用它

sudo sh -c './mysetconsole </dev/console'

_FORTIFY_SOURCE您可能会收到可以忽略的Perl 警告。您将需要 rpm 软件包perl-IO-Tty或 debian 软件包libio-pty-perl。如果您愿意,可以在系统包含文件中查找 TIOCCONS 的定义。我在以下位置找到了我的:

/usr/include/asm-generic/ioctls.h: #define TIOCCONS      0x541D

你的 Perl 脚本就可以是

#!/usr/bin/perl
# https://unix.stackexchange.com/a/397790/119298
sub TIOCCONS{ return 0x541D; }
ioctl(STDIN,TIOCCONS(),0) or die $!;

答案2

为了便于使用,许多 Linux 系统提供了setconsole(8)与 Perl 片段相同的底层操作。

检查返回很重要,它可能会失败。

$ setconsole /dev/ttyS1 ; echo $?
0

内部证明:

$ strace -ff setconsole /dev/ttyS1
...
openat(AT_FDCWD, "/dev/ttyS1", O_WRONLY|O_NOCTTY) = 3
ioctl(3, TCGETS, {B115200 opost isig icanon echo ...}) = 0
ioctl(3, TIOCCONS)                      = 0
...

答案3

短回答:使用 chvt 长回答:Linux 如何在启动时配置 TTY 取决于发行版。它可以是 /etc/inittab 也可以是 /etc/rc.local 在 systemd 系统上,它是根据 logind.conf 中的配置自动进行的

相关内容