Lakka Raspberry Pi 4


Composite video mode options

  • Best Linux Distros For Raspberry Pi 1. MATE is hands down one of the best desktop environments for old hardware. Since it doesn’t consume many system resources, combined with the.
  • Lakka not booting on new Raspberry Pi 4 8GB. Posted by 10 months ago. Lakka not booting on new Raspberry Pi 4 8GB. Hi, I recently bought the new 8GB model of the raspbi 4. I know this shouldn’t help with emulation, but I might use it for other tasks as well.


The sdtv_mode command defines the TV standard used for composite video output. On the original Raspberry Pi, composite video is output on the RCA socket. On other Raspberry Pi's, except for Pi Zero and Compute Module, composite video is output along with sound on the 4 pole TRRS ('headphone') socket. On the Pi Zero, there is an unpopulated header labelled 'TV' which outputs composite video. On the Compute Module, composite video is available via the TVDAC pin. The default value of sdtv_mode is 0.

Note that there is a pixel clock limit.The highest supported mode on models prior to the Raspberry Pi 4 is 1920x1200 at 60Hz with reduced blanking, whilst the Raspberry Pi 4 can support up to 4096x2160 (known as 4k) at 60Hz. Also note that if you are using both HDMI ports of the Raspberry Pi 4 for 4k output, then you are limited to 30Hz on both. Lakka 2.3.2 Jan 2020RetroArch 1.8.4LinkDownload Lakka for Raspberry Pi 4 400MBHDMI fix config.txt add:hdmiignoreedid=0xa5000080Overclock add:overvoltag.

0Normal NTSC
1Japanese version of NTSC – no pedestal
2Normal PAL
3Brazilian version of PAL – 525/60 rather than 625/50, different subcarrier
16Progressive scan NTSC
18Progressive scan PAL


The sdtv_aspect command defines the aspect ratio for composite video output. The default value is 1.



Setting sdtv_disable_colourburst to 1 disables colourburst on composite video output. The picture will be displayed in monochrome, but it may appear sharper.

enable_tvout (Pi 4B only)

On the Raspberry Pi 4, composite output is disabled by default, due to the way the internal clocks are interrelated and allocated. Because composite video requires a very specific clock, setting that clock to the required speed on the Pi 4 means that other clocks connected to it are detrimentally affected, which slightly slows down the entire system. Since composite video is a less commonly used function, we decided to disable it by default to prevent this system slowdown.

To enable composite output, use the enable_tvout=1 option. As described above, this will detrimentally affect performance to a small degree.

On older Pi models, the composite behaviour remains the same.

HDMI mode options

Note for Raspberry Pi4B users: Because the Raspberry Pi 4B has two HDMI ports, some HDMI commands can be applied to either port. You can use the syntax <command>:<port>, where port is 0 or 1, to specify which port the setting should apply to. If no port is specified, the default is 0. If you specify a port number on a command that does not require a port number, the port is ignored. Further details on the syntax and alternatives mechanisms can be found in the HDMI section on the conditionals page of the documentation.

In order to support dual 4k displays, the Raspberrry Pi 4 has updated video hardware, which imposes minor restrictions on the modes supported. Please seehere for more details.


Setting hdmi_safe to 1 will lead to 'safe mode' settings being used to try to boot with maximum HDMI compatibility. This is the same as setting the following parameters:


Setting hdmi_ignore_edid to 0xa5000080 enables the ignoring of EDID/display data if your display does not have an accurate EDID. It requires this unusual value to ensure that it is not triggered accidentally.


Setting hdmi_edid_file to 1 will cause the GPU to read EDID data from the edid.dat file, located in the boot partition, instead of reading it from the monitor. More information is available here.


On the Raspberry Pi 4B, you can use the hdmi_edid_filename command to specify the filename of the EDID file to use, and also to specify which port the file is to be applied to. This also requires hdmi_edid_file=1 to enable EDID files.

For example:


Setting hdmi_force_edid_audio to 1 pretends that all audio formats are supported by the display, allowing passthrough of DTS/AC3 even when this is not reported as supported.


