core: 完善 tty 检测

This commit is contained in:
bin456789 2023-10-08 21:58:16 +08:00
parent 67a2bee31c
commit 2a7c24bee4
No known key found for this signature in database
GPG Key ID: EE301B386DE6C11B
2 changed files with 12 additions and 21 deletions

View File

@ -1008,13 +1008,7 @@ build_extra_cmdline() {
}
echo_tmp_ttys() {
# 由于 windows 下无法测试各tty是否有效
# 这里的 tty 只临时使用,非最终系统的 tty
if is_in_windows; then
echo "console=ttyS0,115200n8 console=tty0"
else
curl -L $confhome/ttys.sh | sh -s "console="
fi
curl -L $confhome/ttys.sh | sh -s "console="
}
# shellcheck disable=SC2154

25
ttys.sh
View File

@ -1,25 +1,22 @@
#!/bin/sh
prefix=$1
# 最后一个 tty 是主 tty显示的信息最全
# 有些平台例如 aws/gcp 后台vnc只能截图不能输入用有没有鼠标判断
# 因此如果有显示器且有鼠标tty0 放最后面,否则 tty0 放前面
ttys="ttyS0 ttyAMA0"
if [ -e /dev/fb0 ] && [ -e /dev/input/mouse0 ]; then
ttys="$ttys tty0"
else
ttys="tty0 $ttys"
fi
is_in_windows() {
[ "$(uname -o)" = Cygwin ] || [ "$(uname -o)" = Msys ]
}
# 最后一个 tty 是主 tty显示的信息最全
is_first=true
for tty in $ttys; do
if [ -e /dev/$tty ] && echo >/dev/$tty 2>/dev/null; then
if ! $is_first; then
for tty in tty0 ttyS0 ttyAMA0; do
# hytron 有ttyS0 但无法写入
# cygwin 没有 tty0所以 windows 下 tty0 免检
if { [ "$tty" = tty0 ] && is_in_windows; } || stty -g -F "/dev/$tty" >/dev/null 2>&1; then
if $is_first; then
is_first=false
else
printf " "
fi
is_first=false
printf "%s" "$prefix$tty"
if [ "$prefix" = "console=" ] && [ "$tty" = ttyS0 ]; then