diff --git a/main.py b/main.py index 1a5088f..cc51f82 100644 --- a/main.py +++ b/main.py @@ -5,14 +5,48 @@ ServerManager — GUI application for managing remote servers. import sys import os +import subprocess # Add project root to path sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +def _ensure_display_access(): + """Auto-fix X display authorization for root and non-owner users.""" + display = os.environ.get("DISPLAY") + if not display: + # Try common displays + for d in (":0", ":1", ":0.0"): + os.environ["DISPLAY"] = d + display = d + break + try: + subprocess.run(["xhost", "+local:"], stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, timeout=3) + except (FileNotFoundError, subprocess.TimeoutExpired): + pass + # Fallback: generate xauth cookie if xhost not available + if display: + try: + subprocess.run(["xdpyinfo"], stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, timeout=3, check=True) + except (FileNotFoundError, subprocess.TimeoutExpired, subprocess.CalledProcessError): + try: + xauth_file = os.path.expanduser("~/.Xauthority") + os.environ.setdefault("XAUTHORITY", xauth_file) + subprocess.run( + ["xauth", "generate", display, ".", "trusted"], + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, timeout=5 + ) + except (FileNotFoundError, subprocess.TimeoutExpired): + pass + + from gui.app import App def main(): + _ensure_display_access() app = App() app.mainloop() diff --git a/releases/ServerManager-v1.8.68-linux-x64 b/releases/ServerManager-v1.8.68-linux-x64 new file mode 100644 index 0000000..f92f2f0 Binary files /dev/null and b/releases/ServerManager-v1.8.68-linux-x64 differ diff --git a/version.py b/version.py index 4834614..8df63ef 100755 --- a/version.py +++ b/version.py @@ -1,6 +1,6 @@ """Version info for ServerManager.""" -__version__ = "1.8.67" +__version__ = "1.8.68" __app_name__ = "ServerManager" __author__ = "aibot777" __description__ = "Desktop GUI for managing remote servers"