부팅 후 콘솔 tty를 어떻게 변경합니까?

부팅 후 콘솔 tty를 어떻게 변경합니까?

이 명령은 dmesg | grep console다음을 반환합니다.

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

부팅 후 ttys3으로 변경하고 싶습니다. 가능합니까?

답변1

매뉴얼 페이지tty_ioctlioctl 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의 구성에 따라 자동으로 수행됩니다.

관련 정보