Setting hdmi_ignore_edid_audio to 1 pretends that all audio formats are unsupported by the display. This means ALSA will default to the analogue audio (headphone) jack.


Setting hdmi_force_edid_3d to 1 pretends that all CEA modes support 3D, even when the EDID does not indicate support for this.


Setting hdmi_ignore_cec_init to 1 will stop the initial active source message being sent during bootup. This prevents a CEC-enabled TV from coming out of standby and channel-switching when you are rebooting your Raspberry Pi.


Setting hdmi_ignore_cec to 1 pretends that CEC is not supported at all by the TV. No CEC functions will be supported.


The cec_osd_name command sets the initial CEC name of the device. The default is Raspberry Pi.


The hdmi_pixel_encoding command forces the pixel encoding mode. By default, it will use the mode requested from the EDID, so you shouldn't need to change it.

0default (RGB limited for CEA, RGB full for DMT)
1RGB limited (16-235)
2RGB full (0-255)
3YCbCr limited (16-235)
4YCbCr full (0-255)


The pixel frequency is used by the firmware and KMS to filter HDMI modes. Note, this is not the same as the frame rate. It specifies the maximum frequency that a valid mode can have, thereby culling out higher frequency modes. The frequencies for all the HDMI modes can he found on the Wiki page here, section 'CEA/EIA-861 standard resolutions and timings'.

So for example, if you wish to disable all 4K modes, you could specify a maximum frequency of 200000000, since all 4K modes have frequencies greater than this.


The hdmi_blanking command controls what happens when the operating system asks for the display to be put into standby mode, using DPMS, to save power. If this option is not set or set to 0, the HDMI output is blanked but not switched off. In order to mimic the behaviour of other computers, you can set the HDMI output to switch off as well by setting this option to 1: the attached display will go into a low power standby mode.

On the Raspberry Pi 4, setting hdmi_blanking=1 will not cause the HDMI output to be switched off, since this feature has not yet been implemented.

NOTE: This feature may cause issues when using applications which don't use the framebuffer, such as omxplayer.

0HDMI output will be blanked
1HDMI output will be switched off and blanked


The hdmi_drive command allows you to choose between HDMI and DVI output modes.

1Normal DVI mode (no sound)
2Normal HDMI mode (sound will be sent if supported and enabled)


Configures the signal strength of the HDMI interface. The minimum value is 0 and the maximum is 11.

The default value for the original Model B and A is 2. The default value for the Model B+ and all later models is 5.

If you are seeing HDMI issues (speckling, interference) then try 7. Very long HDMI cables may need up to 11, but values this high should not be used unless absolutely necessary.

This option is ignored on the Raspberry Pi 4.


The hdmi_group command defines the HDMI output group to be either CEA (Consumer Electronics Association, the standard typically used by TVs) or DMT (Display Monitor Timings, the standard typically used by monitors). This setting should be used in conjunction with hdmi_mode.

0Auto-detect from EDID


Together with hdmi_group, hdmi_mode defines the HDMI output format. Format mode numbers are derived from the CTA specification found here

To set a custom display mode not listed here, see this thread.

Note that not all modes are available on all models.

These values are valid if hdmi_group=1 (CEA):

