Busybox
バージョンを使用してルートファイルシステムをカスタマイズしました。1.36.1
モニターキーボードにIPをctrl+c
入力したping
ときにデバイスをシャットダウンできない理由がわかりません。ただし、SSHを介してデバイスに接続すると、IPがping
?で終了する可能性があります。ctrl+c
同じだctrl+u
。
私は言及しましたエマルジョンしかし、私の問題は解決されませんでした。
しかし、私のシステムにはデスクトップ環境はありません。私のプロセッサはIntel x86_64ビットです。
#1 #stty -a(SSH接続)
speed 38400 baud; rows 41; columns 143; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
#stty -a(モニターキーボード)
speed 38400 baud; rows 37; columns 100; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -flusho -extproc
#2 #cat /etc/inittab (以前)
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
#cat /etc/inittab(新規)
::sysinit:/etc/init.d/rcS
tty1::respawn:/sbin/getty 38400 tty1
tty2::respawn:/sbin/getty 38400 tty2
tty3::respawn:/sbin/getty 38400 tty3
tty4::respawn:/sbin/getty 38400 tty4
tty5::respawn:/sbin/getty 38400 tty5
tty6::respawn:/sbin/getty 38400 tty6
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
#3 #echo $SHELL(SSH接続)
/bin/bash
#echo $SHELL(モニターキーボード)
/bin/sh
#4 #echo $TERM (SSH接続)
xterm
#echo $TERM(モニターキーボード)
xterm
#5 #tty(SSH接続)
/dev/pts/0
#tty(モニターキーボード)
/dev/console
#6 #ls -l /dev/console /dev/tty[0-9]
crw-rw---- 1 root root 5, 1 Jan 4 04:31 /dev/console
crw-rw---- 1 root root 4, 0 Jan 4 04:31 /dev/tty0
crw-rw---- 1 root root 4, 1 Jan 4 04:32 /dev/tty1
crw-rw---- 1 root root 4, 2 Jan 4 04:31 /dev/tty2
crw-rw---- 1 root root 4, 3 Jan 4 04:31 /dev/tty3
crw-rw---- 1 root root 4, 4 Jan 4 04:31 /dev/tty4
crw-rw---- 1 root root 4, 5 Jan 4 04:31 /dev/tty5
crw-rw---- 1 root root 4, 6 Jan 4 04:31 /dev/tty6
crw-rw---- 1 root root 4, 7 Jan 4 04:31 /dev/tty7
crw-rw---- 1 root root 4, 8 Jan 4 04:31 /dev/tty8
crw-rw---- 1 root root 4, 9 Jan 4 04:31 /dev/tty9
答え1
「モニターキーボード」stty -a
出力にはあり、-isig -icanon -iexten
SSHセッションではこれらの機能が有効になっています(-
前にフラグはありません)。
man stty
次のように説明します。
[-]icanon
特殊文字を有効にする:erase、kill、wasase、rpnt
[-]iexten
POSIX以外の特殊文字を有効にする
[-]isig
割り込み許可、終了、特殊文字の中断
したがって、-isig
Control-C、Control-\、およびControl-Zの特殊機能は次のとおりです。閉鎖。同様に、、、などの-icanon
機能も適用されません。モニターキーボードセッションでこの問題を解決できます。erase
kill
werase
rprnt
stty isig icanon
これは、ログインプロセスの初期にTTYデバイス設定をよく知られた値に初期化する同様のプロセスを使用せずに直接起動/bin/sh
したためです。/etc/inittab
getty
inittab
ログインせずに直接シェルを実行するには、必要なTTY初期化を直接実行する必要があります/etc/init.d/rcS
。たとえば、次のようになります。
for i in 1 2 3 4 5 6; do
stty -F /dev/tty$i isig icanon
done
SSHセッションでは、擬似TTYデバイス(単にPTY)が使用され、sshd
自動的に初期化されます。
/dev/console
コマンド出力の結果がtty
やや疑わしいからです。本質的に、少なくともx86アーキテクチャでは、/dev/console
現在アクティブなコンソールデバイスの互換性エイリアスです。通常(つまり、現在アクティブなKVM仮想コンソール)に接続できますが、カーネルブートオプションの/dev/tty0
ように使用されるシリアルポートを指すこともできます。/dev/ttyS0
console=
カーネルで次の設定オプションがすべて有効になっていますか?
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
- あるいは、クラシックBIOSまたはUEFIなどの適切なフレームバッファコンソールドライバおよび
CONFIG_VGA_CONSOLE=y
/またはコンソールで最新の直接レンダリングGPUドライバを使用している場合は可能です。CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FB_VESA=y
CONFIG_FB_EFI=y
CONFIG_DRM_FBDEV_EMULATION=y
コンソールデバイスノードの設定は正しいですか? Debian 12 システムにはls -l /dev/console /dev/tty[0-9]
次の出力があります。
crw--w---- 1 root tty 5, 1 Nov 10 02:26 /dev/console
crw--w---- 1 root tty 4, 0 Nov 10 02:25 /dev/tty0
crw--w---- 1 root tty 4, 1 Jan 30 13:37 /dev/tty1
crw--w---- 1 root tty 4, 2 Nov 10 02:25 /dev/tty2
crw--w---- 1 root tty 4, 3 Nov 10 02:25 /dev/tty3
crw--w---- 1 root tty 4, 4 Nov 10 02:25 /dev/tty4
crw--w---- 1 root tty 4, 5 Nov 10 02:25 /dev/tty5
crw--w---- 1 root tty 4, 6 Nov 10 02:25 /dev/tty6
crw--w---- 1 root tty 4, 7 Nov 10 02:26 /dev/tty7
crw--w---- 1 root tty 4, 8 Nov 10 02:25 /dev/tty8
crw--w---- 1 root tty 4, 9 Nov 10 02:25 /dev/tty9
権限と所有権は、現在のログインとディストリビューションでこれを処理する方法によって異なりますが、州/マイナーデバイス番号(カンマとスペースで区切られた2桁)はまったく同じでなければなりません。