V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
powersee
V2EX  ›  分享创造

采用 Java 开发的 SSH/终端工具,希望大家给点建议

  •  4
     
  •   powersee · 19 天前 · 6246 次点击

    为什么要做这个?

    目前市面上大多数客户端都是基于 Electron 或 HTML 开发,我个人不太喜欢这种“塑料的感觉”(并不是贬义,缺乏真实触感的体验)。因此,我选择使用 Java Swing 开发一个桌面端客户端。

    核心部分采用 Kotlin 开发,最终目标是通过 Kotlin Multiplatform 打造一款全平台的 SSH/终端 工具。

    功能特色

    • 支持多标签页
    • 数据加密存储
    • 通过 Gist 同步配置
    • 宏功能
    • 密钥管理
    • Find Everywhere
    • ...

    目前尚不支持 SFTP/FTP 等

    XTerm 协议部分

    使用 Kotlin 实现了 XTerm 协议(尚未完全实现)。桌面端的渲染层基于 Java Swing ,未来计划将这一部分迁移到 KMP ,从而实现真正的跨平台支持(包括移动端)。

    在实现协议的过程中,参考了许多经典的客户端,例如:

    预览


    后续发展

    • 命令提示(这部分我还在构思,如何准确获取用户输入的命令?)
    • AI 功能
    • 增加团队协同功能
    • 支持 Telnet
    • 支持 X-Server
    • 支持 VNC Viewer
    • SFTP/FTP
    • 串口
    • ...

    这是一个长期发展的项目。


    希望大家给点建议 🙏

    项目地址:https://github.com/TermoraDev/termora

    117 条回复    2025-01-12 18:20:36 +08:00
    1  2  
    q000q000
        101
    q000q000  
       17 天前
    先 STAR ,以后看看能不能替代 Windows Terminal 。
    noisay
        102
    noisay  
       17 天前
    界面有点帅啊~ 要是能支持 ftp 文件管理就好了,我这种小白就在家折腾一下,图形界面的文件管理还是很需要
    devh0407
        103
    devh0407  
       17 天前
    @liyanggyang 我之前看过腾讯云的 orca 使用的是 bash-preexec, 仿的 zsh [preexec] 和 [precmd] 钩子, 命令前后插了控制符

    #hook fun
    preexec() { printf "\x1B]1337;PreExecMarker;%s\x7" "$1"; }
    precmd() { printf "\x1B]1337;PostExecMarker;Exit=$?;CurrentDir=$(pwd);\x7"; }
    lasuar
        104
    lasuar  
       17 天前
    增加 赞赏功能,我去包你明天早餐
    powersee
        105
    powersee  
    OP
       17 天前 via iPhone
    @noisay #102 下个版本支持


    @lasuar #104 感谢大佬,目前还不打算开通赞赏哈
    ZiLong
        106
    ZiLong  
       17 天前
    赞,有句话不知当讲不讲,我还挺喜欢 java 的,还是有人做些有趣的事了,就是楼主考虑过商业化相关的么?感觉投入和产出有可能极不成正比
    powersee
        107
    powersee  
    OP
       16 天前 via iPhone   ❤️ 1
    @ZiLong #106 除非有一天我觉得做的和 xshell 相当了,否则可能不会考虑商业化。
    cowcomic
        108
    cowcomic  
       15 天前
    @powersee 就是搜索终端屏幕上打印出来的这些文字
    powersee
        109
    powersee  
    OP
       15 天前 via iPhone
    @cowcomic #108 ctrl+f 呀
    liyanggyang
        110
    liyanggyang  
       11 天前
    @powersee #86 我理解您说的意思,命令肯定是操作系统 bash/zsh 等解释执行的。 我的症结是这个,简单举例:你的程序相当于一个“管道”嘛, 用户 - 程序 <-> linux 服务器 , 我想知道的是,linux 服务器执行命令之后,你在程序界面显示 执行完成后的结果(也就是 程序界面 <- linux 服务器 ) 这一段,何时判断 linux 服务器执行完成了, 你可以显示在程序界面了。
    liyanggyang
        111
    liyanggyang  
       11 天前
    @powersee #86 那我理解了, 你不涉及 依次同步执行命令, 而是 输入/返回,本身就是 分别的 管道是吧?

    我是要同步效果: 命令 1 -执行完成 - 命令 2 - 执行完成 , 不管多少个用户开了多少个窗口,只要命令 1 在执行,命令 2 就需要等命令 1 执行完成后才能开始执行,

    你应该是 :

    01 、输入监听 -> 放到 linux 执行
    02 、返回流监听 -> 放到程序界面显示
    01 和 02 这两个是 互相“独立”的。
    liyanggyang
        112
    liyanggyang  
       11 天前
    @powersee #86
    您应该是:
    用户

    程序
    / \
    窗口 pty1 窗口 pty2
    | |
    linux 服务器

    我是:
    用户 1 窗口 用户 2 窗口
    \ /
    程序

    窗口 pty
    |
    linux 服务器

    我是要用户 1 和用户 2 先后输入命令,在用户 1 返回后才能开始执行用户 2 窗口输入的命令,所以我需要判断用户 1 命令是否执行完成
    powersee
        113
    powersee  
    OP
       11 天前
    @liyanggyang #111 对于任何 Shell 来说,每次执行命令都是开启一个新的 Process ,那么你执行 “echo hello” 也会开启一个程序,在我印象里似乎是可以判断有没有程序在执行的
    wukairobin
        114
    wukairobin  
       11 天前
    rust 写跨平台桌面应用是不是也是一个很好的选择
    powersee
        115
    powersee  
    OP
       11 天前 via iPhone
    @wukairobin #114 不太懂,我只会 java 😂
    perfectlife
        116
    perfectlife  
       9 天前
    可以加个断开连接/重新连接的按钮,不然每次遇到网络问题连接中断后还得新开个窗口再去选择机器连接
    powersee
        117
    powersee  
    OP
       9 天前
    @perfectlife #116 可以通过“右键”标签页,有个重新连接
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1713 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 16:41 · PVG 00:41 · LAX 08:41 · JFK 11:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.