hdmi_modeResolutionFrequencyScreen AspectNotes
1VGA (640x480)60Hz4:3
10480i60Hz4:3pixel quadrupling
11480i60Hz16:9pixel quadrupling
12240p60Hz4:3pixel quadrupling
13240p60Hz16:9pixel quadrupling
14480p60Hz4:3pixel doubling
15480p60Hz16:9pixel doubling
25576i50Hz4:3pixel quadrupling
26576i50Hz16:9pixel quadrupling
27288p50Hz4:3pixel quadrupling
28288p50Hz16:9pixel quadrupling
29576p50Hz4:3pixel doubling
30576p50Hz16:9pixel doubling
35480p60Hz4:3pixel quadrupling
36480p60Hz16:9pixel quadrupling
37576p50Hz4:3pixel quadrupling
38576p50Hz16:9pixel quadrupling
391080i50Hz16:9reduced blanking
66720p25Hz64:27Pi 4
67720p30Hz64:27Pi 4
68720p50Hz64:27Pi 4
69720p60Hz64:27Pi 4
70720p100Hz64:27Pi 4
71720p120Hz64:27Pi 4
721080p24Hz64:27Pi 4
731080p25Hz64:27Pi 4
741080p30Hz64:27Pi 4
751080p50Hz64:27Pi 4
761080p60Hz64:27Pi 4
771080p100Hz64:27Pi 4
781080p120Hz64:27Pi 4
791680x72024Hz64:27Pi 4
801680x72025z64:27Pi 4
811680x72030Hz64:27Pi 4
821680x72050Hz64:27Pi 4
831680x72060Hz64:27Pi 4
841680x720100Hz64:27Pi 4
851680x720120Hz64:27Pi 4
862560x72024Hz64:27Pi 4
872560x72025Hz64:27Pi 4
882560x72030Hz64:27Pi 4
892560x72050Hz64:27Pi 4
902560x72060Hz64:27Pi 4
912560x720100Hz64:27Pi 4
922560x720120Hz64:27Pi 4
932160p24Hz16:9Pi 4
942160p25Hz16:9Pi 4
952160p30Hz16:9Pi 4
962160p50Hz16:9Pi 4
972160p60Hz16:9Pi 4
984096x216024Hz256:135Pi 4
994096x216025Hz256:135Pi 4
1004096x216030Hz256:135Pi 4
1014096x216050Hz256:135Pi 4
1024096x216060Hz256:135Pi 4
1032160p24Hz64:27Pi 4
1042160p25Hz64:27Pi 4
1052160p30Hz64:27Pi 4
1062160p50Hz64:27Pi 4
1072160p60Hz64:27Pi 4

Pixel doubling and quadrupling indicates a higher clock rate, with each pixel repeated two or four times respectively.

These values are valid if hdmi_group=2 (DMT):

hdmi_modeResolutionFrequencyScreen AspectNotes
151024x76843Hz4:3incompatible with the Raspberry Pi
221280x76860Hz15:9reduced blanking
261280x768120Hz15:9reduced blanking
271280x8006016:10reduced blanking
311280x800120Hz16:10reduced blanking
341280x960120Hz4:3reduced blanking
381280x1024120Hz5:4reduced blanking
401360x768120Hz16:9reduced blanking
411400x105060Hz4:3reduced blanking
451400x1050120Hz4:3reduced blanking
461440x90060Hz16:10reduced blanking
501440x900120Hz16:10reduced blanking
561600x1200120Hz4:3reduced blanking
571680x105060Hz16:10reduced blanking
611680x1050120Hz16:10reduced blanking
641792x1344120Hz4:3reduced blanking
671856x1392120Hz4:3reduced blanking
681920x120060Hz16:10reduced blanking
721920x1200120Hz16:10reduced blanking
751920x1440120Hz4:3reduced blanking
762560x160060Hz16:10reduced blanking
802560x1600120Hz16:10reduced blanking
811366x76860Hz16:9NOT on Pi4
831600x90060Hz16:9reduced blanking
842048x115260Hz16:9reduced blanking
861366x76860Hz16:9reduced blanking

Note that there is a pixel clock limit.The highest supported mode on models prior to the Raspberry Pi 4 is 1920x1200 at 60Hz with reduced blanking, whilst the Raspberry Pi 4 can support up to 4096x2160 (known as 4k) at 60Hz. Also note that if you are using both HDMI ports of the Raspberry Pi 4 for 4k output, then you are limited to 30Hz on both.


This allows setting of raw HDMI timing values for a custom mode, selected using hdmi_group=2 and hdmi_mode=87.

* The aspect ratio can be set to one of eight values (choose the closest for your screen):


Setting to 1 will remove all other modes except the ones specified by hdmi_mode and hdmi_group from the internal list, meaning they will not appear in any enumerated lists of modes. This option may help if a display seems to be ignoring the hdmi_mode and hdmi_group settings.


Forces the EDID content type to a specific value.

The options are:

