diff --git a/meta-ohos-core/recipes-graphics/wayland/weston-init.bbappend b/meta-ohos-core/recipes-graphics/wayland/weston-init.bbappend
new file mode 100644
index 0000000000000000000000000000000000000000..c98e752c87b5a3fb321e66f876335158f70435d9
--- /dev/null
+++ b/meta-ohos-core/recipes-graphics/wayland/weston-init.bbappend
@@ -0,0 +1,36 @@
+WESTON_DYNAMIC_INI ?= "0"
+WESTON_INI_PATH ?= "etc/xdg/weston/weston.ini"
+
+WESTON_INI_NO_TOOLBAR ?= "0"
+
+python generate_dynamic_ini() {
+    import configparser
+
+    # Avoid everything if dynamic configuration is not requested .
+    do = d.getVar('WESTON_DYNAMIC_INI', True)
+    if do != '1':
+        bb.note("No dynamic weston.ini configuration requested.")
+        return
+    bb.note("Dynamic weston.ini configuration requested.")
+
+    config = configparser.ConfigParser()
+    ini_path = os.path.join(d.getVar('D', True), d.getVar('WESTON_INI_PATH', True))
+
+    # Prepopulate an existing configuration.
+    if os.path.exists(ini_path):
+        if not os.path.isfile(ini_path):
+            bb.fatal("weston.ini already exists and it is not a regular file")
+        config.read(ini_path)
+
+    # Handle no toolbar configuration.
+    if d.getVar('WESTON_INI_NO_TOOLBAR', True) == '1':
+        bb.note('Handling WESTON_INI_NO_TOOLBAR.')
+        if 'shell' not in config.sections():
+            config.add_section('shell')
+        config.set('shell', 'panel-position', 'none')
+
+    # Finally, write the configuration. Keep this at the end.
+    with open(ini_path, 'w') as init_path_fo:
+        config.write(init_path_fo, space_around_delimiters=False)
+}
+do_install[postfuncs] += "generate_dynamic_ini"