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

25
ttys.sh
View File

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