tmux_for_windows windows上面安装 git bash 2026年 正是专门为了解决“SSH 掉线后还能继续原来的会话”这个问题而设计的工具

tmux_for_windows

tmux是一个开源工具,用于在一个终端窗口中运行多个终端会话。本工具从msys2里提取,可以在Git for Windows的Git Bash (MingW64)下正常使用。

蘭雅sRGB 龙芯小本服务器 | https://262235.xyz

##tmux(以及 screen)正是专门为了解决“SSH 掉线后还能继续原来的会话”这个问题而设计的工具。

简单来说:

工具SSH 掉线后还能连上原来的会话吗?说明
普通 bash / zsh不能会话结束,进程收到 SIGHUP 信号,通常被杀死
tmux会话独立于 SSH 连接存在,掉线后可以随时重新 attach
screen和 tmux 功能几乎一样,但 tmux 现在更流行、功能更强
zellij更现代的替代品,但普及度不如 tmux

tmux 的典型用法(SSH 掉线后重连)

  1. SSH 掉线了也没关系(关浏览器、断网、电脑关机都行)

如果忘记会话名字了,可以先列出所有 tmux 会话

tmux ls# 看到类似:# mytrain: 1 windows (created Tue Feb 25 19:45:12 2026) [80x24]

然后再 attach 上去。

过一会儿重新 SSH 登录服务器,然后重新连上原来的 tmux 会话

tmux attach -t mytrain # 或者简写 tmux a -t mytrain 

连上后,你会看到程序还在跑,输出还在继续,窗口布局、进程状态全部保留。

在 tmux 里面跑你的程序(比如训练脚本)

python standalone_warmup_with_wandb.py ... 

登录服务器后,先启动一个 tmux 会话

tmux new -s mytrain # -s 后面是会话名字,随便起

常用快捷键(在 tmux 里按 Ctrl+b 再按下面键)

  • d → detach(脱离会话,但不关闭,程序继续跑)
  • c → 新建窗口
  • n / p → 切换下一个/上一个窗口
  • , → 重命名当前窗口
  • w → 窗口列表(鼠标或键盘选)
  • Ctrl+b ? → 查看所有快捷键帮助

小贴士

  • 更极端的场景(怕 tmux 本身被杀)
    可以再套一层 nohup 或用 systemd 服务,但 99% 的情况 tmux 就够用了。

如果服务器上没有 tmux,先安装:

# Ubuntu/Debiansudoapt update &&sudoaptinstall tmux -y # CentOS/RHELsudo yum install tmux -y 

如果你经常用,建议把 tmux 配置得更舒服一点(~/.tmux.conf)
常见优化:

# 改前缀键为 Ctrl+a(很多人觉得比 Ctrl+b 好按)set -g prefix C-a unbind C-b bind C-a send-prefix # 鼠标支持(可选)set -g mouse on # 窗口从 1 开始编号(更直观)set -g base-index 1 setw -g pane-base-index 1

总结一句话:

tmux 就是为“SSH 掉线后还能连回原来的程序”而生的,用起来非常稳。
只要你先 tmux new -s xxx 再跑训练,掉线后再 tmux a -t xxx 就能无缝接上。强烈建议你现在就试一次。

tmux在windows系统下安装使用

https://youtu.be/zSUwczhdtKI

https://github.com/yanggg1133/tmux_for_windows/

首先你要保证已经安装有 Git for Windows

下载地址 https://git-scm.com/download/win

关闭

tmux kill-session -t 会话名

tmux for Git Bash (MingW64) 安装包使用

  • 下载 tmux_for_git-bash.zip
  • 释放文件到 D:\Git\usr
  • ** 默认是C:\Program Files\Git\usr**
  • 实际可执行文件在 D:\Git\usr\bin\tmux.exe

** 默认是C:\Program Files\Git\usr\bin**

tmux 使用

  • Windows 开始菜单 运行 D:\Git\git-bash.exe
  • 命令行输入 tmux

git-bash环境下命令行安装

git clone https://github.com/hongwenjun/tmux_for_windows.git cd tmux_for_windows/ unzip -x tmux_for_git-bash.zip -d /usr 

原始的 tmux for msys2 的安装包,不需要下载

