Skip to content

Commit efdba08

Browse files
committed
修复: Linux ADB 路径与 X11 会话提示
1 parent c034032 commit efdba08

5 files changed

Lines changed: 53 additions & 8 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "MluaScript"
3-
version = "1.0.0"
3+
version = "1.0.2"
44
description = "MaaFramework-driven script controller"
55
authors = [
66
{name = "5656565566", email = "2393963330@qq.com"},

src/mluascript/maa/connections/desktop.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def current_desktop_backend() -> str:
2121
if system == "darwin":
2222
return "macos"
2323
if system == "linux":
24-
return "wlroots"
24+
return _detect_linux_desktop_backend()
2525
return "unknown"
2626

2727

@@ -31,7 +31,7 @@ def current_desktop_label() -> str:
3131
return " Windows 本地窗口"
3232
if backend == "macos":
3333
return " macOS 本地窗口"
34-
if backend == "wlroots":
34+
if backend in {"wlroots", "x11"}:
3535
return " Linux 本地窗口"
3636
return " 本地窗口"
3737

@@ -46,6 +46,8 @@ def connect_desktop_window(context: MaaContext, params: DesktopWindowConnectionP
4646
return _connect_macos(context, params)
4747
if backend == "wlroots":
4848
return _connect_wlroots(context, params)
49+
if backend == "x11":
50+
raise RuntimeError("当前 Linux 会话为 X11,但当前 MAA 后端仅支持 wlroots/Wayland 本地窗口控制")
4951
raise RuntimeError(f"当前平台暂不支持本地窗口控制: {platform.system()}")
5052

5153

@@ -116,6 +118,20 @@ def _resolve_wlroots_socket_path() -> str:
116118
return os.path.join(xdg_runtime_dir, wayland_display)
117119

118120

121+
def _detect_linux_desktop_backend() -> str:
122+
session_type = str(os.environ.get("XDG_SESSION_TYPE") or "").strip().lower()
123+
if session_type == "x11":
124+
return "x11"
125+
if session_type == "wayland":
126+
return "wlroots"
127+
128+
if str(os.environ.get("WAYLAND_DISPLAY") or "").strip():
129+
return "wlroots"
130+
if str(os.environ.get("DISPLAY") or "").strip():
131+
return "x11"
132+
return "wlroots"
133+
134+
119135
def _verify_controller_ready(controller, *, backend: str, target: str) -> None:
120136
job = controller.post_connection()
121137
job.wait()

src/mluascript/maa/lifecycle/bootstrap.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import platform
34
from pathlib import Path
45

56
from maa.define import LoggingLevelEnum
@@ -10,9 +11,11 @@
1011

1112
def _normalize_adb_path(raw: str) -> Path:
1213
path = Path(raw)
13-
if path.name.lower() not in {"adb", "adb.exe"}:
14-
return path / "adb.exe"
15-
return path
14+
if path.name.lower() in {"adb", "adb.exe"}:
15+
return path
16+
17+
adb_name = "adb.exe" if platform.system().lower() == "windows" else "adb"
18+
return path / adb_name
1619

1720

1821
def resolve_maa_paths(root_dir: Path | None = None) -> MaaPaths:

tests/maa/connections/test_basic_connections.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
from mluascript.maa.connections.adb import connect_adb
99
from mluascript.maa.connections.browser import connect_browser
10-
from mluascript.maa.connections.desktop import connect_desktop_window
10+
from mluascript.maa.connections.desktop import connect_desktop_window, current_desktop_backend
1111
from mluascript.maa.connections.discovery import find_adb_devices, find_desktop_windows
1212
from mluascript.maa.connections.models import AdbConnectionParams, BrowserConnectionParams, DesktopWindowConnectionParams
1313
from mluascript.maa.lifecycle.runtime import MaaContext
@@ -167,6 +167,20 @@ def test_connect_desktop_window_uses_macos_backend(mocker) -> None:
167167
assert session.info.meta == {"platform": "macos", "handle": 2002}
168168

169169

170+
def test_current_desktop_backend_detects_linux_x11(monkeypatch, mocker) -> None:
171+
monkeypatch.setenv("XDG_SESSION_TYPE", "x11")
172+
mocker.patch("mluascript.maa.connections.desktop.platform.system", return_value="Linux")
173+
174+
assert current_desktop_backend() == "x11"
175+
176+
177+
def test_connect_desktop_window_rejects_linux_x11_with_clear_message() -> None:
178+
context = build_context()
179+
180+
with pytest.raises(RuntimeError, match="X11"):
181+
connect_desktop_window(context, DesktopWindowConnectionParams(handle=1, platform="x11"))
182+
183+
170184
def test_discovery_returns_mocked_results(mocker) -> None:
171185
mock_toolkit = mocker.patch("mluascript.maa.connections.discovery.Toolkit")
172186
mock_toolkit.find_adb_devices.return_value = []

tests/maa/lifecycle/test_basic_lifecycle.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from mluascript.shared.config.manager import load_config
88
from mluascript.maa.errors import MaaResourceError
9-
from mluascript.maa.lifecycle.bootstrap import configure_toolkit_options, resolve_maa_paths
9+
from mluascript.maa.lifecycle.bootstrap import _normalize_adb_path, configure_toolkit_options, resolve_maa_paths
1010
from mluascript.maa.lifecycle.resources import get_node_list, load_resource, override_pipeline
1111
from mluascript.maa.lifecycle.runtime import MaaContext, create_maa_context
1212
from mluascript.maa.types import MaaContextState, MaaPaths
@@ -67,6 +67,18 @@ def test_configure_toolkit_options_contains_adb_path_when_present() -> None:
6767
assert options == {"adb_path": "adb.exe"}
6868

6969

70+
def test_normalize_adb_path_uses_platform_specific_binary_name_for_windows(monkeypatch) -> None:
71+
monkeypatch.setattr("mluascript.maa.lifecycle.bootstrap.platform.system", lambda: "Windows")
72+
73+
assert _normalize_adb_path("C:/tools/platform-tools") == Path("C:/tools/platform-tools/adb.exe")
74+
75+
76+
def test_normalize_adb_path_uses_platform_specific_binary_name_for_linux(monkeypatch) -> None:
77+
monkeypatch.setattr("mluascript.maa.lifecycle.bootstrap.platform.system", lambda: "Linux")
78+
79+
assert _normalize_adb_path("/usr/bin") == Path("/usr/bin/adb")
80+
81+
7082
def test_load_resource_returns_true_when_resource_missing() -> None:
7183
context = create_fake_maa_context()
7284

0 commit comments

Comments
 (0)