I have a newly bought cheap 8 inch TFT LCD display that is "cutting the edges off" on all sides (i.e., not showing all the pixels). I've come to understand that this is due to "overscan" which seems to afflict mainly TVs using HDMI input.

My kernel is first booting up into efifb and then switching over to inteldrmfb -- both frame buffer drivers exhibit the issue. I am not using X windows and will never want to use X on this tiny display. All I am wanting to do is use the Linux text console. So any solution using "xrandr" is out.

I have tried everything I can find regarding driver-level (kernel-level) frame buffer settings to solve this problem, including tweaking the resolution settings with the "video" kernel boot parameter and by tweaking the timing settings post-boot with fbset, but no matter what I do with fbset, it seems to be ignored.

So my question is this: Is there a way, perhaps higher level than at the frame buffer driver level, that I can add margin around the frame buffer console?

I know I can use "stty" to shorten the number of columns and rows that Linux will use on the console, but that will only solve the issue on the right side and the bottom side and still leave characters cut off on the left side and the top side. Is there a way to use "stty" to add a "first column" and "first row" offset to the console (i.e., some whitespace padding)? If not with stty, with some other light-weight tool (not X windows)?

  • That's a FAQ (also for the X server), and AFAIK, the answer has always been "no". But on many TVs there's some way to switch off overscan.
    – dirkt
    Commented Nov 25, 2017 at 18:55

2 Answers 2


You may give the fbset command a try.

Running fbset -i will show you some info about your current framebuffer settings, including a "timings" line. For me all of the values are 0-s, which probably means that they are not used, but if you see some actual values there, you could try tweaking them.

An excerpt from 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

Please note the -left, -right, -upper, -lower parameters. fbset even has a -move command that increases one of these values and decreases the opposite one at the same time:

   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
  • Thanks, but as mentioned in the question, I tried all that with fbset.
    – acker9
    Commented Dec 22, 2017 at 4:30
  • Oh, sorry, I haven't noticed that sentence. :(
    – Zoltan
    Commented Dec 22, 2017 at 11:46

If you have an HDMI screen at the left of DP-1, which you want a gap at the left, you can run the script below:


# 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!"

It assumes the original resolution is 1920x1080 and take as parameters the destination pixel height and width.

A side effect is that the padding isn't black, but repeats left section of the screen at the right (DP-1).


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .