Linux 帧缓冲区正确设置分辨率
Linux Framebuffer set resolution correctly
我有一个 RaspberryPi 并且想在没有 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 中的统计行变大等。
我做错了什么?
为 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 for raspberry pi。对我来说它 /boot/uEnv.txt.
我有一个由两部分组成的答案,它在 Raspberry Pi 上产生了奇迹。
首先,Pi 有过扫描的概念,它是在整个屏幕周围添加黑色边框,使其落入旧电视的“管”内。是的,一些模拟该功能的现代平板电视也需要它。如果您的黑色边框围绕所有屏幕分辨率,则更改此设置。最简单的方法是通过 sudo raspi-config
。选项和布局因 raspi-config
的不同版本而异,但您可以先在 Advanced Options
菜单中查找 Overscan
。如果过扫描是您的问题,但您希望更好地控制黑色边框的大小 - 那么在 /boot/config.txt 中有一种微调它的方法。我不会在这里深入探讨,搜索如何调整该文件很容易。
如果这不是您的问题,并且您正在寻找可以为您的 TV/monitor 设置的更好的分辨率,那么您也可以使用 raspi-config
到 select 从所有有效的屏幕分辨率。它们与过扫描位于相同的 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 模式更适合计算机显示器而不是电视。
然后您的程序可以从该列表中 select 并使用 tvservice -e
设置其中一种模式。
我有一个 RaspberryPi 并且想在没有 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 中的统计行变大等。
我做错了什么?
为 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 for raspberry pi。对我来说它 /boot/uEnv.txt.
我有一个由两部分组成的答案,它在 Raspberry Pi 上产生了奇迹。
首先,Pi 有过扫描的概念,它是在整个屏幕周围添加黑色边框,使其落入旧电视的“管”内。是的,一些模拟该功能的现代平板电视也需要它。如果您的黑色边框围绕所有屏幕分辨率,则更改此设置。最简单的方法是通过 sudo raspi-config
。选项和布局因 raspi-config
的不同版本而异,但您可以先在 Advanced Options
菜单中查找 Overscan
。如果过扫描是您的问题,但您希望更好地控制黑色边框的大小 - 那么在 /boot/config.txt 中有一种微调它的方法。我不会在这里深入探讨,搜索如何调整该文件很容易。
如果这不是您的问题,并且您正在寻找可以为您的 TV/monitor 设置的更好的分辨率,那么您也可以使用 raspi-config
到 select 从所有有效的屏幕分辨率。它们与过扫描位于相同的 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 模式更适合计算机显示器而不是电视。
然后您的程序可以从该列表中 select 并使用 tvservice -e
设置其中一种模式。