麒麟OS终端光标样式可通过三种方式设置:一、图形化首选项中选择块状/竖线/下划线并开关闪烁;二、在~/.bashrc中添加ANSI转义序列如echo -ne "\e[6 q";三、用dconf-editor或gsettings修改VTE底层参数cursor-shape和cursor-blink-mode。

Linux终端光标形状不是由系统全局控制的,而是由终端模拟器(如 gnome-terminal、mate-terminal、xterm)或 Shell 启动时输出的 ANSI 转义序列决定的。改不回来,往往是因为某处配置「悄悄覆盖」了默认行为。
终端首选项里直接改光标形状最稳
这是最推荐的起点,适用于 gnome-terminal、mate-terminal(银河麒麟)、konsole 等主流图形终端。它不依赖 Shell 配置,重启终端即生效,且不会和 .bashrc 或 .zshrc 冲突。
- 打开终端 → 编辑 → 首选项 → 选中当前 profile → 点“编辑”
- 切换到“外观”或“文本”标签页,找到“光标形状”下拉框
- 可选值通常是:
block(块状,默认)、ibeam(竖线)、underline(下划线) - 同时可开关“光标闪烁”,对应参数名一般是
cursor-blink-mode,值为on或off
注意:某些终端(如旧版 gnome-terminal)把该选项放在“文本”页而非“外观”页;如果没看到,试试右键终端空白处 → “配置文件首选项”。
用 ANSI 转义序列强制设定光标样式
当首选项无效、或你想在非图形终端(如 TTY、SSH 连接)中统一光标时,就得靠 echo -ne "\e[2 q" 这类序列。不同数字代表不同形状,但兼容性有坑:
-
\e[1 q:闪烁块状(部分终端不支持) -
\e[2 q:稳定块状(最接近传统“默认”) -
\e[3 q:下划线(注意:不是所有终端都渲染为下划线,有些显示为空白) -
\e[5 q或\e[6 q:竖线(6更常见于现代 VTE 终端) - 必须用
-ne参数(echo),不能用printf不加\033前缀
要永久生效,加到 ~/.bashrc 末尾即可:echo -ne "\e[2 q"
然后 source ~/.bashrc。别加在 PS1 里——那会导致每次命令回显都重发一次光标指令,可能干扰历史搜索或补全。
通过 dconf 或 gsettings 修改底层 VTE 参数
GNOME 系生态(包括银河麒麟)的终端基于 VTE 库,其真实配置存在 dconf 数据库中。GUI 首选项只是它的前端封装,有时修改后不生效,就是键值没写对位置。
- 先查 profile ID:
gsettings get org.gnome.terminal.legacy.profiles:/org/gnome/terminal/legacy/profiles:/ list - 默认 profile 通常是
':1',但自定义后可能是':2'、'b1dcc9dd-5262-4d8d-a863-c897e6d979b9'这类 UUID - 设光标形状:
gsettings set org.gnome.terminal.legacy.profiles:/org/gnome/terminal/legacy/profiles/:1/ cursor-shape "'ibeam'"(注意单引号包裹字符串) - 关闪烁:
gsettings set org.gnome.terminal.legacy.profiles:/org/gnome/terminal/legacy/profiles/:1/ cursor-blink-mode "'off'"
这个方法绕过 GUI 缓存,适合批量部署或脚本化配置,但改错 profile ID 会导致设置无声无息地失败。
为什么改了还是不对?重点排查这三处
光标没变,大概率不是方法错,而是被更高优先级的配置覆盖了:
- 检查
~/.bashrc、~/.zshrc里是否有多余的echo -ne "\e[... q"行,尤其注意有没有PS1=...中混入了光标指令 - 运行
echo $TERM,如果是linux(TTY)或异常值(如screen、tmux),ANSI 光标序列基本无效;此时只能靠终端自身配置 - 某些终端(如
alacritty、kitty)完全不认 VTE 的 dconf 设置,必须改自己专属的 YAML 配置文件,例如~/.config/kitty/kitty.conf里的cursor_shape项
真正容易被忽略的是:不同终端模拟器对同一套 ANSI 序列的支持程度差异很大,\e[6 q 在 GNOME Terminal 有效,在 xterm 里可能被忽略,在 tmux 里需要额外开启 allow-window-resize 才转发。别迷信“通用序列”。











