We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Fake screens
[This part of the documentation](https://github.com/qtile/qtile/blob/ed7198a5fb5438110f81a8c6ecc0e6289676c057/libqtile/config.py#L231-L232) mentions "fake screens", and the term is also found [in the code](https://github.com/qtile/qtile/blob/7c2a88fba68bdcf6f25dfb5494a74afc475d674e/libqtile/manager.py#L357-L373).

What are they? How to use them?

We need to document answers to those questions, and then make sure they work correctly.

See #1192 for this last point.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `libqtile/confreader.py`
Content:
```
1 # coding: utf-8
2 #
3 # Copyright (c) 2008, Aldo Cortesi <aldo@corte.si>
4 # Copyright (c) 2011, Andrew Grigorev <andrew@ei-grad.ru>
5 #
6 # All rights reserved.
7 #
8 # Permission is hereby granted, free of charge, to any person obtaining a copy
9 # of this software and associated documentation files (the "Software"), to deal
10 # in the Software without restriction, including without limitation the rights
11 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 # copies of the Software, and to permit persons to whom the Software is
13 # furnished to do so, subject to the following conditions:
14 #
15 # The above copyright notice and this permission notice shall be included in
16 # all copies or substantial portions of the Software.
17 #
18 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 # SOFTWARE.
25 import os
26 import sys
27 
28 
29 class ConfigError(Exception):
30     pass
31 
32 
33 class Config(object):
34     settings_keys = [
35         "keys",
36         "mouse",
37         "groups",
38         "dgroups_key_binder",
39         "dgroups_app_rules",
40         "follow_mouse_focus",
41         "focus_on_window_activation",
42         "cursor_warp",
43         "layouts",
44         "floating_layout",
45         "screens",
46         "main",
47         "auto_fullscreen",
48         "widget_defaults",
49         "extension_defaults",
50         "bring_front_click",
51         "wmname",
52     ]
53 
54     def __init__(self, **settings):
55         """Create a Config() object from settings
56 
57         Only attributes found in Config.settings_keys will be added to object.
58         config attribute precedence is 1.) **settings 2.) self 3.) default_config
59         """
60         from .resources import default_config
61         default = vars(default_config)
62         for key in self.settings_keys:
63             try:
64                 value = settings[key]
65             except KeyError:
66                 value = getattr(self, key, default[key])
67             setattr(self, key, value)
68         self._init_deprecated(**settings)
69 
70     def _init_deprecated(self, extensions=None, **settings):
71         "Initialize deprecated settings."
72         if extensions:          # Deprecated in v0.10.7
73             import warnings
74             warnings.warn("'extentions' is deprecated, use "
75                           "'extension_defaults'", DeprecationWarning)
76             self.extension_defaults.update(extensions.get('dmenu', {}))
77 
78     @classmethod
79     def from_file(cls, path):
80         "Create a Config() object from the python file located at path."
81         try:
82             sys.path.insert(0, os.path.dirname(path))
83             config = __import__(os.path.basename(path)[:-3])
84         except Exception:
85             import traceback
86             from .log_utils import logger
87             logger.exception('Could not import config file %r', path)
88             tb = traceback.format_exc()
89             raise ConfigError(tb)
90         return cls(**vars(config))
91
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/libqtile/confreader.py b/libqtile/confreader.py
--- a/libqtile/confreader.py
+++ b/libqtile/confreader.py
@@ -66,6 +66,7 @@
                 value = getattr(self, key, default[key])
             setattr(self, key, value)
         self._init_deprecated(**settings)
+        self._init_fake_screens(**settings)
 
     def _init_deprecated(self, extensions=None, **settings):
         "Initialize deprecated settings."
@@ -75,6 +76,14 @@
                           "'extension_defaults'", DeprecationWarning)
             self.extension_defaults.update(extensions.get('dmenu', {}))
 
+    def _init_fake_screens(self, **settings):
+        " Initiaize fake_screens if they are set."
+        try:
+            value = settings['fake_screens']
+            setattr(self, 'fake_screens', value)
+        except KeyError:
+            pass
+
     @classmethod
     def from_file(cls, path):
         "Create a Config() object from the python file located at path."

{"golden_diff": "diff --git a/libqtile/confreader.py b/libqtile/confreader.py\n--- a/libqtile/confreader.py\n+++ b/libqtile/confreader.py\n@@ -66,6 +66,7 @@\n                 value = getattr(self, key, default[key])\n             setattr(self, key, value)\n         self._init_deprecated(**settings)\n+        self._init_fake_screens(**settings)\n \n     def _init_deprecated(self, extensions=None, **settings):\n         \"Initialize deprecated settings.\"\n@@ -75,6 +76,14 @@\n                           \"'extension_defaults'\", DeprecationWarning)\n             self.extension_defaults.update(extensions.get('dmenu', {}))\n \n+    def _init_fake_screens(self, **settings):\n+        \" Initiaize fake_screens if they are set.\"\n+        try:\n+            value = settings['fake_screens']\n+            setattr(self, 'fake_screens', value)\n+        except KeyError:\n+            pass\n+\n     @classmethod\n     def from_file(cls, path):\n         \"Create a Config() object from the python file located at path.\"\n", "issue": "Fake screens\n[This part of the documentation](https://github.com/qtile/qtile/blob/ed7198a5fb5438110f81a8c6ecc0e6289676c057/libqtile/config.py#L231-L232) mentions \"fake screens\", and the term is also found [in the code](https://github.com/qtile/qtile/blob/7c2a88fba68bdcf6f25dfb5494a74afc475d674e/libqtile/manager.py#L357-L373).\r\n\r\nWhat are they? How to use them?\r\n\r\nWe need to document answers to those questions, and then make sure they work correctly.\r\n\r\nSee #1192 for this last point.\n", "before_files": [{"content": "# coding: utf-8\n#\n# Copyright (c) 2008, Aldo Cortesi <aldo@corte.si>\n# Copyright (c) 2011, Andrew Grigorev <andrew@ei-grad.ru>\n#\n# All rights reserved.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in\n# all copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n# SOFTWARE.\nimport os\nimport sys\n\n\nclass ConfigError(Exception):\n    pass\n\n\nclass Config(object):\n    settings_keys = [\n        \"keys\",\n        \"mouse\",\n        \"groups\",\n        \"dgroups_key_binder\",\n        \"dgroups_app_rules\",\n        \"follow_mouse_focus\",\n        \"focus_on_window_activation\",\n        \"cursor_warp\",\n        \"layouts\",\n        \"floating_layout\",\n        \"screens\",\n        \"main\",\n        \"auto_fullscreen\",\n        \"widget_defaults\",\n        \"extension_defaults\",\n        \"bring_front_click\",\n        \"wmname\",\n    ]\n\n    def __init__(self, **settings):\n        \"\"\"Create a Config() object from settings\n\n        Only attributes found in Config.settings_keys will be added to object.\n        config attribute precedence is 1.) **settings 2.) self 3.) default_config\n        \"\"\"\n        from .resources import default_config\n        default = vars(default_config)\n        for key in self.settings_keys:\n            try:\n                value = settings[key]\n            except KeyError:\n                value = getattr(self, key, default[key])\n            setattr(self, key, value)\n        self._init_deprecated(**settings)\n\n    def _init_deprecated(self, extensions=None, **settings):\n        \"Initialize deprecated settings.\"\n        if extensions:          # Deprecated in v0.10.7\n            import warnings\n            warnings.warn(\"'extentions' is deprecated, use \"\n                          \"'extension_defaults'\", DeprecationWarning)\n            self.extension_defaults.update(extensions.get('dmenu', {}))\n\n    @classmethod\n    def from_file(cls, path):\n        \"Create a Config() object from the python file located at path.\"\n        try:\n            sys.path.insert(0, os.path.dirname(path))\n            config = __import__(os.path.basename(path)[:-3])\n        except Exception:\n            import traceback\n            from .log_utils import logger\n            logger.exception('Could not import config file %r', path)\n            tb = traceback.format_exc()\n            raise ConfigError(tb)\n        return cls(**vars(config))\n", "path": "libqtile/confreader.py"}], "after_files": [{"content": "# coding: utf-8\n#\n# Copyright (c) 2008, Aldo Cortesi <aldo@corte.si>\n# Copyright (c) 2011, Andrew Grigorev <andrew@ei-grad.ru>\n#\n# All rights reserved.\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in\n# all copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n# SOFTWARE.\nimport os\nimport sys\n\n\nclass ConfigError(Exception):\n    pass\n\n\nclass Config(object):\n    settings_keys = [\n        \"keys\",\n        \"mouse\",\n        \"groups\",\n        \"dgroups_key_binder\",\n        \"dgroups_app_rules\",\n        \"follow_mouse_focus\",\n        \"focus_on_window_activation\",\n        \"cursor_warp\",\n        \"layouts\",\n        \"floating_layout\",\n        \"screens\",\n        \"main\",\n        \"auto_fullscreen\",\n        \"widget_defaults\",\n        \"extension_defaults\",\n        \"bring_front_click\",\n        \"wmname\",\n    ]\n\n    def __init__(self, **settings):\n        \"\"\"Create a Config() object from settings\n\n        Only attributes found in Config.settings_keys will be added to object.\n        config attribute precedence is 1.) **settings 2.) self 3.) default_config\n        \"\"\"\n        from .resources import default_config\n        default = vars(default_config)\n        for key in self.settings_keys:\n            try:\n                value = settings[key]\n            except KeyError:\n                value = getattr(self, key, default[key])\n            setattr(self, key, value)\n        self._init_deprecated(**settings)\n        self._init_fake_screens(**settings)\n\n    def _init_deprecated(self, extensions=None, **settings):\n        \"Initialize deprecated settings.\"\n        if extensions:          # Deprecated in v0.10.7\n            import warnings\n            warnings.warn(\"'extentions' is deprecated, use \"\n                          \"'extension_defaults'\", DeprecationWarning)\n            self.extension_defaults.update(extensions.get('dmenu', {}))\n\n    def _init_fake_screens(self, **settings):\n        \" Initiaize fake_screens if they are set.\"\n        try:\n            value = settings['fake_screens']\n            setattr(self, 'fake_screens', value)\n        except KeyError:\n            pass\n\n    @classmethod\n    def from_file(cls, path):\n        \"Create a Config() object from the python file located at path.\"\n        try:\n            sys.path.insert(0, os.path.dirname(path))\n            config = __import__(os.path.basename(path)[:-3])\n        except Exception:\n            import traceback\n            from .log_utils import logger\n            logger.exception('Could not import config file %r', path)\n            tb = traceback.format_exc()\n            raise ConfigError(tb)\n        return cls(**vars(config))\n", "path": "libqtile/confreader.py"}]}