Lakka Raspberry Pi 4
  • 0 = EDID_ContentType_NODATA, content type none.
  • 1 = EDID_ContentType_Graphics, content type graphics, ITC must be set to 1
  • 2 = EDID_ContentType_Photo, content type photo
  • 3 = EDID_ContentType_Cinema, content type cinema
  • 4 = EDID_ContentType_Game, content type game

hdmi_enable_4kp60 (Pi 4B only)

By default, when connected to a 4K monitor, the Raspberry Pi 4B will select a 30hz refresh rate. Use this option to allow selection of 60Hz refresh rates. Note, this will increase power consumption and increase the temperature of the Raspberry Pi. It is not possible to output 4Kp60 on both micro HDMI ports simultaneously.

Which values are valid for my monitor?

Your HDMI monitor may only support a limited set of formats. To find out which formats are supported, use the following method:

  1. Set the output format to VGA 60Hz (hdmi_group=1 and hdmi_mode=1) and boot up your Raspberry Pi
  2. Enter the following command to give a list of CEA-supported modes: /opt/vc/bin/tvservice -m CEA
  3. Enter the following command to give a list of DMT-supported modes: /opt/vc/bin/tvservice -m DMT
  4. Enter the following command to show your current state: /opt/vc/bin/tvservice -s
  5. Enter the following commands to dump more detailed information from your monitor: /opt/vc/bin/tvservice -d edid.dat; /opt/vc/bin/edidparser edid.dat

The edid.dat should also be provided when troubleshooting problems with the default HDMI mode.

Custom mode

If your monitor requires a mode that is not in one of the tables above, then it's possible to define a custom CVT mode for it instead:

width(required)width in pixels
height(required)height in pixels
framerate(required)framerate in Hz
aspect3aspect ratio 1=4:3, 2=14:9, 3=16:9, 4=5:4, 5=16:10, 6=15:9
margins00=margins disabled, 1=margins enabled
interlace00=progressive, 1=interlaced
rb00=normal, 1=reduced blanking

Fields at the end can be omitted to use the default values.

Note that this simply creates the mode (group 2 mode 87). In order to make the Pi use this by default, you must add some additional settings. For example, the following selects an 800 × 480 resolution and enables audio drive:

This may not work if your monitor does not support standard CVT timings.

LCD display/touchscreen options


By default the Raspberry Pi LCD display is used when it is detected on the I2C bus. ignore_lcd=1 will skip this detection phase, and therefore the LCD display will not be used.


If a Raspberry Pi DSI LCD is detected it will be used as the default display and will show the framebuffer. Setting display_default_lcd=0 will ensure the LCD is not the default display, which usually implies the HDMI output will be the default. The LCD can still be used by choosing its display number from supported applications, for example, omxplayer.


Specify the framerate of the Raspberry Pi LCD display, in Hertz/fps. Defaults to 60Hz.


This flips the display using the LCD's inbuilt flip functionality, which is a cheaper operation that using the GPU-based rotate operation.

For example, lcd_rotate=2 will compensate for an upside down display.


Enable/disable the touchscreen.

disable_touchscreen=1 will disable the touchscreen on the official Raspberry Pi LCD display.


Enable LCD displays attached to the DPI GPIOs. This is to allow the use of third-party LCD displays using the parallel display interface.


dpi_group, dpi_mode, dpi_output_format

The dpi_group and dpi_mode config.txt parameters are used to set either predetermined modes (DMT or CEA modes as used by HDMI above). A user can generate custom modes in much the same way as for HDMI (see dpi_timings section).

dpi_output_format is a bitmask specifying various parameters used to set up the display format.

More details on using the DPI modes and the output format can be found here.


This allows setting of raw DPI timing values for a custom mode, selected using dpi_group=2 and dpi_mode=87.

* The aspect ratio can be set to one of eight values (choose the closest for your screen):

Generic display options


Setting hdmi_force_hotplug to 1 pretends that the HDMI hotplug signal is asserted, so it appears that a HDMI display is attached. In other words, HDMI output mode will be used, even if no HDMI monitor is detected.


Setting hdmi_ignore_hotplug to 1 pretends that the HDMI hotplug signal is not asserted, so it appears that a HDMI display is not attached. In other words, composite output mode will be used, even if an HDMI monitor is detected.


