Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
display_issues [2020/11/21 17:30] – [How does that work under the hood?] lbrpdxdisplay_issues [2024/02/23 02:17] (current) – [I see the Batocera splash screen, but then it turns black/no input] lbrpdx
Line 1: Line 1:
-~~NOTOC~~+====== Display Troubleshooting ====== 
 + 
 +===== I have no display ===== 
 + 
 +If you know Batocera is booting (the network share is available, you can SSH in, you hear some music, etc.) but you have no display, it could be that Batocera is using a different display than intended. The simple solution to this is to unplug and replug the display, Batocera should automatically switch over to the newest display that was plugged in (sometimes, a laptop that is plugged in to its external port will "connect" that first before connecting its internal display, causing the internal display to be connected "last"). 
 + 
 +If that still isn't working, try [[:access_the_batocera_via_ssh|SSH'ing in]] and run the following: 
 + 
 +<code> 
 +export DISPLAY=:0.0 
 +batocera-resolution listOutputs 
 +batocera-resolution setOutput <your intended output here> 
 +</code> 
 + 
 +If that //still// isn't working, then it's recommended to skip straight to the [[#my_edid_is_not_working_on_my_raspberry_pi_specifically|advanced display debugging]]. 
 + 
 +==== I see the Batocera splash screen, but then it turns black/no input ==== 
 + 
 +It is possible that the official graphics drivers have not been automatically detected and used, and the fallback open-source alternative driver is not able to provide the display output (typical if on "bleeding-edge" hardware released in the last year). If that's the case, [[:supported_pc_hardware|they can be manually activated]] by editing the ''batocera-boot.conf'' file. 
 + 
 +If the correct drivers are being used and it's still not working, it's possible that the prime switcher also needs to be toggled (common on modern laptops connected to external displays). In case Batocera hasn't been able to automatically detect this for you, [[:supported_pc_hardware#hybrid_optimus_nvidia_laptops|you can manually activate the prime switching]] by editing the ''batocera-boot.conf'' file. 
 + 
 +It can also be the case of a dead USB flash disk. The USB flash drive isn't "dead enough" to prevent from booting, but some there are missing parts in the boot sequence and it just hangs at some point, and we've seen this happening after the splash screen. In doubt, try with another USB flash drive. 
 + 
 +If using a HP EliteDesk specifically, [[:usff_nuc_mini_pcs#hp_mini_micro_small_form_factor_pcs|it may require certain BIOS settings]] or else the GPU might be disabled by the motherboard. 
 + 
 +As a general rule, when you face a black screen during the boot sequence, it can be helpful to [[troubleshooting#verbose_boot|enable verbose boot mode]] for troubleshooting. 
 + 
 +===== The edges of my screen are cut off! ===== 
 + 
 +Most modern TVs come with some sort of setting that slightly zooms in the image. This is normally done to prevent garbage pixels from displaying in broadcasts (remnant of a bygone era). Normally, the TV is meant to turn this off when using an input device like a PlayStation or a computer, but sometimes it fails to recognize this and keeps it on. Usually you can turn it off manually in that case. 
 + 
 +This setting does not have a consistent name between manufacturers. Names to look out for while scouring through your option menus: "Just scan", "Pixel ratio", "Zoom", "Aspect", "Overscan", etc. These may be in either your per-channel settings or your system settings. 
 + 
 +===== My screen keeps blinking ===== 
 + 
 +It could be that the TV reports as supporting a refresh rate it isn't actually tuned for, occasionally slipping outside of the expected range (which cuts off the signal momentarily). In this case, try different "similar" refresh rates, eg. if on a 60Hz display try 59.98Hz. For PCs, first try testing the different resolutions as specified in the [[#display_issues,_when_xrandr_is_your_friend|xrandr]] section below, then [[#force_any_specific_supported_resolution_in_es_instead_of_the_default_maximum_one|save it to apply on boot]]. 
 + 
 +If on a device that uses the DRM service specifically (such as [[:choose_a_single_board_computer#various_android_tv_boxes|Android TV boxes]] and [[:choose_a_single_board_computer|other SBCs]]), as weird as this sounds try booting back into the eMMC Android firmware and set the resolution to the "closest to native" as you can get for that box. For instance, if the box was to support 4K displays, set the resolution to 2160p in Android (this is irrelevant of what resolution you want to use for Batocera itself). When you reboot back into Batocera, the flashing screen problem may be solved. 
 ===== Emulation with 4K and ultrawide monitors, or problems when your screen is not fully displayed ===== ===== 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!). 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 1920x1080. It's more than enough to render emulators, even the most recent one. However, when you have an ultra-wide monitor, display is stretched. +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 1920x1080. It's more than enough to render emulators, even the most recent ones. However, when you have an ultra-wide monitor, the display may be stretched. 
  
-For 4K monitors, because the resolution is by default resized to 1920x1080, you might see a screen that looks like this one actually it's what 1920x1080 is, centered in a 3840x2160 screen:+For 4K monitors, because the resolution is by default resized to 1920x1080, you might see a screen that looks like this one (actually it's what 1:1 pixel scaled 1920x1080 is, centered in a 3840x2160 screen):
  
-{{ :minihd_in_4k.png?nolink&400 |}}+{{ :minihd_in_4k.png?nolink&500 |}}
  
-In order to cover the whole screenthe best solution is to set the **VIDEO MODE** to 1920x1080 -- you can do that on a system-by-system basis in the **PER SYSTEM ADVANCED CONFIGURATION** screen.+Firstcheck your TV's scaling settings to ensure that it is currently set to "Stretch", "Full screen", "Expand", "Fill" or some terminology similar to that.
  
-Another use case is when you have a 1280x720 TV, for example, and you want to use bezels that are designed for 1920x1080. Batocera 5.27 can automatically resize the bezelsbut sometimes you need to force the **VIDEO MODE** to take your 1280x720 resolution.+If you've checked for that and the image is still tinythe best solution is to manually set the resolution to "1920x1080" (or "MAXIMUM 1920x1080") in **MAIN MENU** -> **GAMES SETTINGS** -> **VIDEO MODE** (you can instead do that on a system-by-system basis in the **PER SYSTEM ADVANCED CONFIGURATION** screen).
  
-If you absolutely want to use the 4K resolution for whatever reason (shaders looking better, you have 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.+{{ :es_video_mode.jpg?nolink&500 |ES's video mode screen shows list of available resolutions/their alternate modes.}}
  
 +Another use case is when you have a 1280x720 TV, for example, and you want to use bezels that are designed for 1920x1080. Batocera can automatically resize the bezels, but sometimes you need to force the **VIDEO MODE** to take your 1280x720 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...), set the **VIDEO MODE** to "3840x2160" (turn on the **STRETCH BEZEL** option to force the use of bezels designed for 1920x1080 on your 4K resolution, stretching bezels is not available in Batocera **5.27** and lower). As above, this is something you can do on a system-by-system basis instead.
  
-===== How does that work under the hood? =====+<WRAP center round important> 
 +Setting the resolution to force 4K has an impact on the emulation performance. 
 +</WRAP>
  
-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.+==== Everything is appearing too small in the file manager! ====
  
-1. Know what are the resolutions available on your system + TV combination by entering the command ''batocera-resolution listModes'':+If you use Batocera with a display that provides a high resolution like a 4K monitor, you might have trouble reading the text on the file manager (''[F1]'' on the system list on PC) or the configuration screens of a few emulators. You can change the default DPI settings by editing ''batocera.conf'' and look for the section
  
-   batocera-resolution listModes +  ## DPI 
-   0:2560x1440 60Hz +  ## Workaround when correct DPI setting is not detected 
-   1:2560x1080 60Hz +  ## if fonts are too small, uncomment next line 
-   2:1920x1080 60Hz +  #global.dpi=96
-   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 ''2560x1080'' for the emulators, I can add in my ''batocera.conf'': +===== When EmulationStation feels sluggish on a 4K TV =====
-   global.videomode=1+
  
-Emulators will then all select mode 1 = 2560x1080 from the list above as their screen resolution. If I want to select a specific resolution only for a specific emulatorI can do that with for instance ''n64.videomode=1''.+<WRAP center round info> 
 +This shouldn't be necessary for most TVs that provide proper EDID packetbut is here for those specific situations where they don't. 
 +</WRAP>
  
-Batocera 5.27 and later will automatically resize 1920x1080 bezels to ultrawide by adding black borders on the sides. It will also resize full HD 1080 bezels to HD-ready 720p.+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 Pi 4 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. You can force a particular resolution by [[:edit_boot_partition|editing]] it into ''/boot/batocera-boot.conf''.
  
-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:+==== Force 1080p as the maximum resolution despite what the EDID may report ====
  
-   cd /userdata # es need a PWD +In Batocera **v31** and higher, the ''max-1920x1080'' resolution is now an option available to select within the standard ''es.resolution'' key in ''/boot/batocera-boot.conf''. To force a maximum resolution of 1920x1080, [[:edit_boot_partition|open the batocera-boot.conf file]] and add/alter the following line:
-   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.+<code> 
 +es.resolution=max-1920x1080 
 +</code>
  
-4. If you ask for 4K 3840x2160 resolution, but with a bezel that is HD 1920x1080, by default Batocera will add black borders around the bezel. If you want your display to be full screen, you can either:+You can also force maximum resolution of 640x480 instead for really slow devices:
  
-  switch to a lower resolution (like 1920x1080+<code> 
-  add line ''mame.bezel_stretch=1'' in your ''batocera.conf'' for each emulator you want to stretchOr ''global.bezel_stretch=1'' if you want to enable stretching to your native 4K resolution. **WARNING** this has an impact on the emulation performance.+es.resolution=max-640x480 
 +</code> 
 + 
 +<WRAP center round important> 
 +For earlier versions of Batocera (**v29** and **v30**), this option cannot be selected in ''es.resolution'' (it will be ignored). Instead, you must use a different key in ''batocera-boot.conf'': 
 + 
 +<code> 
 +system.es.maxresolution=1920x1080 
 +</code> 
 +</WRAP> 
 + 
 +After this, Batocera will take the most suitable refresh rate for the maximum resolution specified and use that. 
 + 
 +==== Force any specific supported resolution in ES instead of the default maximum one ==== 
 + 
 +You can get the list of all supported resolution modes by running the following commands [[:access_the_batocera_via_ssh|via SSH]]: 
 + 
 +<code> 
 +export DISPLAY=:0.0 
 +batocera-resolution listModes 
 +</code> 
 + 
 +For example: 
 + 
 +{{:new_video_listoutputs.png|SSH session showing large list of video modes reported by the display's EDID.}} 
 + 
 +Any resolution listed here can be used in the ''es.resolution'' line in ''/boot/batocera-boot.conf''For example, [[:edit_boot_partition|open the batocera-boot.conf file]] and add ''es.resolution=1280x720.59.94'' to force ES to run at a resolution of 1280x720. 
 + 
 +===== My EDID is not working on my Raspberry Pi specifically ===== 
 + 
 +Certain Raspberry Pis seem to have a hard time parsing the display's EDID information correctly, to the point that it fails to even overwrite it using the above method. The Raspberry Pi can be forced to ignore the faulty EDID to allow Batocera to use whichever resolution it wants. 
 + 
 +Navigate to ''boot/config.txt'' and add the following lines: 
 + 
 +<code ini> 
 +hdmi_ignore_edid=0xa5000080 
 +hdmi_group=1 
 +</code> 
 + 
 +Then any HDMI mode can be used (even ones that your display won't work with, be careful!). Refer to [[https://www.raspberrypi.com/documentation/computers/config_txt.html#video-options|Raspberry Pi's official documentation]] for more information.
  
 ===== Display issues, when xrandr is your friend ===== ===== 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 section is for PC x86 and x86_64, not for SBCs like Raspberry Pi or Odroid, and mostly outdated as most cases should be handled with the section above.** 
 + 
 +This tutorial is useful if you have display issues, for instance if you need to rotate your screen, or use a lower refresh rate.  
 + 
 +<WRAP center round important> 
 +On Batocera **v30** and lower, Batocera would simply select the highest available resolution + refresh rate your display reports as supported. Obviously, when running Batocera on weak SBCs like the Raspberry Pi connected to a 4K UHD TV, this would cause visual stutter as the SBC isn't powerful enough to output a 4K resolution at 60 FPS. You would need to force a smaller resolution (like 1920x1080) to get better performance in this scenario. 
 + 
 +Fortunately, from Batocera **v31** and higher, Batocera will default to using the 1920x1080 resolution as its maximum (and if you have one of those rare displays that support 120Hz or higher, it will default to that too for silky-smooth menu navigation! But only in EmulationStation, in-game will still be 60Hz by default). You can switch to using a genuine 4K resolution by setting your **VIDEO MODE** in **GAME SETTINGS** to 3840x2160, though even this won't have much a visual difference for most retro-games. 
 +</WRAP>
  
-This tutorial is useful if you have display issues, for instance if you need to rotate your screen, or anything else.\\ +First of all, you need to [[:access_the_batocera_via_ssh|connect on your Batocera through SSH]]. Then run the following commands:
-\\ +
-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 [[access_the_batocera_via_ssh |this link]].+
  
-Okay, now you're connected on your Batocera, let's begin.\\ 
 <code> <code>
-# cp /etc/X11/xinit/xinitrc ~/.xinitrc +export DISPLAY=:0.0 
-export DISPLAY=:0.0 +xrandr
-xrandr+
 </code> </code>
  
-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 onOn a PC from EmulationStationpress ''F1'' and then launch a terminal from there (''F4'').+This will output your display's reported "supported resolutions" (the currently used refresh rate will be marked with an asterisk (*) on the line of the current resolution being used)This is an example with an old 4/3 screenbut this is the same principle for other screens:
  
-Search this section on xrandr :\\ 
 <code> <code>
 Screen 0: minimum 8 x 8, current 1366 x 768, maximum 32767 x 32767 Screen 0: minimum 8 x 8, current 1366 x 768, maximum 32767 x 32767
Line 109: Line 164:
 640x480 59.94  640x480 59.94 
 </code> </code>
-Here's the available display resolution for your screenThis is an example with an old 4/3 screenbut this is the same principle for other screens.\\ + 
-The current resolution is marked with "I want to change itso let's use //vi// - or any other text editor you are familiar with :\\+<WRAP center round help> 
 +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 display onOn PC from EmulationStation, press ''[F1]'' and then launch a terminal from there (''xterm'' from the **Applications** shortcut in the left sidebar). 
 +</WRAP> 
 + 
 +If you'd like to edit the display outputyou can add your modification in a script ''/userdata/system/custom-es-config'' that will be automatically invoked by ''/usr/bin/emulationstation-standalone''.  
 + 
 +You can edit the file from SSH by running the following: 
 <code> <code>
-# vi ~/.xinitrc+nano /userdata/system/custom-es-config
 </code> </code>
-You'll see a section with:+ 
 +and then saving that file to ''/userdata/system/custom-es-config'' with ''[Ctrl]'' + ''[O]''
 + 
 +<WRAP center round important> 
 +For Batocera **v31** and lower, this would be ''nano /userdata/system/.xinitrc'' instead. 
 +</WRAP> 
 + 
 +The most usual customisations are already described in ''/usr/bin/emulationstation-standalone''. If you browse the file and scroll down (using the arrow keys) to the following section: 
 <code> <code>
 ##################### #####################
 ## CUSTOMISATIONS ### ## CUSTOMISATIONS ###
-# to customize your display, you can copy this file to ~/.xinitrc and then modify it +# to customize your display, you can create the file /userdata/system/custom-es-config 
 +# including this kind of commands
 # rotate the screen # rotate the screen
 # xrandr -o left # xrandr -o left
Line 135: Line 205:
 </code> </code>
  
-Just uncomment the corresponding lineIn my caseI want to force the 64x480 modeso I just remove the first # character to:+You can just copy and paste the relevant part (without the first ''#'' character that indicates it is a comment)For example, to just force a resolution of 640x480create a ''/userdata/system/custom-es-config'' file with: 
 <code> <code>
-...+#!/bin/bash 
 # change the resolution # change the resolution
 xrandr -s 640x480 xrandr -s 640x480
 +</code>
  
 +To instead change the resolution to 1280x720 at 120Hz:
 +
 +<code>
 +#!/bin/bash
 # change the resolution and the Hz # change the resolution and the Hz
-...+xrandr -s 1280x720 -r 120
 </code> </code>
-Let's save and quit ([Esc]:wq for //vi//).\\ + 
-Actually, your Batocera's display isn't in full screen yetYou must see it only partially, so you have to enter the following commands into your SSH session:\\+Save the file with ''[Ctrl]'' + ''[S]'' and quit with ''[Ctrl]'' + ''[Q]''
 + 
 + 
 + 
 +<WRAP center round important> 
 +In Batocera **v31** and lower, the original file was at ''/etc/X11/xinit/xinitrc'' and the userdata copy was at ''/userdata/system/.xinitrc'' insteadThere was not such a call from ''emulationstation-standalone'' so you would need to copy the file first with a command like: 
 <code> <code>
-# exec emulationstation --windowed+cp /etc/X11/xinit/xinitrc /userdata/system/.xinitrc
 </code> </code>
-Then restart Emulstation :\\+</WRAP> 
 + 
 + 
 +EmulationStation by default runs in full-screen, and may use the old full-screen resolution even through restarts, cutting off a part of its display. For testing purposes, you can temporarily use windowed mode for the current session with: 
 <code> <code>
-# /etc/init.d/S31emulationstation stop +exec emulationstation --windowed
-# /etc/init.d/S31emulationstation start+
 </code> </code>
-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.\\ +Then restart EmulationStation with the following commands to test your new resolution: 
-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:\\+
 <code> <code>
-# cp ~/.xinitrc /etc/X11/xinit/xinitrc +/etc/init.d/S31emulationstation stop 
-# batocera-save-overlay+/etc/init.d/S31emulationstation start
 </code> </code>
-Now, reboot your Batocera system, the display resolution should be good.\\ + 
-Also, ''xrandr'' can do screen rotationvery useful for old vertical screen arcade machines !\\ +If you were to reboot Batocera at this pointyou'll find that all the settings you just created have been lostIn order to make these settings permanentyou must save the [[:modify_the_system_while_it_s_running|overlay]] with the following command before rebooting: 
-\\ + 
-Hope this was easy for all.\\+<code> 
 +batocera-save-overlay 
 +</code> 
 + 
 +<WRAP center round tip> 
 +''xrandr'' can do screen rotationvery useful for old vertical screen arcade machines! 
 +</WRAP> 
 + 
 +Hope this was easy for all. 
 + 
 +==== My TV isn't respecting that! ==== 
 + 
 +Another method to manually set your output resolution is by utilizing a custom boot script. Replace ''<output>'' with your current output, ''<widthxheight>'' with your intended resolution and ''<refresh-rate>'' with your intended refresh rate in the following file and place it into ''/userdata/system/custom.sh'': 
 + 
 +<file bash custom.sh> 
 +#!/bin/bash 
 + 
 +if test -z "${DISPLAY}" 
 +then 
 +    export DISPLAY=:0.0 
 +fi 
 + 
 +## Manually set resolution 
 +xrandr --output <output> --mode <widthxheight> --rate <refresh-rate> 
 +</file> 
 + 
 +For example: ''%%xrandr --output HDMI-0 --mode 1920x1080 --rate 60%%'' 
 + 
 +Just make sure you remember that you've done this in the future, as it will override any other settings you may have set via any of the above methods. 
 + 
 + 
 +===== What's the current X.Org X Server version installed? ===== 
 + 
 +The current version of Xorg Batocera is using can be checked by running the following: 
 + 
 +<code bash> 
 +head /var/log/Xorg.0.log | grep "X.Org X Server" 
 +</code> 
  • display_issues.1605976246.txt.gz
  • Last modified: 3 years ago
  • by lbrpdx