起動後にコンソール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/consolettyにリダイレクトされます。

単純な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 の設定に従って自動的に実行されます。

関連情報