Set disable_overscan to 1 to disable the default values of overscan that is set by the firmware. The default value of overscan for the left, right, top, and bottom edges is 48 for HD CEA modes, 32 for SD CEA modes, and 0 for DMT modes. The default value for disable_overscan is 0.

NOTE: any further additional overscan options such as overscan_scale or overscan edges can still be applied after this option.


The overscan_left command specifies the number of pixels to add to the firmware default value of overscan on the left edge of the screen. The default value is 0.

Increase this value if the text flows off the left edge of the screen; decrease it if there is a black border between the left edge of the screen and the text.


The overscan_right command specifies the number of pixels to add to the firmware default value of overscan on the right edge of the screen. The default value is 0.

Increase this value if the text flows off the right edge of the screen; decrease it if there is a black border between the right edge of the screen and the text.


The overscan_top command specifies the number of pixels to add to the firmware default value of overscan on the top edge of the screen. The default value is 0.

Increase this value if the text flows off the top edge of the screen; decrease it if there is a black border between the top edge of the screen and the text.


The overscan_bottom command specifies the number of pixels to add to the firmware default value of overscan on the bottom edge of the screen. The default value is 0.

Increase this value if the text flows off the bottom edge of the screen; decrease it if there is a black border between the bottom edge of the screen and the text.


Raspberry Pi 4 Lakka Performance

Set overscan_scale to 1 to force any non-framebuffer layers to conform to the overscan settings. The default value is 0.

NOTE: this feature is generally not recommended: it can reduce image quality because all layers on the display will be scaled by the GPU. Disabling overscan on the display itself is the recommended option to avoid images being scaled twice (by the GPU and the display).


The framebuffer_width command specifies the console framebuffer width in pixels. The default is the display width minus the total horizontal overscan.


The framebuffer_height command specifies the console framebuffer height in pixels. The default is the display height minus the total vertical overscan.C4

max_framebuffer_height, max_framebuffer_width

Specifies the maximum dimensions that the internal frame buffer is allowed to be.

Lakka Raspberry Pi 4 N64


Use framebuffer_depth to specify the console framebuffer depth in bits per pixel. The default value is 16.

88bit framebufferDefault RGB palette makes screen unreadable
1616bit framebuffer
2424bit framebufferMay result in a corrupted display
3232bit framebufferMay need to be used in conjunction with framebuffer_ignore_alpha=1


Set framebuffer_ignore_alpha to 1 to disable the alpha channel. Can help with the display of a 32bit framebuffer_depth.


In a system with multiple displays, using the legacy (pre-KMS) graphics driver, this forces a specific internal display device to be the first Linux framebuffer (i.e./dev/fb0).

The options that can be set are:

Main LCD0
Secondary LCD1


This configuration entry sets the maximum number of firmware framebuffers that can be created. Valid options are 0,1, and 2. By default on devices before the Pi4 this is set to 1, so will need to be increased to 2 when using more than one display, for example HDMI and a DSI or DPI display. The Raspberry Pi4 configuration sets this to 2 by default as it has two HDMI ports.

Generally in most cases it is safe to set this to 2, as framebuffers will only be created when an attached device is actually detected.

Setting this value to 0 can be used to reduce memory requirements when used in headless mode as it will prevent any framebuffers from being allocated.


The test_mode command displays a test image and sound during boot (over the composite video and analogue audio outputs only) for the given number of seconds, before continuing to boot the OS as normal. This is used as a manufacturing test; the default value is 0.


Use display_hdmi_rotate to rotate or flip the HDMI display orientation. The default value is 0.

0no rotation
1rotate 90 degrees clockwise
2rotate 180 degrees clockwise
3rotate 270 degrees clockwise
0x10000horizontal flip
0x20000vertical flip

Note that the 90 and 270 degree rotation options require additional memory on the GPU, so these will not work with the 16MB GPU split.

If using the VC4 FKMS V3D driver (this is the default on the Raspberry Pi 4), then 90 and 270 degree rotations are not supported. The Screen Configuration utility provides display rotations for this driver. See this page for more information.


