このコマンドは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 の設定に従って自動的に実行されます。