我正在构建一个实用程序,将使用 cvt 和 xrandr 定义和添加/删除自定义分辨率的复杂性简化为至少 2 个命令输入。
这个想法是,如果使用多个端口,则在特定端口上输入自定义分辨率和帧速率(类似于使用 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"
如果你正在编写程序,你当然可能想要使用库Xrandr,特别是XRRGetOutputInfo
从模式的结构中读取所需信息的功能XRRModeInfo
。