For the legacy graphics driver (default on models prior to the Pi4), use display_lcd_rotate to rotate or flip the LCD orientation. Parameters are the same as display_hdmi_rotate. See also lcd_rotate.


display_rotate is deprecated in the latest firmware but has been retained for backwards compatibility. Please use display_lcd_rotate and display_hdmi_rotate instead.

Use display_rotate to rotate or flip the screen orientation. Parameters are the same as display_hdmi_rotate.


By default, the firmware parses the EDID of any HDMI attached display, picks an appropriate video mode, then passes the resolution and frame rate of the mode, along with overscan parameters, to the Linux kernel via settings on the kernel command line. In rare circumstances, this can have the effect of choosing a mode that is not in the EDID, and may be incompatible with the device. You can use disable_fw_kms_setup=1 to disable the passing of these parameters and avoid this problem. The Linux video mode system (KMS) will then parse the EDID itself and pick an appropriate mode.

Other options


Forces dispmanx composition to be done offline in two offscreen framebuffers. This can allow more dispmanx elements to be composited, but is slower and may limit screen framerate to typically 30fps.

This article uses content from the eLinux wiki page RPiconfig, which is shared under the Creative Commons Attribution-ShareAlike 3.0 Unported license

Under most circumstances, the only steps required are:

  1. Enable bluetooth in Lakka → Services
  2. Plug your controller
  3. Let the LEDs blink for a while
  4. Unplug your controller
  5. Lakka should now pair the controller automatically.

If automatic pairing does not succeed, please follow the following guide. All the following commands have to be executed on your Lakka box using the Command Line Interface

Enabling bluetooth

Enable and start bluetooth service

Check that the service is active

Pairing the controller

Launch bluetoothctl

A bluetooth prompt will appear. Type the following:

Dualshock 4

The Dualshock 4 is a bit different from the Dualshock 3 in that you should press the “Share” and “PS Home” button at the same time to get it into detection mode. You do not need to have controller connected via USB. Now press the two buttons and the led should start blinking rapidly. You will see output in your terminal similar to this:

Now follow the steps under Authorize the Dualshock Controller.

If the controller led stops blinking (meaning you took too long), just press the “Share” and “PS Home” buttons again.

Dualshock 3

Connect the DualShock 3 to the system using a USB cable and press the button round Playstation button. Watch for connection and disconnection messages and copy the device address (something like 38:C0:96:56:4D:AA). You will see a prompt that asks you to authorize the device:

Authorize the Dualshock controller

Authorize it by typing ‘yes’. Disconnect the USB cable from the DualShock 3. Hit the Playstation button again and while it blinks type the following:

Keep trying this command if you see device not available (it will loop between connected and disconnected) until you see something like the following

I usually keep pressing up + enter (repeating the last command)

Now trust the device

You’re done.

Next time you hit the Playstation button it will connect without asking anything else.

Common issues

  • Make sure the battery on the controller is decently charged.

  • If the controller had been previously paired with another device, you might need to press the reset button with a paper clip.

  • Make sure you’re using a working (and data-carrying) USB cable. You can assess that by following these steps:
    • Plug in the cable and connect the controller
    • Type in dmesg
    • See the following (or similar) output at the bottom of the result:[121113.389793] input: Sony PLAYSTATION(R)3 Controller as /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/0003:054C:0268.0048/input/input61[121113.390269] sony 0003:054C:0268.0048: input,hiddev0,hidraw2: USB HID v1.11 Joystick [Sony PLAYSTATION(R)3 Controller] on usb-0000:00:14.0-2/input0
  • If after following these steps you don’t get the controller to connect, or the connection is unreliable (ex. only connected once). Make sure you are using a genuing controller. The market is flooded with high quality fakes. It’s difficult to tell a fake apart from the original one without having them side by side. Some giveaways are:
    • Rattling inside
    • Relatively loud clicks when pressing the nubs
    • Rough edges
    • Spelling mistake on the back label (However, having a different label design isn’t a telltale sign of a counterfeit pad)

Configuring the controller

If the autoconfiguration does not work, you can manually configure your controller via the Input menu within Lakka’s settings.