code: def get_window_geometry(self, window_id):
      geometry = dict()
  
      window_geometry = (
          subprocess.check_output(
              shlex.split(f"xdotool getwindowgeometry {window_id}")
          )
          .decode("utf-8")
          .strip()
      )
      size = (
          re.match(
              r"\s+Geometry: ([0-9]+x[0-9]+)",
              window_geometry.split("\n")[2],
          )
          .group(1)
          .split("x")
      )
  
      geometry["width"] = int(size[0])
      geometry["height"] = int(size[1])
  
      window_information = (
          subprocess.check_output(
              shlex.split(f"xwininfo -id {window_id}")
          )
          .decode("utf-8")
          .strip()
      )
      geometry["x_offset"] = int(
          re.match(
              r"\s+Absolute upper-left X:\s+([0-9]+)",
              window_information.split("\n")[2],
          ).group(1)
      )
      geometry["y_offset"] = int(
          re.match(
              r"\s+Absolute upper-left Y:\s+([0-9]+)",
              window_information.split("\n")[3],
          ).group(1)
      )
  
      return geometry
  
file_path: SerpentAI/serpent/window_controllers/linux_window_controller.py
imports: from serpent.window_controller import WindowController
  import subprocess
  import shlex
  import re
label_desc: Use image node_id 9 for calling the LinuxWindowController obj's underlying member method code with example usage: obj.get_window_geometry(window_id) and returns: geometry