Files
SimpleRemoter/linux/README.md

236 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 下工作。