Ich habe ein neu gekauftes, billiges 8-Zoll-TFT-LCD-Display, das an allen Seiten „die Kanten abschneidet“ (d. h. nicht alle Pixel anzeigt). Ich bin zu dem Schluss gekommen, dass dies auf „Overscan“ zurückzuführen ist, das hauptsächlich bei Fernsehern mit HDMI-Eingang auftritt.
Mein Kernel bootet zuerst in efifb und wechselt dann zu inteldrmfb – beide Frame-Buffer-Treiber weisen das Problem auf. Ich verwende kein X-Windows und werde X auf diesem winzigen Display auch nie verwenden wollen. Ich möchte lediglich die Linux-Textkonsole verwenden. Daher scheidet jede Lösung mit „xrandr“ aus.
Ich habe versuchtallesIch kann Frame-Buffer-Einstellungen auf Treiberebene (Kernelebene) finden, um dieses Problem zu lösen. Dazu gehört das Optimieren der Auflösungseinstellungen mit dem Kernel-Boot-Parameter „Video“ und das Optimieren der Timing-Einstellungen nach dem Booten mit fbset. Aber egal, was ich mit fbset mache, es scheint ignoriert zu werden.
Meine Frage ist also folgende: Gibt es eine Möglichkeit, möglicherweise auf einer höheren Ebene als der Ebene des Frame-Buffer-Treibers, mit der ich einen Rand um die Frame-Buffer-Konsole hinzufügen kann?
Ich weiß, dass ich „stty“ verwenden kann, um die Anzahl der Spalten und Zeilen zu verringern, die Linux auf der Konsole verwendet, aber das löst nur das Problem auf der rechten und unteren Seite und lässt auf der linken und oberen Seite weiterhin Zeichen abgeschnitten. Gibt es eine Möglichkeit, „stty“ zu verwenden, um der Konsole einen Offset für die „erste Spalte“ und die „erste Zeile“ hinzuzufügen (also etwas Leerzeichen aufzufüllen)? Wenn nicht mit stty, dann mit einem anderen einfachen Tool (nicht X Windows)?
Antwort1
Sie können den fbset
Befehl ausprobieren.
Beim Ausführen fbset -i
werden Ihnen einige Informationen zu Ihren aktuellen Framebuffer-Einstellungen angezeigt, einschließlich einer Zeile „Timings“. Bei mir sind alle Werte 0, was wahrscheinlich bedeutet, dass sie nicht verwendet werden, aber wenn Sie dort tatsächliche Werte sehen, können Sie versuchen, sie zu optimieren.
Ein Auszug aus man fbset
:
Display timings:
-pixclock <value>
set the length of one pixel (in picosec‐
onds). Note that the frame buffer device
may only support some pixel lengths
-left <value>
set left margin (in pixels)
-right <value>
set right margin (in pixels)
-upper <value>
set upper margin (in pixel lines)
-lower <value>
set lower margin (in pixel lines)
-hslen <value>
set horizontal sync length (in pixels)
-vslen <value>
set vertical sync length (in pixel lines)
--timings, -t ...
set all timing parameters at once in the
order <pixclock> <left> <right> <upper>
<lower> <hslen> <vslen>, e.g. -t 35242 64
96 35 12 112 2
Beachten Sie bitte die Parameter -left
, -right
, -upper
, . Es gibt sogar einen Befehl, der einen dieser Werte erhöht und gleichzeitig den anderen verringert:-lower
fbset
-move
Display positioning:
-move {left|right|up|down}
move the visible part of the display in the
specified direction
-step <value>
set step size for display positioning (in
pixels or pixel lines), if -step is not
given display will be moved 8 pixels hori‐
zontally or 2 pixel lines vertically
Antwort2
Wenn Sie links vom DP-1 einen HDMI-Bildschirm haben und links eine Lücke wünschen, können Sie das folgende Skript ausführen:
#!/bin/bash
# Usage: .script pixel_height pixel_width
new_mode_spec=$(cvt "$1" "$2" 60 | sed -n 's/Modeline *//p')
new_mode_name=$(echo "$new_mode_spec" | grep -o '"[^"]*"')
new_mode_res=$(echo "$new_mode_name" | sed 's/"//g' | sed 's/_.*$//')
xrandr --newmode "${new_mode_spec}"
xrandr --addmode HDMI-1 "${new_mode_name}"
xrandr --output HDMI-1 --left-of DP-1 \
--mode "${new_mode_name}" \
--panning "${new_mode_res}" \
--scale-from 1920x1080 \
--output DP-1 --mode 1920x1080
echo "Changed to ${new_mode_res}, remember that it must be a multiple of 8!"
Dabei wird davon ausgegangen, dass die Originalauflösung 1920 x 1080 beträgt, und als Parameter werden die Zielpixelhöhe und -breite verwendet.
Ein Nebeneffekt besteht darin, dass die Polsterung nicht schwarz ist, sondern den linken Bildschirmbereich rechts wiederholt (DP-1).
Anmerkungen
- Verwandte Antworten:Xrandr-Problem beim Versuch, eine defekte Anzeige zu vermeiden
- Das Ausprobieren verschiedener Setups ist sinnvollarandr, eine GUI für xrandr (x11-xserver-utils).
- Ich bin nicht sicher, wie das auf Wayland geht.