我正在尝试执行一组低级别的函数来获取和设置显示分辨率,我想知道是否有一个文件仅包含所使用的分辨率并且可用于更改它。
我知道我可以在 Xorg 设置文件中找到我正在寻找的部分内容,但它不仅仅包含活动分辨率。
到目前为止,我发现的所有内容都需要使用 Xorg 或,xrandr
并且我希望找到一种仅通过在文件中读/写来实现此目的的方法。
答案1
当前分辨率存储在 X 服务器的内存中。它不存储在文件中。
Xorg 设置文件不会帮助您,因为它只包含初始配置(并且可能根本不存在),但可以动态调用解析。
(我认为该解决方案实际上出现在 X 服务器日志中,但不能保证您可以访问日志 - 例如,如果您远程访问服务器 - 即使您这样做,您也必须解析日志这是一项繁重的工作并且容易出错。)
称呼xrandr
。这就是它的用途。您不必担心没有它的环境:它是一个基本工具,是标准 X11 客户端发行版的一部分。
如果您需要在早于xrandr
15 年历史的古老系统上运行,您可以调用xdpyinfo
,它已经成为标准 X11 客户端发行版的一部分已有二十多年了。
答案2
因此,在尝试了前面的答案后,我确信但并不完全满意。我继续研究了一下,终于找到了我要找的东西。实际上有一个文件包含屏幕的分辨率,另一个文件包含屏幕支持的所有分辨率(由其 EDID 提供)。
这些文件可以在/sys/class/graphics
与帧缓冲区(通常是 fb0)对应的目录中找到。感兴趣的文件被称为mode
(包含当前分辨率)和modes
(包含屏幕支持的每个分辨率)。
要更改分辨率,必须执行以下操作: echo your-resolution > mode
,其中your-resolution
恰好是文件的行之一modes
。
这里举一个具体的例子来说明。我想将分辨率设置为 VESA 标准。我的屏幕允许的分辨率定义如下:
# 猫模式 D:1920x1080p-60 小:1280x720p-50 小:1280x720p-60 小:1920x1080p-50 小:1920x1080p-60 小:640x480p-60 小:720x480p-60 小:720x576p-50 视频:640x480p-60
我需要做的就是echo V:640x480p-60 > mode
将屏幕分辨率变为 640x480。