您如何找到 xrandr 用于输出的当前“模式线”?

Tcl*_*cll 7 xrandr modelines

我正在构建一个实用程序,它将使用 cvt 和 xrandr 定义和添加/删除自定义分辨率的复杂性简化为至少 2 个命令输入。

这个想法是在使用多个时在特定端口上输入自定义分辨率和帧速率(类似于您使用 cvt 的方式),然后查看该端口上的显示器是否可以显示它。
如果您的屏幕不是黑色的,则第二个命令是一个简单的 y 或 n 条目。

这就是诀窍所​​在,以及我遇到的问题......

如果您n在验证提示中输入,则屏幕应重置为之前的分辨率,其中还包括启动时的当前分辨率。

我面临的问题是似乎不可能在实用程序启动时获得当前的模式行。

有没有人知道一种获得 EXACT 模式行的方法,xrandr --output ##### --mode <mode>或者这不可能?

小智 8

这是一个很老的问题,但如果有人遇到这个问题,这里是答案。从命令行,最简单的方法是使用

> xrandr --verbose
[...]
DP-3 connected 1920x1080+0+0 (0x22d) normal (normal left inverted right x axis y axis) 641mm x 401mm
  1920x1080 (0x22d) 148.500MHz +HSync +VSync *current +preferred
    h: width  1920 start 2008 end 2052 total 2200 skew    0 clock  67.50KHz
    v: height 1080 start 1084 end 1089 total 1125           clock  60.00Hz
[...]
Run Code Online (Sandbox Code Playgroud)

可以从输出中的数字中提取相应的模型行,例如

Modeline "1920x1080_60"  148.5  1920 2008 2052 2200  1080 1084 1089 1125  +HSync +Vsync
Run Code Online (Sandbox Code Playgroud)

如果您需要修复模型行,您还可以通过 xrandr 手动添加该模型行。

> xrandr -d :1 --newmode "1920x1080_60" 148.5 1920 2008 2052 2200 1080 1084 1089 1125 +HSync -VSync
> xrandr --addmode DP-3 "1920x1080_60"      
> xrandr --output DP-3 --mode "1920x1080_60"
Run Code Online (Sandbox Code Playgroud)

如果您正在编写程序,您当然可能想要使用libXrandr,特别是它的XRRGetOutputInfo函数,用于从模式的XRRModeInfo结构中读取所需的信息。