news 2026/10/14 2:01:42

KiTTY Session Launcher(会话启动器)完全指南:从命令行到托盘菜单的会话管理实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
KiTTY Session Launcher(会话启动器)完全指南:从命令行到托盘菜单的会话管理实战
  • 通信
  • 网络

【免费下载链接】KiTTY

:computer: KiTTY, a free telnet/ssh client for Windows

项目地址:https://gitcode.com/gh_mirrors/kit/KiTTY
点击查看免费下载

导读:KiTTY 的 Session Launcher(会话启动器)是一个常驻系统托盘的独立工具,用于替代 Pageant 中"启动已保存会话"的能力——它把所有已保存会话按文件夹组织成多级菜单与子菜单,让你无需打开主界面即可一键发起 SSH/Telnet 连接。本文以 docs/pages/SessionLauncher.md 为主线,结合 kitty_launcher.c、kitty.c 等源码,完整讲解 Launcher 的启动方式、菜单组织规则、注册表存储机制、kitty.ini配置项以及"Opened sessions"窗口隐藏/显示功能,读完即可在 Windows 上配置出一个符合自己习惯的会话启动器。

一、Session Launcher 是什么?为什么需要它

在经典 PuTTY 体系(KiTTY 的上游)中,Pageant(SSH 密钥代理)的右键菜单里集成了"启动已保存会话"的能力,但该功能没有独立的菜单或子菜单,在会话数量较多时既不直观也不易分类。

KiTTY 因此单独集成了一款launcher(会话启动器):它以托盘图标常驻,右键/左键点开后呈现一棵完整的会话菜单树,支持按文件夹无限层级展开,使用体验类似于"应用启动器"。

从源码结构看,该功能由编译宏MOD_LAUNCHER控制,完整实现在 kitty_launcher.c,编译开关位于 0.76_My_PuTTY/windows/MAKEFILE.MINGW(-DMOD_LAUNCHER)。也就是说,如果某个 KiTTY 构建未启用该宏,-launcher参数不会生效——这是判断"为什么我的 launcher 没反应"时首先要检查的一点。

二、启动方式:命令行-launcher参数

文档给出的启动方式非常直接——在命令行运行:

kitty.exe -launcher

该参数在 0.76_My_PuTTY/windows/window.c 中被解析:当命令行参数与-launcher匹配时,程序直接转入Launcher_WinMain并启动启动器流程(该函数声明在 kitty_launcher.h):

} else if( !strcmp(p, "-launcher") ) { char *np; np=strstr(cmdline,"-launcher")+9; return Launcher_WinMain(inst, prev, np, show) ; }

实用提示:

  • 该参数也收录在 docs/pages/CommandLine.md 的新增命令行选项清单中;
  • 可以把它做成桌面快捷方式(目标填kitty.exe -launcher),或放进"启动"文件夹实现开机自启,随时从托盘取用。

三、启动后的界面:托盘图标与菜单

软件启动后不会弹出主窗口,而是以新图标常驻系统托盘,图标外观如下(来源:docs/img/kitty_launcher.ico):

图标交互逻辑在Launcher_WndProc(kitty_launcher.c)中实现,具体为:

  • 左键单击(WM_LBUTTONUP):刷新并弹出完整的会话菜单树(MenuLauncher);
  • 右键单击(WM_RBUTTONUP):刷新并弹出"Opened sessions"窗口管理菜单(HideMenu);
  • 图标通过Shell_NotifyIcon(NIM_ADD, ...)注册,并监听TaskbarCreated消息——Explorer 崩溃重启后托盘图标会自动恢复(kitty_launcher.c)。

菜单实际展开后的效果如文档示例图所示,菜单中既包含按文件夹组织的会话层级,也包含"Opened sessions"、Refresh、Configuration、TTY-ed、About、Quit 等功能项(kitty_launcher.c):

KiTTY Launcher 菜单示例

四、菜单的组织:文件夹与\分隔符

Launcher 的菜单树直接对应 KiTTY 的会话文件夹(folders)机制。也就是说,如果你在 KiTTY 主配置界面里把大量会话分门别类放进不同文件夹(例如按机器、按环境、按应用各建一个文件夹),Launcher 会自动把每个文件夹渲染成一个子菜单。

