你如何找到xrandr正在使用的输出的当前“modeline”?

我正在开发一个实用工具,它可以简化使用 cvt 和 xrandr 定义和添加/删除自定义分辨率的复杂性,只需至少两个命令输入。
这个想法是在特定端口(如果使用多个)上输入自定义分辨率和帧率(类似于使用 cvt 的方式),然后查看该端口上的显示器是否能够显示它。 第二个命令是一个简单的 y 或 n 输入,用于判断屏幕是否黑屏。
这里有一个技巧,也是我遇到的问题...
如果您在验证提示中输入 n,则屏幕应该恢复到先前的分辨率,其中包括启动时的当前分辨率。
我面临的问题是,在实用程序启动时似乎无法获取当前的模型线。
有人知道如何获取 xrandr --output ##### --mode <mode> 的确切模型线吗?或者这不可能吗?
1个回答

这是一个相当老的问题,但如果有人遇到这个问题,这里是答案。从命令行来说,最简单的方法就是使用。
> 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
[...]

相应的模式行可以从输出中的数字中提取,例如。
Modeline "1920x1080_60"  148.5  1920 2008 2052 2200  1080 1084 1089 1125  +HSync +Vsync

如果你需要修复模式行,你也可以通过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"

如果你正在编写一个程序,当然可以使用libXrandr,特别是它的XRRGetOutputInfo函数来从模式的XRRModeInfo结构中读取所需的信息。

很遗憾,由于这个问题的年代久远,我实际上忘记了自己曾经提出过这个问题,因为在失去了动力和项目之后,我不得不处理NVIDIA驱动程序,而它们会覆盖xrandr。谢谢! - Tcll
为什么你的输出显示+HSync +Vsync,而你却说"+HSync -Vsync"呢? - Evan Carroll
嗯,说得好,可能只是没注意到。应该是+VSync。 - buergi
@buergi 已经编辑和修复完成。 - Evan Carroll