mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-02-18 04:13:08 +08:00
236 lines
4.9 KiB
Markdown
236 lines
4.9 KiB
Markdown
# SimpleRemoter Linux Client
|
||
|
||
SimpleRemoter 的 Linux 客户端,支持远程桌面、远程终端、文件管理和进程管理功能。
|
||
|
||
## 功能特性
|
||
|
||
- **远程桌面** - 实时屏幕截图传输,支持鼠标/键盘控制
|
||
- **远程终端** - 基于 PTY 的交互式 Shell
|
||
- **文件管理** - 远程文件浏览、上传、下载
|
||
- **进程管理** - 查看和管理远程进程
|
||
- **守护进程模式** - 支持后台运行 (`-d` 参数)
|
||
|
||
## 系统要求
|
||
|
||
### 显示服务器
|
||
|
||
| 类型 | 支持状态 | 说明 |
|
||
|------|---------|------|
|
||
| X11 / Xorg | 支持 | 完全支持 |
|
||
| XWayland | 部分支持 | X11 应用可用,原生 Wayland 应用不可见 |
|
||
| Wayland (纯) | 不支持 | 无法工作 |
|
||
|
||
> **重要**: 本客户端使用 X11 API 进行屏幕捕获,**不支持纯 Wayland 环境**。
|
||
> 如果你使用 GNOME/KDE 等桌面环境,请在登录时选择 "Xorg" 或 "X11" 会话。
|
||
|
||
### 依赖库
|
||
|
||
#### 必需 (远程桌面功能)
|
||
|
||
| 库 | 包名 (Debian/Ubuntu) | 包名 (RHEL/Fedora) | 用途 |
|
||
|----|---------------------|-------------------|------|
|
||
| libX11 | `libx11-6` | `libX11` | X11 核心库,屏幕捕获 |
|
||
|
||
#### 推荐 (完整远程控制)
|
||
|
||
| 库 | 包名 (Debian/Ubuntu) | 包名 (RHEL/Fedora) | 用途 |
|
||
|----|---------------------|-------------------|------|
|
||
| libXtst | `libxtst6` | `libXtst` | XTest 扩展,模拟鼠标/键盘输入 |
|
||
|
||
#### 可选
|
||
|
||
| 库 | 包名 (Debian/Ubuntu) | 包名 (RHEL/Fedora) | 用途 |
|
||
|----|---------------------|-------------------|------|
|
||
| libXss | `libxss1` | `libXScrnSaver` | 获取用户空闲时间 |
|
||
|
||
### 一键安装依赖
|
||
|
||
**Debian / Ubuntu:**
|
||
```bash
|
||
sudo apt update
|
||
sudo apt install libx11-6 libxtst6 libxss1
|
||
```
|
||
|
||
**RHEL / CentOS / Fedora:**
|
||
```bash
|
||
sudo dnf install libX11 libXtst libXScrnSaver
|
||
```
|
||
|
||
**Arch Linux:**
|
||
```bash
|
||
sudo pacman -S libx11 libxtst libxss
|
||
```
|
||
|
||
## 编译
|
||
|
||
### 编译依赖
|
||
|
||
```bash
|
||
# Debian/Ubuntu
|
||
sudo apt install build-essential cmake
|
||
|
||
# RHEL/Fedora
|
||
sudo dnf install gcc-c++ cmake make
|
||
```
|
||
|
||
### 编译步骤
|
||
|
||
```bash
|
||
cd linux
|
||
cmake .
|
||
make -j$(nproc)
|
||
```
|
||
|
||
编译成功后生成可执行文件 `ghost`。
|
||
|
||
## 使用方法
|
||
|
||
### 基本用法
|
||
|
||
```bash
|
||
./ghost [服务器IP] [端口]
|
||
```
|
||
|
||
### 守护进程模式
|
||
|
||
```bash
|
||
./ghost -d [服务器IP] [端口]
|
||
```
|
||
|
||
### 示例
|
||
|
||
```bash
|
||
# 前台运行,连接到 192.168.1.100:6543
|
||
./ghost 192.168.1.100 6543
|
||
|
||
# 后台守护进程模式
|
||
./ghost -d 192.168.1.100 6543
|
||
|
||
# 停止守护进程
|
||
kill $(cat ~/.config/ghost/ghost.pid)
|
||
```
|
||
|
||
## 常见问题
|
||
|
||
### Q: 远程桌面功能不工作
|
||
|
||
**检查项:**
|
||
|
||
1. **确认使用 X11 会话**
|
||
```bash
|
||
echo $XDG_SESSION_TYPE
|
||
# 应输出 "x11",如果是 "wayland" 则不支持
|
||
```
|
||
|
||
2. **确认 DISPLAY 环境变量已设置**
|
||
```bash
|
||
echo $DISPLAY
|
||
# 应输出类似 ":0" 或 ":1"
|
||
```
|
||
|
||
3. **确认 X11 库已安装**
|
||
```bash
|
||
ldconfig -p | grep libX11
|
||
# 应输出 libX11.so.6 的路径
|
||
```
|
||
|
||
### Q: 鼠标/键盘控制不工作
|
||
|
||
安装 XTest 扩展库:
|
||
```bash
|
||
# Debian/Ubuntu
|
||
sudo apt install libxtst6
|
||
|
||
# RHEL/Fedora
|
||
sudo dnf install libXtst
|
||
```
|
||
|
||
### Q: 警告 "MIT-SCREEN-SAVER missing"
|
||
|
||
这是一个无害警告,表示无法获取用户空闲时间。可以忽略,或安装 libXss:
|
||
```bash
|
||
# Debian/Ubuntu
|
||
sudo apt install libxss1
|
||
|
||
# RHEL/Fedora
|
||
sudo dnf install libXScrnSaver
|
||
```
|
||
|
||
### Q: 如何在 Wayland 环境下使用?
|
||
|
||
目前不支持纯 Wayland。需要切换到 X11 会话。
|
||
|
||
**方法1:登录时选择 X11 会话**
|
||
|
||
- 在登录界面点击用户名后,右下角会出现齿轮图标 ⚙️
|
||
- 点击齿轮,选择 "Ubuntu on Xorg" 或 "GNOME on Xorg"
|
||
|
||
**方法2:强制禁用 Wayland(推荐)**
|
||
|
||
如果找不到齿轮图标,可以修改 GDM 配置强制使用 X11:
|
||
|
||
```bash
|
||
sudo nano /etc/gdm3/custom.conf
|
||
```
|
||
|
||
在 `[daemon]` 部分添加:
|
||
|
||
```ini
|
||
[daemon]
|
||
WaylandEnable=false
|
||
```
|
||
|
||
保存后重启系统:
|
||
|
||
```bash
|
||
sudo reboot
|
||
```
|
||
|
||
这样系统将始终使用 X11,无需每次手动选择。
|
||
|
||
**KDE 桌面环境:**
|
||
- 登录界面选择 "Plasma (X11)"
|
||
- 或编辑 `/etc/sddm.conf` 设置默认会话
|
||
|
||
### Q: 如何检查当前会话类型?
|
||
|
||
```bash
|
||
# 查看会话类型
|
||
echo $XDG_SESSION_TYPE
|
||
|
||
# 查看显示服务器信息
|
||
loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -p Type
|
||
```
|
||
|
||
## 配置文件
|
||
|
||
配置文件位于 `~/.config/ghost/config.ini`,存储以下信息:
|
||
|
||
- 首次安装时间
|
||
- 公网 IP 缓存
|
||
- 地理位置缓存
|
||
|
||
## 技术细节
|
||
|
||
### 屏幕捕获流程
|
||
|
||
1. 使用 `XCopyArea` 将 root window 拷贝到离屏 Pixmap
|
||
2. 使用 `XGetImage` 从 Pixmap 获取图像数据
|
||
3. 转换为 BGRA 格式并翻转行序 (BMP 格式要求)
|
||
4. 计算帧差异,仅传输变化区域
|
||
|
||
### 输入模拟
|
||
|
||
使用 XTest 扩展 (`libXtst`) 实现:
|
||
- `XTestFakeMotionEvent` - 鼠标移动
|
||
- `XTestFakeButtonEvent` - 鼠标点击
|
||
- `XTestFakeKeyEvent` - 键盘输入
|
||
|
||
### 为何不支持 Wayland?
|
||
|
||
Wayland 出于安全考虑,禁止应用程序:
|
||
- 捕获其他应用的屏幕内容
|
||
- 模拟全局输入事件
|
||
|
||
这些限制使得传统远程桌面方案无法在纯 Wayland 下工作。
|