关键规则:子菜单的路径分隔符是反斜杠\。例如文件夹层级生产环境\华东\web-01会呈现为三级子菜单。有关文件夹的创建与过滤管理,参见 docs/pages/SessionsFilter.md(该文档还介绍了通过"Saved Session/New Folder"输入框按会话名或主机名过滤的filter=yes配置)。

菜单树的递归构建逻辑位于 kitty.c 的ReadSpecialMenu:

  • 注册表/INI 文件模式(SAVEMODE_REG / SAVEMODE_FILE):遍历注册表子键,每个子键递归生成一个MF_POPUP子菜单;
  • 目录模式(SAVEMODE_DIR):遍历ConfigDirectory下的目录树,目录对应子菜单、文件对应菜单项;
  • 菜单项上限为NB_MENU_MAX(1024 个,见 kitty.c);
  • 在 Launcher 菜单中,"Default Settings"(默认设置)会话被显式过滤掉,不会出现在菜单里(kitty.c)。

若启用了快捷键(ShortcutsFlag),前 26 个会话还会自动附加Ctrl+Shift+A~Ctrl+Shift+Z的快捷键提示(kitty.c)。

五、菜单数据的存储位置:注册表Launcher键

文档明确给出菜单树保存在注册表键:

[HKEY_CURRENT_USER\Software\9bis.com\KiTTY\Launcher]

该键的结构与HKEY_CURRENT_USER\Software\9bis.com\KiTTY\Sessions下的会话一一对应:每个文件夹对应一个子键,每个会话对应一个值(值名即会话名,值为会话标识)。目录模式(savemode=dir)下则对应ConfigDirectory\Launcher目录树,其中每个会话对应一个文本文件(内容形如会话名\文件夹\,见 kitty_launcher.c 的写入逻辑)。

默认行为:每次启动自动重建

默认情况下,Launcher 每次启动时都会从已保存的会话重新生成(重建)这个菜单树。这一逻辑在Launcher_WinMain中体现为:

if( LauncherConfReload ) InitLauncherRegistry() ; // [kitty_launcher.c](https://link.gitcode.com/i/31d646eddff99d6acede0bbec031df92#L705)

InitLauncherRegistry(kitty_launcher.c)会先删除旧的Launcher键/目录,再遍历Sessions键/目录,把每个会话按Folder值归类后重新写入。其好处是:你在主界面新增、改名或删除会话后,Launcher 菜单永远与当前会话列表保持同步,无需手动维护。该函数在 KiTTY 主程序启动时也会被调用以做初始化(kitty.c)。

自定义菜单:关闭自动重载

如果你希望完全手工组织Launcher 菜单(例如在注册表里自定义子键结构、改名、加分隔),可以关闭自动重载。方法是编辑kitty.ini配置文件,加入:

[Launcher] reload=no

配置项模板可在 kitty_ini.txt 中查看(默认值为reload=yes)。对应源码读取逻辑为 kitty_launcher.c:

if( ReadParameter( "Launcher", "reload", buffer ) ) { if( !stricmp( buffer, "NO" ) ) LauncherConfReload = 0 ; }

关闭后,你可以直接用注册表编辑器(regedit)修改HKEY_CURRENT_USER\Software\9bis.com\KiTTY\Launcher下的键结构来定制菜单布局;之后每次Refresh(菜单中的 Refresh 项,即IDM_LAUNCHER+7)不会再覆盖你的手工调整——注意Refresh与"自动重载"的耦合点:当LauncherConfReload为 0 时,刷新仅重建菜单而不重建注册表键(kitty_launcher.c)。

六、[Launcher]节的其他可选配置项

除文档提到的reload外,源码中还支持以下同节配置,均可写入 kitty.ini 的[Launcher]节:

配置项默认行为作用源码位置
reloadyes设为no时禁止每次启动从已保存会话重建菜单树,改为手工维护注册表键kitty_launcher.c
classnameKiTTYLauncher自定义 Launcher 窗口类名,可用于与其他窗口实例区分或配合-sendcmd等按类名广播的功能kitty_launcher.c
alreadyRunCheckyes(未配置时视为 yes)设为no时允许多个 Launcher 实例同时运行;默认检测到同名窗口类已存在则直接退出kitty_launcher.c