# tmux-2.7-1 旧版本 tmux_for_windows/tmux_271 a31b2636ff7540ec11a38ac4d9c95dc9 libevent-2.1.8-1-x86_64.pkg.tar.xz a7ac01f4ccef1ecedf9ef346fb2c818e tmux-2.7-1-x86_64.pkg.tar.xz ba061b3687f77dde53658a95793e952e tmux_for_git-bash.zip # 旧版本 # tmux-3.1-c1 新版本 tmux_for_windows/tmux_311 9abfa52145cf5a7e591847f58a5253e3 libevent-2.1.12-2-x86_64.pkg.tar.zst b433f58e1267f5582de43d2e9d78d82d tmux-3.1.c-1-x86_64.pkg.tar.zst 

tmux 启用鼠标操作

.tmux.conf 设定

cd ~ vim ~/.tmux.conf # # https://www.youtube.com/watch?v=xTplsyQaGFs # tmux 启用鼠标操作 setw -g mouse set-option -g history-limit 20000 set-option -g mouse on bind -n WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M bind -n WheelDownPane select-pane -t= \; send-keys -M 

fish_for_git-bash

Fish 是"the friendly interactive shell"的简称,最大特点就是方便易用。很多其他 Shell 需要配置才有的功能,Fish 默认提供,不需要任何配置。

fish for Git Bash (MingW64) 安装包使用

fish 使用教程

  • http://fishshell.com/docs/current/tutorial.html

原始的 fish for msys2 的安装包,不需要下载

Path: tmux_for_windows/fish_312 9cb0219a335d2b54c388cbf25c2ea456 bc-1.07.1-2-x86_64.pkg.tar.xz 4fd6c824c616709966167fdc5f1a5195 fish-3.1.2-1-x86_64.pkg.tar.zst b882faf644ccd4770f7c3002e1dc6d71 groff-1.22.4-1-x86_64.pkg.tar.xz 0d78c572a6cd9f0bf88e2b0ceedf62e6 libpcre2_16-10.35-1-x86_64.pkg.tar.zst f3d45b93b85a9d57c978224bd8111c09 libpipeline-1.5.2-1-x86_64.pkg.tar.xz 4dd5d447bb0e160502afe95a1bafe044 man-db-2.9.3-1-x86_64.pkg.tar.zst 

把fish设为交互式shell

如果不将fish设为默认shell,就能照常运行Bash的初始化脚本。这能够保证用户当前的环境变量不受影响并且在fish中也能使用,因为fish是作为Bash的子进程运行的。下面是几种只把fish设为交互式shell的方法。

通过.bashrc启动fish

保持默认shell为Bash不变,然后添加一行exec fish到合适的Bash配置文件中,比如.bashrc。在这种方法中,Bash会正常执行/etc/profile和/etc/profile.d中的所有配置文件。相对于之后几种方法,这种是最通用的,因为这种方法在本机计算机和SSH远程计算机上都能使用。

使用终端复用器的选项

要将fish设为tmux启动的默认shell,在~/.tmux.conf中加入这行:

set-option -g default-shell “/usr/bin/fish”

关闭问候语

默认情况下,每次启动fish,fish都会打印问候语。要关闭问候语,可以在fish中运行:

set -U fish_greeting

网页界面

通过下面命令即可用浏览器打开fish的配置页面。

fish_config

你现在遇到的这个提示 sessions should be nested with care, unset $TMUX to force,是因为你已经在一个 tmux 会话里,又尝试启动新的 tmux 会话(tmux 默认不推荐嵌套会话),所以给出了这个警告。

问题分析与解决方法

1. 先理解核心原因

$TMUX 是一个环境变量,当你处于 tmux 会话中时,这个变量会被自动设置(指向当前 tmux 会话的套接字)。tmux 检测到这个变量存在,就会阻止你直接启动新的嵌套会话,避免使用混乱。

2. 分场景解决
场景 A:你想退出当前 tmux 会话,重新启动

这是最常见的正常使用场景,步骤如下:

  • 先退出当前 tmux 会话:在 tmux 窗口中输入 exit 并回车,回到原生的终端界面。
  • 再重新启动 tmux:执行 tmux.exe,此时就能正常创建新的 tmux 会话,不会再出现警告。
场景 B:你确实需要嵌套 tmux 会话(不推荐,仅特殊场景用)

如果有特殊需求必须嵌套(比如远程服务器里的 tmux 套本地 tmux),可以强制取消 $TMUX 变量后启动:

# 临时取消 $TMUX 变量,强制启动嵌套会话unset TMUX && tmux.exe 

⚠️ 注意:嵌套会话会导致快捷键、窗格管理混乱(比如前缀键会被多层 tmux 拦截),非必要不建议这么做。

场景 C:检查是否误进入 tmux(确认当前状态)

