v1.8.71: fix Windows compatibility — guard Linux-only X11 code with platform check

- main.py: wrap _ensure_display_access() in sys.platform != "win32" check
- main.py: add FileNotFoundError to except in _find_active_xauthority()
- claude_setup.py: platform-aware error message for ssh-keygen not found
- CLAUDE.md: add mandatory cross-platform rules for all contributors

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
chrome-storm-c442
2026-02-28 08:41:15 -05:00
parent 508a288022
commit aea5030623
5 changed files with 18 additions and 5 deletions

View File

@@ -2,7 +2,18 @@
## Проект
ServerManager — Desktop GUI (CustomTkinter) для управления удалёнными серверами **любых типов**. Claude Code управляет серверами через скилл `/ssh`, зная только алиасы.
ServerManager — **кроссплатформенное** Desktop GUI (CustomTkinter) для управления удалёнными серверами **любых типов**. Работает на **Windows и Linux**. Claude Code управляет серверами через скилл `/ssh`, зная только алиасы.
## КРОССПЛАТФОРМЕННОСТЬ — ОБЯЗАТЕЛЬНО
Приложение собирается и работает на **Windows** и **Linux**. При любых правках кода:
- **Никогда** не использовать хардкод Linux-путей (`/home`, `/tmp`, `/root`) без проверки `sys.platform`
- **Никогда** не вызывать Linux-only команды (`ps`, `xhost`, `xdpyinfo`, `xauth`) без `if sys.platform != "win32"`
- Пути строить через `os.path.join()` / `os.path.expanduser()`, **не** через строковую конкатенацию с `/`
- Subprocess-вызовы, специфичные для ОС — оборачивать в проверку платформы
- `os.scandir("/home")`**сломает Windows** (`FileNotFoundError`). Такой код допустим только внутри `if sys.platform != "win32"`
- Тестировать билд на Windows (`python build.py`) после каждого изменения
## Поддерживаемые типы серверов

View File

@@ -123,7 +123,8 @@ def generate_ssh_key() -> str:
log.info(f"SSH key generated: {SSH_KEY_PATH}")
return f"Key generated: {SSH_KEY_PATH}"
except FileNotFoundError:
msg = "ERROR: ssh-keygen not found — install openssh-client"
hint = "enable OpenSSH optional feature" if sys.platform == "win32" else "install openssh-client"
msg = f"ERROR: ssh-keygen not found — {hint}"
log.error(msg)
return msg
except subprocess.CalledProcessError as e:

View File

@@ -23,7 +23,7 @@ def _find_active_xauthority():
xauth = os.path.join(entry.path, ".Xauthority")
if os.path.isfile(xauth):
return xauth
except PermissionError:
except (PermissionError, FileNotFoundError):
pass
# 3. Check /root/.Xauthority
root_xauth = "/root/.Xauthority"
@@ -105,7 +105,8 @@ from gui.app import App
def main():
_ensure_display_access()
if sys.platform != "win32":
_ensure_display_access()
app = App()
app.mainloop()

Binary file not shown.

View File

@@ -1,6 +1,6 @@
"""Version info for ServerManager."""
__version__ = "1.8.70"
__version__ = "1.8.71"
__app_name__ = "ServerManager"
__author__ = "aibot777"
__description__ = "Desktop GUI for managing remote servers"