//! Linux 被控端:X11 采集 + XTest 注入;会话层(QUIC/认证/编码/丢帧)复用 `agent-core`。 //! //! 与 Windows 端的差异仅在这两个模块里,线格式与主控端完全一致,viewer 不需要任何改动。 //! 依赖 `DISPLAY` 环境变量(Xorg / XWayland 均可)。 mod capture; mod input; use agent_core::{parse_args, serve, EncoderSettings, InputInjector, ScreenCapturer, SessionConfig}; use anyhow::Result; use std::sync::Arc; #[tokio::main] async fn main() -> Result<()> { let (port, code) = parse_args()?; let display = std::env::var("DISPLAY").unwrap_or_else(|_| "(未设置)".to_string()); println!("[linux-agent] DISPLAY={display}"); // 注入端连接常驻(启动即校验 XTEST 扩展是否可用,缺了就直接报错退出) let injector: Arc = Arc::new(input::X11Injector::new()?); serve( SessionConfig { port, code }, EncoderSettings::default(), // 采集端可被重建(X11 连接断开等),故用工厂闭包 || Ok(Box::new(capture::X11Capturer::new()?) as Box), injector, ) .await }