如果你不确定自己是否在 tmux 里,可以执行以下命令验证:

# 查看 $TMUX 变量是否存在echo$TMUX# 如果输出非空(比如类似 /tmp/tmux-1000/default,5678,0),说明当前在 tmux 会话中# 如果输出为空,说明在原生终端

补充:tmux 基础使用小技巧

避免后续再遇到类似问题,记住几个常用操作:

  • 新建会话:tmux new -s 会话名(比如 tmux new -s mysession,方便管理多个会话)
  • 列出所有会话:tmux ls
  • 分离会话(保留会话后台运行):按 前缀键(Ctrl+b) + d
  • 重新连接会话:tmux attach -t 会话名(比如 tmux attach -t mysession
  • 关闭会话:在会话中输入 exittmux kill-session -t 会话名

总结

  1. 核心原因:当前终端已处于 tmux 会话中($TMUX 变量存在),tmux 阻止嵌套启动新会话。
  2. 优先解决方案:执行 exit 退出当前 tmux 会话,再重新运行 tmux.exe
  3. 特殊场景:必须嵌套时用 unset TMUX && tmux.exe 强制启动(不推荐)。

你提供的这段 tmux 配置整体思路是对的(启用鼠标、调整历史行数、绑定滚轮操作),但存在两处关键语法错误,会导致 tmux 解析失败(也就是你之前遇到的服务器退出、命令报错问题),我先帮你修正,再详细解释问题和原因。

第一步:修正后的正确配置

# tmux 启用鼠标操作(兼容不同 tmux 版本) setw -g mouse on # 旧版 tmux 窗口级鼠标配置(补全缺失的 on) set-option -g history-limit 20000# 调整滚动历史行数(正确) set-option -g mouse on # 新版 tmux 全局鼠标配置(正确)# 绑定鼠标滚轮上下滚动(修正语法错误,适配 tmux 滚轮事件)bind -n WheelUpPane select-pane -t=\; copy-mode -e \; send-keys -M bind -n WheelDownPane select-pane -t=\; send-keys -M 

第二步:你的配置中的核心问题分析

问题 1:setw -g mouse 语法不完整(最关键)
  • 错误写法:setw -g mouse
  • 问题原因:tmux 的 mouse 选项是布尔型(开/关),必须指定 onoff,只写 mouse 会被 tmux 判定为“未知命令”,直接导致配置解析失败。
  • 修正:setw -g mouse on(补全 on,明确开启窗口级鼠标)。
问题 2:WheelDownPane 绑定逻辑无错误,但需注意版本兼容(非语法错,优化点)

你的 bind -n WheelDownPane 写法语法上没问题,但补充说明:

  • send-keys -M 是 tmux 用来传递鼠标事件的指令,滚轮向下滚动时不需要进入 copy-mode(向上需要),所以你的写法是合理的;
  • 部分新版 tmux 中 select-pane -t= 可以简化为 select-pane,效果一致,不影响使用。

第三步:配置解释(帮你理解每一行的作用)

配置行作用说明
setw -g mouse on针对 tmux 2.1 及以下版本,开启窗口级鼠标支持(选窗格、调整大小等)
set-option -g history-limit 20000将 tmux 终端的滚动历史行数从默认(约2000)提升到20000,能滚动看更多历史输出
set-option -g mouse on针对 tmux 2.2+ 版本,开启全局鼠标支持(新版推荐写法,覆盖窗口/会话级)
bind -n WheelUpPane ...绑定鼠标滚轮向上:选中当前窗格 → 进入复制模式 → 触发向上滚动事件
bind -n WheelDownPane ...绑定鼠标滚轮向下:选中当前窗格 → 触发向下滚动事件(无需复制模式)

第四步:验证配置是否生效

修复后按以下步骤验证,确保无报错:

  1. 保存修正后的配置到 /c/Users/Administrator/.tmux.conf
  2. 验证效果:
    • 鼠标能点击切换窗格、拖动调整窗格大小;
    • 滚轮能上下滚动查看终端历史输出;
    • 无任何 unknown commandserver exited unexpectedly 报错。

重新加载配置并启动 tmux:

tmux source /c/Users/Administrator/.tmux.conf tmux.exe 

先杀掉可能崩溃的 tmux 进程:

tmux kill-server 

总结

  1. 核心错误:setw -g mouse 缺少 on,导致 tmux 解析配置时识别为无效命令,是服务器崩溃的主要原因;
  2. 其他要点:你的滚轮绑定逻辑正确,仅需补全鼠标选项的 on 即可正常使用;
  3. 关键验证:修复后执行 tmux kill-server + tmux source 配置文件 + tmux.exe,无报错且鼠标/滚轮功能正常即为配置生效。

如果启动后还有小问题(比如滚轮滚动不灵敏),可以告诉我你的 tmux 版本(执行 tmux -V 查看),我再帮你微调适配版本的配置。

你现在遇到的这个错误包含两个核心问题:一是 [server exited unexpectedly] 说明 tmux 服务器意外退出,二是 usage: send-keys [-FH1MRX] [-N repeat-count] [-t target-pane] key 提示你使用 send-keys 命令时格式错误,这两个问题通常是因为 .tmux.conf 配置文件里的 send-keys 命令写法不合法,导致 tmux 启动时解析失败、服务器崩溃。

问题分析与解决步骤

1. 先定位核心原因

send-keys 是 tmux 里用于向指定窗格发送按键/命令的指令,它有严格的语法要求:

  • 必须指定 目标窗格(可选)要发送的键/命令(必选)
  • 不能有多余的字符、错位的参数,也不能缺少核心的“要发送的内容”

你的错误就是配置文件中某一行 send-keys 命令的参数/格式写错了,tmux 启动时解析失败,直接导致服务器意外退出,并抛出用法提示。

2. 具体解决步骤
步骤 1:临时跳过配置文件,验证问题根源

先启动不加载配置的 tmux,确认是配置文件的问题:

# 启动 tmux 但不加载 .tmux.conf,验证是否能正常运行 tmux -f /dev/null new-session 

如果能正常进入 tmux 会话,说明确实是 .tmux.conf 里的错误配置导致的问题;如果还是报错,再检查系统环境,但99%的情况都是配置文件的问题。

步骤 2:检查并修复 .tmux.conf 中的 send-keys 命令

打开你的配置文件,找到所有包含 send-keys 的行,按正确语法修正:

# 编辑配置文件vim /c/Users/Administrator/.tmux.conf 
常见错误示例 & 修正方案
错误写法(导致崩溃)正确写法(示例)说明
send-keys(无任何参数)send-keys "ls -l"(发送命令)必须指定要发送的内容
send-keys -t 1(缺内容)send-keys -t 1 "cd /tmp"(指定窗格+内容)参数不完整,缺核心的key
send-keys "echo hello" -N(参数错位)send-keys -N 2 "echo hello"(参数在前)参数要写在内容前面
正确的 send-keys 用法示例(可参考)

如果你的配置里想绑定快捷键并发送命令,正确写法比如:

# 示例1:绑定 F5 键,向当前窗格发送 "clear && ls" 并回车bind F5 send-keys "clear && ls" C-m # 示例2:新建窗格后,自动发送 cd 命令到新窗格bind -n C-s split-window -v \; send-keys -t bottom "cd /c/Users/Administrator" C-m # 示例3:重复发送 2 次 "hello" 到编号为 1 的窗格 send-keys -N 2 -t 1"hello"

⚠️ 关键:C-m 代表“回车”,如果想让发送的命令自动执行,必须加这个;所有参数(-N/-t等)要放在“要发送的内容”前面。

步骤 3:保存并验证修复
  • 保存配置文件:vim 中按 Esc → 输入 :wq 回车。

重新加载配置并启动 tmux:

# 先杀掉崩溃的 tmux 服务器 tmux kill-server # 重新加载配置 tmux source /c/Users/Administrator/.tmux.conf # 启动 tmux tmux.exe 

如果能正常进入 tmux 会话,说明配置已修复;如果还有报错,继续检查配置文件中其他 send-keys 行,确保没有语法错误。

3. 补充:如果找不到 send-keys 错误行

如果不确定哪一行错了,可以清空配置文件,逐行添加配置并测试,定位错误行:

# 先备份原配置cp /c/Users/Administrator/.tmux.conf /c/Users/Administrator/.tmux.conf.bak # 清空配置文件echo""> /c/Users/Administrator/.tmux.conf # 启动 tmux,确认能正常运行 tmux.exe 

然后逐行把备份的配置加回去,每加一行就执行 tmux source 配置文件 测试,直到出现报错,就能精准定位错误的 send-keys 行。

总结

  1. 核心原因:.tmux.confsend-keys 命令语法错误(缺参数/参数错位/无发送内容),导致 tmux 解析失败、服务器意外退出。
  2. 修复关键:检查配置文件中所有 send-keys 行,按 send-keys [参数] 要发送的内容 格式修正,确保参数完整、顺序正确。
  3. 验证方法:先通过 tmux -f /dev/null 确认 tmux 本身可用,再修复配置文件,重启 tmux 验证是否正常运行。

Read more

PyTorch实战——基于文本引导的图像生成技术与Stable Diffusion实践

PyTorch实战——基于文本引导的图像生成技术与Stable Diffusion实践

PyTorch实战——基于文本引导的图像生成技术与Stable Diffusion实践 * 0. 前言 * 1. 基于扩散模型的文本生成图像 * 2. 将文本输入编码为嵌入向量 * 3. 条件 UNet 模型中的文本数据融合机制 * 4. 使用 Stable Diffusion 模型生成图像 * 相关链接 0. 前言 在本节中,我们将为扩散模型添加文本控制能力。学习如何通过文字描述来引导图像生成过程,实现从"纯噪声+文本"生成图像,而不仅是从纯噪声生成。 1. 基于扩散模型的文本生成图像 在扩散模型的 UNet 模型训练流程中,我们仅训练模型从含噪图像中预测噪声。为实现文生图功能,需使用以下架构,将文本作为额外输入注入 UNet 模型: 这样的 UNet 模型称为条件 UNet 模型 ,或者更精确地说,是文本条件 UNet

By Ne0inhk
什么是Agentic AI?Agentic AI 与传统 AIGC 有什么区别?

什么是Agentic AI?Agentic AI 与传统 AIGC 有什么区别?

什么是 Agentic AI?Agentic AI 与传统 AIGC 有什么区别? 1. 引言 近年来,人工智能(AI)技术飞速发展,其中以生成式 AI(AIGC,Artificial Intelligence Generated Content)和 Agentic AI(智能代理 AI)最为热门。AIGC 通过深度学习模型生成文本、图像、视频等内容,而 Agentic AI 则更进一步,能够自主感知、决策并执行任务。那么,Agentic AI 究竟是什么?它与传统的 AIGC 有何不同?在本文中,我们将深入探讨 Agentic AI 的概念、技术原理、

By Ne0inhk
AI安全:视觉提示词注入攻击代码/实战教学| 针对Hugging Face开源大模型Stable Diffusion Model

AI安全:视觉提示词注入攻击代码/实战教学| 针对Hugging Face开源大模型Stable Diffusion Model

提到提示词注入(Prompt Injection),大家的第一反应往往是精心构造的文本越狱指令。 而在图生图任务中,输入图像在本质上扮演了视觉提示词的角色,与文本指令共同指导生成模型。 基于这一视角,本文展示针对视觉提示词的注入攻击:通过PGD对抗攻击算法对输入图像进行像素级微调,使其生成的违规图像能够绕过开源大模型的NSFW安全检测机制。 临近毕业,感觉市场对提示词注入比较感兴趣,因本人读博期间一直研究对抗攻击算法,所以决定尝试用对抗攻击的思路完成提示词注入攻击,误导开源模型生成违规图像。 完整代码链接:https://github.com/YujiangLi0v0/Injection_Attack_Inpainting.git 目录 * 一、 NSFW防线:开源模型的安全过滤机制 * 二、 攻击场景定义 (Threat Model) * 三、 环境搭建 * 四、 核心攻击流程详解 * 4.1. 固定随机因子 * 4.2 数据预处理 * 4.3. 攻击部分 * 4.3.1 重写扩散模型推理过程

By Ne0inhk
在昇腾 NPU 上跑 Llama 大模型:从 “踩坑到通关” 的全程实战记

在昇腾 NPU 上跑 Llama 大模型:从 “踩坑到通关” 的全程实战记

在昇腾 NPU 上跑 Llama 大模型:从 “踩坑到通关” 的搞笑实战记 本文分享了在昇腾 NPU 上部署测试 Llama-2-7B 大模型的全过程。提供踩坑经验。作者因其他硬件价格高、服务器昂贵,选择昇腾 NPU,其自主可控的达芬奇架构、完善的开源生态及 GitCode 免费测试资源是主要吸引力。文中详细介绍了 GitCode 上创建昇腾 Notebook 实例的关键配置、环境验证方法,以及安装 transformers 库、下载部署模型的步骤,还记录了遇到的 “torch.npu 找不到”“模型下载需权限” 等四个常见问题及解决方案。通过测试英文生成、中文对话、代码生成三种场景,得出 16-17 tokens/s 的吞吐量,虽低于预期但性能稳定,并给出使用 MindSpeed-LLM 框架、

By Ne0inhk