class LinuxWindow implements OsWindow {
		private long id;

		public LinuxWindow(long id) {
			this.id = id;
		}

		@Override
		public OsProcess getProcess() {
			try {
				List<String> lines = xdotool(new String[] { "getwindowpid", Long.toString(id) });

				if (!lines.isEmpty()) {
					Optional<ProcessHandle> handle = ProcessHandle.of(Long.parseLong(lines.get(0)));
					if (handle.isPresent()) {
						return new GenericOsProcess(handle.get());
					}
				}

				return null;
			} catch (XdotoolException e) {
				return null;
			}
		}

		@Override
		public String getTitle() {
			try {
				List<String> lines = xdotool(new String[] { "getwindowname", Long.toString(id) });
				return lines.stream().findFirst().orElse("");
			} catch (XdotoolException e) {
				return "";
			}
		}

		@Override
		public Rectangle getBounds() {
			try {
				List<String> lines = xdotool(new String[] { "getwindowgeometry", "--shell", Long.toString(id) });

				if (!lines.isEmpty()) {
					Properties props = new Properties();
					try {
						props.load(new StringReader(String.join("\n", lines)));
					} catch (IOException e) {
						e.printStackTrace();
						return null;
					}

					return new Rectangle(Integer.parseInt(props.getProperty("X")),
							Integer.parseInt(props.getProperty("Y")), Integer.parseInt(props.getProperty("WIDTH")),
							Integer.parseInt(props.getProperty("HEIGHT")));
				}

				return null;
			} catch (XdotoolException e) {
				return null;
			}
		}

		@Override
		public boolean focus() {
			try {
				xdotool(new String[] { "windowactivate", "--sync", Long.toString(id) });
				return true;
			} catch (XdotoolException e) {
				return false;
			}
		}

		@Override
		public boolean minimize() {
			throw new UnsupportedOperationException("minimize not implemented");
		}

		@Override
		public boolean maximize() {
			throw new UnsupportedOperationException("maximize not implemented");
		}

		@Override
		public boolean restore() {
			throw new UnsupportedOperationException("restore not implemented");
		}

		@Override
		public boolean equals(Object other) {<FILL_FUNCTION_BODY>}
	}

			return other != null && other instanceof LinuxWindow && this.id == (((LinuxWindow) other).id);
		
<methods>public non-sealed void <init>() ,public List<org.sikuli.natives.OSUtil.OsProcess> findProcesses(java.lang.String) ,public List<org.sikuli.natives.OSUtil.OsWindow> findWindows(java.lang.String) ,public org.sikuli.natives.OSUtil.OsWindow getFocusedWindow() ,public org.sikuli.natives.OSUtil.OsProcess getProcess() ,public List<org.sikuli.natives.OSUtil.OsProcess> getProcesses() ,public List<org.sikuli.natives.OSUtil.OsWindow> getWindows(org.sikuli.natives.OSUtil.OsProcess) ,public List<org.sikuli.natives.OSUtil.OsWindow> getWindows() ,public void init() ,public boolean isUserProcess(org.sikuli.natives.OSUtil.OsProcess) ,public org.sikuli.natives.OSUtil.OsProcess open(java.lang.String[], java.lang.String) <variables>