说明:classname与alreadyRunCheck未在原始文档中列出,但从 kitty_launcher.c 的实现可以确认其存在与语义,属于同一配置节的有效选项。

七、Opened sessions:隐藏/显示正在运行的会话

Launcher 内置一个Opened sessions菜单,专门用于管理当前正在运行的 KiTTY 会话窗口。它的核心能力是:把某个(或全部)会话窗口从桌面和任务栏上完全隐藏,需要时再恢复显示——非常适合同时开启大量 SSH 会话、桌面空间紧张,或需要把长驻隧道/监控窗口收起来只留托盘图标的场景。

菜单功能项

在 kitty_launcher.c 中可以看到该菜单的组成:

  • Hide all / Unhide all:一键隐藏或恢复全部 KiTTY 窗口;
  • Window unique:切换"单窗口模式"——开启后同一时刻仅允许一个会话窗口可见,切换会话时自动隐藏其余窗口;
  • 每个运行中的 KiTTY 窗口一项(按窗口标题列出,前 100 个,TabWin[100]),并带复选框标记当前可见/隐藏状态,点击即可单独切换该窗口的显隐。

底层实现

窗口枚举通过EnumWindows+ 类名匹配(KiTTYClassName)实现(kitty_launcher.c),隐藏/显示动作则是向目标窗口发送WM_COMMAND:

void ManageHideOne( HWND hwnd ) { PostMessage( hwnd, WM_COMMAND, IDM_HIDE, 0 ) ; } void ManageUnHideOne( HWND hwnd ) { PostMessage( hwnd, WM_COMMAND, IDM_UNHIDE, 0 ) ; }

其中IDM_HIDE/IDM_UNHIDE/IDM_SWITCH_HIDE等命令 ID 定义于 kitty.h(0xA960/0xA970/0xA980)。这些消息最终由各个 KiTTY 会话窗口自己处理,从而做到从桌面与任务栏完全消失。

使用注意

  • 隐藏后的会话仍然在运行(连接不断),只是不可见;退出 Launcher(Quit)时会自动执行ManageUnHideAll恢复所有窗口(kitty_launcher.c);
  • 窗口列表基于类名匹配,因此若通过-classname自定义了窗口类名,需保证 Launcher 与目标窗口使用一致的类名才能被识别。

八、点击会话后的执行流程:从菜单项到新连接

当你在菜单中点击某个会话项时,WM_COMMAND分支(kitty_launcher.c)会调用RunSession,其核心逻辑(kitty_launcher.c)如下:

  1. 通过GetModuleFileName+GetShortPathName取得 kitty.exe 的短路径名;
  2. 若是注册表模式,把会话名mungestr编码后拼接为Sessions\<会话>键路径,校验会话是否存在;
  3. 构造命令行并交给RunCommand启动新进程:
    • 普通会话:kitty.exe -load "会话名";
    • 会话名以&结尾(KiTTY 的"启动即最小化到托盘"约定):追加-send-to-tray,即kitty.exe -load "会话名" -send-to-tray(适合 SSH 隧道等后台型连接);
    • 若带-putty标志(兼容模式),则在命令前加-putty以关闭 KiTTY 扩展特性。

目录模式(savemode=dir+ 文件夹浏览)下还会为带文件夹的会话附加-folder "文件夹名"参数(kitty_launcher.c),与 docs/pages/CommandLine.md 中-folder(必须位于-load之前)的说明互相印证。

九、典型使用场景小结

结合文档与源码,Session Launcher 最常见的几种用法是:

  1. 高频会话启动器:把kitty.exe -launcher加入开机自启,任何时刻左键点托盘图标即可在文件夹菜单中发起连接,免去打开主界面再翻找会话的步骤;
  2. 多会话桌面整理:同时维护大量监控/运维窗口时,用Opened sessions的 Hide all 把窗口全部收起,需要哪个再单独恢复,或开启Window unique保持同一时刻只有一个会话窗口可见;
  3. 后台隧道专用入口:把会话名以&结尾命名(如tunnel-prod&),从 Launcher 点击后自动以-send-to-tray方式在后台建立 SSH 隧道,不打扰当前工作;
  4. 团队共享菜单:关闭reload=no后手工维护注册表中的Launcher键,把菜单整理成团队约定的固定结构,再通过导出注册表键分发给同事。

