Approvals: 0/1
This is an old revision of the document!
Emulation with 4K and ultrawide monitors, or problems when your screen is not fully displayed
Older 8-bit and 16bit systems, or arcade systems from the 80s and 90s were using 4:3 CRT screens. Modern displays are now 16:9 or wider, and can go up to 4K, i.e. 2160 pixels high (compared to 480 or 546 at the time!).
Having so many pixels to render on the screen is impactful on the system performance. When you have a 4K screen or an ultra-wide screen, Batocera will limit the resolution by default to HD 1920×1080. It's more than enough to render emulators, even the most recent one. However, when you have an ultra-wide monitor, display is stretched.
For 4K monitors, because the resolution is by default resized to 1920×1080, you might see a screen that looks like this one - actually it's what 1920×1080 is, centered in a 3840×2160 screen:
In order to cover the whole screen, the best solution is to set the VIDEO MODE to 1920×1080 – you can do that on a system-by-system basis in the PER SYSTEM ADVANCED CONFIGURATION screen.
Another use case is when you have a 1280×720 TV, for example, and you want to use bezels that are designed for 1920×1080. Batocera 5.27 can automatically resize the bezels, but sometimes you need to force the VIDEO MODE to take your 1280×720 resolution.
If you absolutely want to use the 4K resolution for whatever reason (shaders looking better, you have a non-standard wide format on your TV/monitor…), you can force the STRETCH BEZEL option too. Same thing, this is something you can do on a system-by-system basis. WARNING this has an impact on the emulation performance.
When EmulationStation feels sluggish on a 4K TV
There are some SBC + TV combinations where EmulationStation feels sluggish (default theme seems to be lagging behind, with a refresh rate like 10 FPS). It's really depending on your own configuration, but we have reproduced this with a Raspberry Pi4 and a couple 4K TV models. By default, ES should negotiate with your TV to fix its resolution to 1080p, but sometimes your TV brand doesn't accept it and stays at 4K/2160p resolution.
To force 1080 in those cases, edit batocera.conf
and add a line:
system.es.maxresolution=1920x1080
This shouldn't be necessary for most TVs, though, and the default mode can be set back with es.maxresolution=0
(or just comment out or remove the line in batocera.conf
).
How does that work under the hood?
You can do it though ES as shown above, but you can also tweak your system with batocera.conf
to make the aspect ratio better.
1. Know what are the resolutions available on your system + TV combination by entering the command batocera-resolution listModes
:
# batocera-resolution listModes 0:2560x1440 60Hz 1:2560x1080 60Hz 2:1920x1080 60Hz 3:1920x1080 60Hz 4:1920x1080 60Hz 5:1920x1080 60Hz 6:1920x1080 60Hz 7:1920x1080 50Hz 8:1920x1080 50Hz 9:1680x1050 60Hz 10:1600x900 60Hz 11:1280x1024 75Hz 12:1280x1024 60Hz 13:1440x900 60Hz 14:1280x720 60Hz 15:1280x720 60Hz 16:1280x720 50Hz 17:1024x768 75Hz 18:1024x768 60Hz 19:800x600 75Hz 20:800x600 72Hz 21:800x600 60Hz 22:720x576 50Hz 23:720x576 50Hz 24:720x480 60Hz 25:720x480 60Hz 26:720x480 60Hz 27:720x480 60Hz 28:640x480 75Hz 29:640x480 60Hz 30:640x480 60Hz 31:720x400 70Hz
2. Then, choose the mode from the list that is the one you want to force to RetroArch. For example, if I want to force 2560×1080
for the emulators, I can add in my batocera.conf
:
global.videomode=1
Emulators will then all select mode 1 = 2560×1080 from the list above as their screen resolution. If I want to select a specific resolution only for a specific emulator, I can do that with for instance n64.videomode=1
.
Batocera 5.27 and later will automatically resize 1920×1080 bezels to ultrawide by adding black borders on the sides. It will also resize full HD 1080 bezels to HD-ready 720p.
3. EmulationStation ignores this parameter. If you want to put ES in a specific resolution, you need to edit /etc/init.d/S31emulationstation
and add the wanted resolution with a dedicated batocera-resolution setMode XX
line in the script:
cd /userdata # es need a PWD batocera-resolution setMode 1 HOME=/userdata/system LANG="${settings_lang}.UTF-8" SDL_NOMOUSE=1 /usr/bin/emulationstation --no-splash &
Don't forget to batocera-save-overlay
to keep it upon reboot.
4. If you ask for a 4K 3840×2160 resolution, but with a bezel that is HD 1920×1080, by default Batocera will add black borders around the bezel, like on the picture above. If you want your display to be full screen, you can either:
- switch to a lower resolution (like 1920×1080)
- add a line
mame.bezel_stretch=1
in yourbatocera.conf
for each emulator you want to stretch. Orglobal.bezel_stretch=1
if you want to enable stretching to your native 4K resolution. WARNING this has an impact on the emulation performance.
Display issues, when xrandr is your friend
This section is for PC x86 and x86_64, not for SBCs like Raspberry Pi or Odroid.
This tutorial is useful if you have display issues, for instance if you need to rotate your screen, or anything else.
For example, I have a 4k UHD TV, Batocera will display the highest display resolution available on my screen, but 4k isn't good for emulation: it's lagging. So, I need to force a smaller resolution.
First of all, you need to connect on your Batocera through SSH. You can find a “How to” by following this link.
Okay, now you're connected on your Batocera, let's begin.
# cp /etc/X11/xinit/xinitrc ~/.xinitrc # export DISPLAY=:0.0 # xrandr
If you have an error message telling you “can't open display :0.0”, you need to physically log onto your Batocera system with the graphic display on. On a PC from EmulationStation, press F1
and then launch a terminal from there (F4
).
Search this section on xrandr :
Screen 0: minimum 8 x 8, current 1366 x 768, maximum 32767 x 32767 LVDS1 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 290mm x 160mm 1366x768 60.03*+ 40.03 1024x768 60.00 1024x576 60.00 960x540 60.00 800x600 60.32 56.25 864x486 60.00 640x480 59.94
Here's the available display resolution for your screen. This is an example with an old 4/3 screen, but this is the same principle for other screens.
The current resolution is marked with a “ * ”. I want to change it, so let's use vi - or any other text editor you are familiar with :
# vi ~/.xinitrc
You'll see a section with:
##################### ## CUSTOMISATIONS ### # to customize your display, you can copy this file to ~/.xinitrc and then modify it # rotate the screen # xrandr -o left # xrandr -o right # xrandr -o inverted # change the resolution # xrandr -s 640x480 # change the resolution and the Hz # xrandr -s 640x480 -r 60 ##################### #####################
Just uncomment the corresponding line. In my case, I want to force the 64×480 mode, so I just remove the first # character to:
... # change the resolution xrandr -s 640x480 # change the resolution and the Hz ...
Let's save and quit ([Esc]:wq for vi).
Actually, your Batocera's display isn't in full screen yet. You must see it only partially, so you have to enter the following commands into your SSH session:
# exec emulationstation --windowed
Then restart Emulstation :
# /etc/init.d/S31emulationstation stop # /etc/init.d/S31emulationstation start
Batocera should be in full screen with the right resolution.
/!\ BUT /!\ if you reboot the Batocera system, you'll have to do this again, the resolution is forced just for this boot, next boot, resolution will be reset to the highest available again.
We need to force it for every boot.
As you can see at the beginning of this tutorial, we copied the xinitrc file to a temporary folder.
We need to erase the current xinitrc file with our modified version. It is the same as the first code block, but reversed:
# cp ~/.xinitrc /etc/X11/xinit/xinitrc # batocera-save-overlay
Now, reboot your Batocera system, the display resolution should be good.
Also, xrandr
can do screen rotation: very useful for old vertical screen arcade machines !
Hope this was easy for all.
- display_issues.1610066382.txt.gz
- Last modified: 3 years ago
- by lbrpdx