Files
whc-shell/README.md
T
2026-10-06 01:52:48 +08:00

75 lines
3.4 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.
# WHC Shell
为物理键盘和鼠标设计的 Android 终端。它通过 SSH 连接本机 Termux(`127.0.0.1:8022`),
目标是在平板 + 键盘鼠标上获得接近桌面终端的体验,尤其是 TUI 程序(如
[CST-Agent](https://git.whcself.xyz/WHC/CST-agent)、vim、htop)。
## 特性
- **完整键盘**:xterm 修饰键编码(Ctrl/Alt/Shift + 方向键、功能键、PgUp/PgDn 等)、
xterm `modifyOtherKeys`、[kitty 键盘协议](https://sw.kovidgoyal.net/kitty/keyboard-protocol/)
(disambiguate 级别,主屏/备用屏分开的栈),能区分 Shift+Enter、Ctrl+Backspace、Ctrl+I 与 Tab、单独的 Esc。
- **鼠标**:1000/1002/1003 上报 + SGR 1006、焦点事件 1004、滚轮;按住 Shift 绕过程序的鼠标上报改为本地选择。
- **选择与剪贴板**:拖动选择、双击选词、三击选行,拖到边缘自动滚动;中键粘贴上次选中内容;
右键菜单;支持程序通过 OSC 52 写剪贴板;粘贴使用 bracketed paste。
- **触屏**:拖动滚动回滚区,轻点弹出软键盘,长按选词并弹出菜单;支持中文输入法。
- **外观同步**:连接后通过 SFTP 读取 Termux 的 `~/.termux/font.ttf`、`colors.properties`、
`termux.properties`(光标样式、闪烁、边距),与 Termux 保持一致。
- **SSH**:首次用密码登录后自动把本机 Ed25519 公钥写入 `~/.ssh/authorized_keys`,以后免密;
主机密钥首次信任并记录指纹,变化时提示。
- 回滚 10000 行,F11 全屏,Ctrl+滚轮缩放字体。
## 使用
1. 在 Termux 里安装并设置 sshd:
```sh
pkg install openssh
passwd # 设置登录密码,首次连接用
sshd # 默认监听 8022
```
2. 打开 WHC Shell,输入 Termux 密码。之后会自动用密钥登录。
可选:让 WHC Shell 在连不上时自动拉起 sshd。在 `~/.termux/termux.properties` 里加上
`allow-external-apps = true`,然后执行 `termux-reload-settings`,并在 WHC Shell 首次请求时
授予“在 Termux 中运行命令”权限。
连接断开后按 Enter 重新连接。
## 快捷键
| 按键 | 作用 |
|---|---|
| Ctrl+Shift+C / V | 复制选中内容 / 粘贴 |
| Ctrl+Shift+A | 全选 |
| Ctrl+Shift+= / - / 0 | 放大 / 缩小 / 恢复字号(也可 Ctrl+滚轮) |
| Shift+PgUp / PgDn | 滚动回滚区(主屏) |
| Ctrl+Shift+PgUp / PgDn / Home / End | 滚动回滚区 / 到顶 / 到底 |
| F11 | 全屏 |
| 物理键盘的返回键 | Esc |
| 右键 | 菜单(复制、粘贴、全选、缩放、全屏、重新连接) |
| 中键 | 粘贴上次选中的内容 |
其余按键全部原样发给终端程序。
## 构建
依赖 JDK 17、Gradle 8.14、Android SDK(platform 35、build-tools 35.0.0)。NixOS 上 `shell.nix` 已备好:
```sh
nix-shell --run 'gradle --no-daemon assembleDebug testDebugUnitTest'
nix-shell --run 'adb install -r app/build/outputs/apk/debug/app-debug.apk'
```
`SshKeysTest` 里的真实 sshd 登录测试需要设置 `WHC_SSHD_PORT` 和 `WHC_SSHD_KEYDIR`,否则跳过。
最低 Android 8.0(API 26)。
## 许可
终端模拟器和渲染器源码来自 [termux-app](https://github.com/termux/termux-app) v0.118.3 的
`terminal-emulator` 与 `terminal-view`(Apache License 2.0),修改内容见 [NOTICE](NOTICE);
termux-app 其余 GPLv3 部分未使用。SSH 使用 [sshj](https://github.com/hierynomus/sshj)
与 Bouncy Castle。