diff --git a/editions/kde-bigscreen b/editions/kde-bigscreen
index efdcd0ecaae1f2c95aa6933639a4239f8a4bff90..8a461b35482bf7e10ef5a3b51c65f0080892df9b 100644
--- a/editions/kde-bigscreen
+++ b/editions/kde-bigscreen
@@ -69,6 +69,7 @@ mycroft-gui
 >rpi4 libcec-rpi-fkms
 python
 python-cec
+python-psutil
 python-uinput
 python-pyqt5
 dbus-python
diff --git a/overlays/kde-bigscreen/etc/skel/.config/autostart-scripts/autoResolution.py b/overlays/kde-bigscreen/etc/skel/.config/autostart-scripts/autoResolution.py
new file mode 100755
index 0000000000000000000000000000000000000000..681d848f446262e0384e09554d9bf96a97ee314b
--- /dev/null
+++ b/overlays/kde-bigscreen/etc/skel/.config/autostart-scripts/autoResolution.py
@@ -0,0 +1,137 @@
+#!/usr/bin/python3
+
+import sys
+import os
+import json
+import time
+import subprocess
+import dbus
+from PyQt5 import QtCore, QtDBus
+
+class AutoResolution():
+
+    def __init__(self):
+        self.item = "org.kde.KScreen"
+        self.path = "/backend"
+        self.interface = "org.kde.kscreen.Backend"
+        self.logFilePath = "/tmp/logresolution.txt"
+        self.supportedDisplayModeList = []
+        self.supportedDisplayModeList.clear()
+        #self.check_if_target_reached() - does not currently work
+        self.get_x_supported_modes()
+
+    def check_if_target_reached(self):
+        logFile = open('/tmp/resolutionTarget.txt', 'a')
+        try:
+            target_service = subprocess.check_output(["systemctl", "status", "graphical.target"])
+            target_output = target_service.decode("utf-8")
+        except subprocess.CalledProcessError as e:
+            target_output = e.output.decode("utf-8")
+
+        target_out_split = target_output.split("\n")
+        target_extract_active = target_out_split[2].split(" ")
+        target_isActive = target_extract_active[4]
+        if target_isActive == "active":
+            print("Got Active Target", file=logFile)
+            logFile.close()
+            self.get_session_type()
+        else:
+            print("Active Target Not Reached", file=logFile)
+            time.sleep(5)
+            self.check_if_target_reached()
+
+    def get_session_type(self):
+        logFile2 = open('/tmp/sessionType.txt', 'a')
+        print("In Get Session Type", file=logFile2)
+        try:
+            sessionType = subprocess.check_output(["echo", "-n", os.environ["XDG_SESSION_TYPE"]]).decode("utf-8")
+        except subprocess.CalledProcessError as e:
+            print(e.output.decode("utf-8"), file=logFile2)
+        print(sessionType, file=logFile2)
+        if sessionType == "wayland":
+            print("found wayland", file=logFile2)
+            self.get_wayland_supported_modes()
+        else:
+            print("found x", file=logFile2)
+            self.get_x_supported_modes()
+
+    def get_session_type_xrandr(self):
+        # Try fetching session type even earlier than graphical target
+        get_session = subprocess.check_output(["xrandr"])
+        get_output = get_session.decode("utf-8")
+        get_output_string = get_output.split("\n")
+        get_output_string_split = get_output_string[2].split(" ")
+        sessionType = get_output_string_split[0]
+        if sessionType == "XWAYLAND0":
+            print("found wayland", file=logFile2)
+            self.get_wayland_supported_modes()
+        else:
+            print("found x", file=logFile2)
+            self.get_x_supported_modes()
+
+    def get_session_type_dbus(self):
+        # Requires watch on dbus-org.freedesktop.login1 service
+        bus = dbus.SystemBus()
+        sesObj = bus.get_object('org.freedesktop.login1', '/org/freedesktop/login1/session/self')
+        iface = dbus.Interface(sesObj, dbus_interface="org.freedesktop.DBus.Properties")
+        iface_m = iface.get_dbus_method("Get", dbus_interface=None)
+        sessionType = iface_m("org.freedesktop.login1.Session", "Type")
+        print(sessionType)
+        if sessionType == "wayland":
+            print("found wayland", file=logFile2)
+            self.get_wayland_supported_modes()
+        else:
+            print("found x", file=logFile2)
+            self.get_x_supported_modes()
+
+    def get_x_supported_modes(self):
+        bus = QtDBus.QDBusConnection.sessionBus()
+        kscreenObject = QtDBus.QDBusInterface(self.item, self.path, self.interface, bus)
+        results = kscreenObject.call("getConfig").arguments()
+        for x in results[0]['outputs']:
+            if x['type'] == 6.0:
+               displayID = results[0]['outputs'][0]['id']
+               displayWidth = results[0]['outputs'][0]['size']['width']
+               displayHeight = results[0]['outputs'][0]['size']['height']
+               displayPrefMode = results[0]['outputs'][0]['preferredModes']
+               displayModes = results[0]['outputs'][0]['modes']
+               for modes in displayModes:
+                   if modes['size']['width'] == 1920 and modes['size']['height'] == 1080:
+                       self.supportedDisplayModeList.append(modes)
+               self.set_display_size(displayID, displayWidth, displayHeight)
+
+    def get_wayland_supported_modes(self):
+        logFileWayland = open('/tmp/setWaylandResolution.txt', 'a')
+        print("In Get Wayland Supported Modes", file=logFileWayland)
+        try:
+            waylandSessionObject = subprocess.check_output(["kscreen-doctor", "-o", "-j"]).decode("utf-8")
+            print(waylandSessionObject, file=logFileWayland)
+        except subprocess.CalledProcessError as e:
+            print(e.output, file=logFileWayland)
+        begin, end = waylandSessionObject.find('{'), waylandSessionObject.rfind('}')
+        filtered_waylandSessionObject = waylandSessionObject[begin: end+1]
+        print(filtered_waylandSessionObject, file=logFileWayland)
+        results = json.loads(filtered_waylandSessionObject)
+        for x in results['outputs']:
+            if x['type'] == 6.0:
+               displayID = results['outputs'][0]['id']
+               displayWidth = results['screen']['currentSize']['width']
+               displayHeight = results['screen']['currentSize']['height']
+               displayModes = results['outputs'][0]['modes']
+               for modes in displayModes:
+                   if modes['size']['width'] == 1920 and modes['size']['height'] == 1080:
+                       self.supportedDisplayModeList.append(modes)
+                       print(modes, file=logFileWayland)
+               self.set_display_size(displayID, displayWidth, displayHeight)
+
+    def set_display_size(self, displayId, displayWidth, displayHeight):
+        if displayHeight > 1080 and displayWidth > 1920:
+           setDisplayMode = self.supportedDisplayModeList[0]['id']
+           setDisplayId = int(displayId)
+           setDisplayArgs = "output.{0}.mode.{1}".format(setDisplayId, setDisplayMode)
+           setDisplayConfig = subprocess.call(["kscreen-doctor", setDisplayArgs])
+           bus = dbus.SessionBus()
+           remote_object = bus.get_object("org.kde.bigscreen", "/Plugin")
+           remote_object.autoResolutionChanged(dbus_interface = "org.kde.bigscreen")
+
+autoResolution = AutoResolution()