Linux Framebuffer设置正确的分辨率

11

我有一台树莓派,想要在没有xserver的情况下全屏显示一张图片 - 所以直接将其写入帧缓冲区。这里没有问题。

但是设置为全屏显示却不起作用。

cat /sys/class/graphics/fb0/modes
产出:
U:1024x768p-0
U:1920x1200p-0
U:1920x1080p-0
U:608x684p-0

所以我使用

fbset -xres 1920 -yres 1200 -match

导致

>>fbset
mode "1920x1200"
geometry 1920 1200 1920 1200 16
timings 0 0 0 0 0 0 0
rgba 5/11,6/5,5/0,0/16
endmode

如果我现在使用fbi来显示图像,或者只是填充帧缓冲区/dev/urandom >> /dev/fb0,只有屏幕的一部分被填充。显示部分的纵横比等都是正确的,只是周围有一个大的黑边界。

如果我使用其他分辨率,一切都如预期般工作,例如fbi中的状态行变得更大等。

我做错了什么?

2个回答

13

试试这个 fbset 格式:

fbset -fb /dev/fb0 -g 1920 1200 1920 1200 16 

确保您正在查看的是fb0而不是fb1:

fbset -fb /dev/fb0

再次确认实际设置的内容:

cat /sys/class/graphics/fb0/mode

另外,尝试使用以下命令运行fbi(再次确保您正在使用fb0):

fbi -d /dev/fb0 image.png

你也可以通过以下方式将设置强制到fb0中:

echo U:1920x1200p-0 > /sys/class/graphics/fb0/mode

从技术上讲,这正是 fbset 正在做的事情。只是确保 fb1 没有搞砸什么。

最后,请确保您的控制台正在使用 fb0。我相信它是这样的。

con2fbmap 1

你可能也想重新启动一下电脑,所以请检查你的设置:

cat /proc/cmdline

如果分辨率不是1920x1200,请更新为1920x200。我认为在树莓派的/boot/cmdline.txt中可以找到它,对于我来说是/boot/uEnv.txt。


2

我有一个两部分的答案,对于树莓派来说非常有效。

首先,树莓派有超扫描的概念,它会在整个屏幕周围添加黑色边框,使其适应旧电视的“管”范围。是的,某些模拟该功能的现代平板电视也需要这个功能。如果您的黑色边框出现在所有屏幕分辨率上,请更改此设置。最简单的方法是通过sudo raspi-config进行。不同版本的raspi-config中选项和布局会有所不同,但您可以从Advanced Options菜单中寻找Overscan。如果超扫描是您的问题,但您希望更精细地控制黑色边框的大小 - 那么可以在/boot/config.txt中进行微调。我不会在这里详细介绍,但很容易搜索如何调整该文件。

如果这不是您的问题,并且您正在寻找更好的分辨率设置以适应您的电视/显示器,则还可以使用raspi-config从所有有效的屏幕分辨率中进行选择。它们位于与超扫描相同的Advanced Options菜单中。

如果您需要以编程方式检查和设置分辨率,则可以使用tvservice工具。该程序没有手册页,但不带参数运行它会提供一些帮助。它具有非常有趣的功能,远远超出了fbset的能力范围。

以下是一些简短的示例:

$ sudo tvservice --status
state 0x120009 [HDMI CEA (16) RGB lim 16:9], 1920x1080 @ 60.00Hz, progressive
$
$ sudo tvservice --modes=CEA
Group CEA has 11 modes:
           mode 1: 640x480 @ 60Hz 4:3, clock:25MHz progressive 
           mode 2: 720x480 @ 60Hz 4:3, clock:27MHz progressive 
           mode 3: 720x480 @ 60Hz 16:9, clock:27MHz progressive 
           mode 4: 1280x720 @ 60Hz 16:9, clock:74MHz progressive 
  (prefer) mode 16: 1920x1080 @ 60Hz 16:9, clock:148MHz progressive 
           mode 17: 720x576 @ 50Hz 4:3, clock:27MHz progressive 
           mode 18: 720x576 @ 50Hz 16:9, clock:27MHz progressive 
           mode 19: 1280x720 @ 50Hz 16:9, clock:74MHz progressive 
           mode 31: 1920x1080 @ 50Hz 16:9, clock:148MHz progressive 
           mode 32: 1920x1080 @ 24Hz 16:9, clock:74MHz progressive 
           mode 34: 1920x1080 @ 30Hz 16:9, clock:74MHz progressive 

你可以查看电视支持哪些模式,为了完整起见,你应该扫描DMT和CEA两个组以获取所有内容。DMT模式更适用于计算机显示器而不是电视。
然后你的程序可以从列表中选择一个并使用"tvservice -e"来设置其中一个模式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接