该命令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 中的配置自动进行的