十、常见问题排查

现象可能原因与解决办法
kitty.exe -launcher无反应当前构建未启用MOD_LAUNCHER宏(编译参数见 0.76_My_PuTTY/windows/MAKEFILE.MINGW),需使用完整功能的 KiTTY 版本
菜单里没有已保存会话Launcher 从Sessions键重建菜单,确认会话确实保存在HKEY_CURRENT_USER\Software\9bis.com\KiTTY\Sessions(或目录模式下的Sessions目录),并检查[Launcher] reload未被设为no
手工改的注册表菜单被覆盖reload=no未设置;补上该配置并重启 Launcher 后,Refresh不会再重建注册表键
隐藏的窗口找不回来了在Opened sessions菜单中点击对应窗口项(Unhide)或选择Unhide all;正常退出 Launcher 也会自动恢复全部窗口
托盘图标消失若 Explorer 崩溃,Launcher 监听了TaskbarCreated会自动重建图标;若未恢复,可重新运行kitty.exe -launcher

延伸阅读:文件夹机制详见 docs/pages/SessionsFilter.md;-launcher与其他命令行选项的完整清单见 docs/pages/CommandLine.md;Launcher 全部源码实现见 kitty_launcher.c,菜单递归构建逻辑见 kitty.c。

  • 通信
  • 网络

【免费下载链接】KiTTY

:computer: KiTTY, a free telnet/ssh client for Windows

项目地址:https://gitcode.com/gh_mirrors/kit/KiTTY
点击查看免费下载

相关推荐

上一篇:Linux上安装Photoshop CC v19的终极指南:免费专业图像处理体验
下一篇:终极三星固件下载工具samloader:无需Windows驱动的完整指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 2:01:40

SSM+Vue大学生就业系统:从毕设到可运行工程的完整实践指南

简介&#xff1a;本资源是一份面向高校计算机专业本科生及教育信息化研究者的《大学生就业信息管理系统》毕业设计文献综述&#xff0c;聚焦数据分析视角下的系统建设逻辑、应用瓶颈与优化路径。内容系统梳理了研究背景、理论意义、国内外研究现状及Java等关键技术选型依据&…

作者头像 李华
网站建设 2026/10/14 2:00:35

神经网络架构图画图神器:ML Visuals PPT模板使用指南

简介&#xff1a;这份神经网络画图PPT模版专为需要讲解机器学习与深度学习概念的科研人员、学生和教师设计&#xff0c;可快速搭建专业演示文稿。模版内含超过一百页幻灯片&#xff0c;覆盖Softmax、卷积、线性加和归一化、前馈网络、多头注意力机制、位置编码等关键结构&#…

作者头像 李华
网站建设 2026/10/14 2:00:27

工业机器视觉缺陷检测工作小结PPT:从算法指标到产线语言的落地指南

简介&#xff1a;这份PPT面向工业机器视觉缺陷检测方向的工程师与入门学习者&#xff0c;针对网上讲义零散、缺乏系统梳理的痛点&#xff0c;将作者在实际产线工作中积累的检测经验整理成一份可参考的工作小结。内容围绕视觉系统组成展开&#xff0c;涵盖图像采集、图像处理与运…

作者头像 李华
网站建设 2026/10/14 2:00:24

DeepSeek本地部署与训练解析:推理优化、LoRA微调与GRPO强化学习

简介&#xff1a;由郭震编写的一份10页图解PDF&#xff0c;面向希望深入理解并实践DeepSeek大模型的初学者、技术爱好者及研究人员&#xff0c;系统拆解本地部署与训练推理全流程。全文约2.66MB&#xff0c;共1个PDF文件&#xff0c;内容涵盖本地部署三大核心优势&#xff08;隐…

作者头像 李华
网站建设 2026/10/14 1:59:42

网络虚拟化原理与实战:Overlay方案、OVS调优与控制器选型

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华