fbset 是唯一能直接读取 linux 控制台(tty)真实刷新率的命令,fbset -i 输出中的 v: x.xxx hz 即为帧缓冲驱动实际使用的垂直刷新率,而 xrandr 等工具仅适用于 x11/wayland 图形环境,无法获取控制台底层硬件扫描频率。

fbset 是唯一能直接读取 Linux 控制台(即 tty,非 X11 / Wayland 图形会话)刷新率的命令。
如果你在 Ctrl+Alt+F1~F6 切换的纯文本终端里,xrandr 不起作用——它只管 X Server 或 Wayland 合成器下的显示输出,和控制台无关。
fbset -i 能看到真实控制台刷新率
运行:
fbset -i会输出类似:
mode "1920x1080-60"
# D: 148.500 MHz, H: 67.500 kHz, V: 60.000 Hz
...
endmode
其中 V: 60.000 Hz 就是当前帧缓冲(framebuffer)驱动实际使用的垂直刷新率。
-
fbset -i必须在控制台下运行(图形界面里可能返回no fb device或 fallback 到虚拟 framebuffer) - 输出中的
V:值才是真正的刷新率,不是估算值,也不是 X11 的逻辑值 - 如果显示
mode "unknown"或没有V:行,说明当前 framebuffer 驱动未上报刷新率(常见于 efifb、simplefb 等精简驱动)
为什么 xrandr --query 不适用于控制台
xrandr 依赖 X Server 的 RandR 扩展,而控制台根本没启动 X。你在 tty 下敲 xrandr,大概率得到 Can't open display 或空输出。
- 即使你从图形界面切回 tty,
xrandr仍无法访问底层 framebuffer 参数 -
xrandr --verbose里看到的Refresh:字段,是 X Server 自己算出来的近似值,不是硬件实际扫描频率 - Wayland 环境下同理:
wlr-randr或swaymsg -t get_outputs也只反映合成器设定,不等于控制台帧率
fbset 没安装或不识别设备怎么办
Debian/Ubuntu 默认不预装 fbset,需手动安装:
sudo apt install fbset
但装完仍可能报错:
-
open /dev/fb0: No such file or directory→ 内核没启用 framebuffer(检查cat /proc/fb是否为空) -
ioctl FBIOGET_VIDEOMODE: Invalid argument→ 当前 framebuffer 驱动(如vesafb、efifb)不支持返回模式信息 -
fbset只对 legacy framebuffer 有效;modern drm/kms 驱动(如i915、amdgpu)通常禁用 fbdev 接口,此时/dev/fb0存在但fbset -i无法获取刷新率
真正难的是:现代 Linux 发行版默认启用 KMS(Kernel Mode Setting),控制台刷新率由内核 DRM 子系统动态管理,fbset 这类老工具已失去可信度。除非你明确知道用的是 vesafb 或 uvesafb,否则别指望 fbset -i 给出准确数字。











