我似乎在 Almalinux 9 上遇到了一个奇怪的问题,我一直无法解决。
看起来 LINES 和 COLUMNS 变量没有为交互式登录 shell 设置完整大小,尽管它们为交互式非登录 shell 设置了完整大小。不幸的是,这会带来某些工具的副作用,例如vim
、less
、man
当用户登录时似乎无法正常运行(当我在由 提供的 VM 上激活控制台时,我会得到一个交互式、非登录的 root shell qemu-guest-agent
)。
我在以前的任何部署中都没有遇到过这个问题,并且四处搜索后发现了一些有关 shell 自动设置这些值的信息(我使用的是bash
v5.1.8)。我已经确认通过 为所有交互式 shellcheckwinsize
设置了shell 选项,但在尝试调整终端大小时看不到任何更改(显然这似乎只影响 Putty 终端并且仅在 Almalinux 9 上)。on
/etc/bashrc
我在每个会话中运行以下别名(位于/tmp/size.sh
)以尝试显示我的问题是什么:
alias test_size="echo -e \
\"login: \$(shopt -q login_shell && echo 'yes' || echo 'no') \
\ninteractive: \$([[ -t 0 || -p '/dev/stdin' ]] && echo 'yes' || echo 'no') \
\n\$(id) \
\n\$(tty) \$TERM \${COLUMNS}x\${LINES} \
\""
KVM 的默认控制台具有正确的全屏尺寸(列 = 425,行 = 79):
bash-5.1# . /tmp/size.sh
bash-5.1# test_size
login: no
interactive: yes
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:unconfined_t:s0
/dev/pts/0 putty-256color 425x79
非登录 shell 的大小也是正确的:
bash-5.1# su test2
[test2@files01 /]$ . /tmp/size.sh
[test2@files01 /]$ test_size
login: no
interactive: yes
uid=1001(test2) gid=1001(test2) groups=1001(test2) context=system_u:system_r:unconfined_t:s0
/dev/pts/0 putty-256color 425x79
[test2@files01 /]$
exit
登录 shell 的大小非常小(COLUMNS=80,LINES=24):
bash-5.1# su - test2
[test2@files01 ~]$ . /tmp/size.sh
[test2@files01 ~]$ test_size
login: yes
interactive: yes
uid=1001(test2) gid=1001(test2) groups=1001(test2) context=system_u:system_r:unconfined_t:s0
/dev/pts/0 putty-256color 80x24
[test2@files01 ~]$
logout
在输入此内容时,我发现另一台计算机上的终端运行正常并响应调整大小。
大小合适的交互式登录 shell:
[root@files01 ~]# . /tmp/size.sh
[root@files01 ~]# test_size
login: yes
interactive: yes
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
/dev/pts/1 xterm-256color 238x58
所以现在感觉这可能是一个问题TERM=putty-256color
,但我不确定同一终端是否适用于我的其他部署。我ncurses-base-6.2-10.20210508
提供了putty-256color
terminfo,它似乎是 Almalinux 9 中提供的最新版本。我有一个使用较新ncurses
terminfo (v6.4.20231202) 的滚动发行版,在使用 Putty 时,它的行为正确且调整大小正确。
我的问题是如何获得正确的全屏尺寸并checkwinsize
在所有登录的所有终端上工作?我在任何其他安装(主要是 CentOS 7/8、Debian 10/11/12 和 OpenSUSE Tumbleweed)上都没有看到这个特定问题。我希望避免为每个用户硬编码行和列的大小。我可以提供任何需要帮助的进一步信息。
谢谢