PuTTY 在会话期间插入随机字符

PuTTY 在会话期间插入随机字符

我最近开始租用远程服务器的空间,以便可以开展一个项目。我发现在 Windows 机器上访问它的一种相对轻松的方式是通过 PuTTY。然而,使用它时有一件事总是让我恼火:有时似乎毫无理由地在光标处插入随机字符。

大多数情况下,它只是一个波浪符号,但很少会吐出看起来像转义序列的东西([[^8 或类似的东西)。只有当我专注于窗口时,它才会出现,无论我是在打字还是在距离键盘 20 英尺的地方。如果时间足够长,它会以随机间隔吐出波浪符号(平均约 1 分钟)。

最后,在运行 nano 或 mysql 界面等程序时,这种行为似乎不一致:在 nano 中,它不会插入波浪号,而是设置标记(ctrl-^);在 mysql 中,行将变得不可编辑。

我的问题是:其他人在PuTTY中遇到过这种行为吗?如果是这样,可以做些什么来防止/纠正这种行为?

答案1

我在使用 PuTTY 时也遇到了同样的问题,我发现这是由一个名为“caffeine”的应用程序引起的,该应用程序每分钟都会按一次 F13 键来阻止激活屏幕保护程序(组策略阻止我更改计算机上的屏幕保护程序超时)。禁用该应用程序解决了我的问题。

答案2

如果您希望运行 Putty 和 Caffeine,请按照以下步骤操作:

  1. 停止咖啡因
  2. 检查 Caffeine readme.txt 以了解模拟的默认按键 - 我的是F15
  3. 通过 Putty 登录到远程终端
  4. 启动 Caffeine(提示:以短间隔启动 Caffeine,例如 3 秒)。
  5. 使 Putty 会话成为焦点。
  6. 在 bash 命令提示符下按Ctrl+V(这是获取密钥的特殊代码所必需的。例如,尝试Ctrl+V后跟F12
  7. 等待 Caffeine 模拟密钥
  8. 键代码将显示在命令行上(例如, F15is ^[[28~,其中^[is escape)。停止Caffeine
  9. 现在你可以将此键绑定为空白,这样当 Caffeine 模拟它时,它就不会输入~
    • 编辑~/.inputrc(如果不存在则创建新文件)
    • 添加行"\e[28~":""
  10. 开始喝咖啡
  11. 重新启动终端会话
    • ~在 Linux 服务器上使用 Putty 终端时,应该不会再出现随机情况

答案3

我发现什雷扬斯普的解决方案是最令人满意的(但不是完全令人满意的)解决方案 :)
这是我改进它的尝试(当然 YMMV)。希望这对那些寻找解决方案的人有用 :)

我的解决方案如下:

  • 咖啡因向 Windows 发送适当的虚拟键代码,该代码:
    • 防止 Windows 进入睡眠或空闲状态
    • 不会在 Windows 上产生任何副作用,无论是单独使用还是组合使用(无 Ctrl、Shift、Alt、Alt-Gr、Win、F1-F5、F10 等)
    • 未发送到 Putty 或被 Putty 忽略

TL;DR:我的解决方案应用在步骤 2 和步骤 3 之间(见下文),并带有-key:0E咖啡因参数:
退出 Caffeine 并重新启动:(
caffeine.exe 5 -key:0E为了方便测试)
caffeine.exe 50 -key:0E(强制屏幕保护程序设置为 1 分钟)

  • read在远程主机上启动程序并观察每 5 秒或 50 秒没有收到任何击键。
  • 退出readCtrl+C

什雷扬斯普提出了一个解决方案,即在步骤 5 和步骤 10 之间应用修复(见下文)。
这样做的副作用(在我的配置上)是,每次击键时,putty 都会从 caffeine 转发到远程主机:

  • 它触发了‘按键时重置滚动条’(在 Putty/Window 页面上设置),
    这是我通常想要的,但只有当我(人类)按下按键而不是定期喝咖啡时才会触发:)
  • readline/bash 翻译版本(从'"\e[28~"''""'(空白键?)导致远程会话交互挂起几秒钟

为了轻松测试上述内容,退出 Caffeine 并以 5 秒间隔和虚拟键代码 07 重新启动它:
caffeine.exe 5 -key:07

  • 在远程主机上启动read程序并观察每 5 秒或 50 秒如何接收击键。
  • 退出readCtrl+C

据我了解,按键‘管道’是:

  1. Caffeine 向 Windows 发送虚拟键代码
  2. Windows 将虚拟键代码发送到 Putty
  3. Putty 根据一些会话设置进行一些“翻译”/“映射”:
    • 终端/*
    • 窗户/*
  4. Putty 将“翻译”/“映射”键代码发送到远程主机
  5. 在远程主机上,“终端”程序(例如:、、、、等等$TERM=xterm)将“线路协议”转换为键代码。vt100vt102vt220
  6. readline 库根据以下条件进行一些转换/映射:~/.inputrc
  7. readline 发送键代码给 bash
  8. bash 根据~/.bashrc(基于内置 bind 命令)进行一些转换/映射
  9. bash 或 readline (不确定哪一个)将翻译后的键代码发送到 nano (我的文本编辑器)
  10. screen通过添加程序(包括$TERM=screen步骤 5,并在步骤 6 到 10 再次循环),这个管道可以变得更长。

笔记:一旦进入第 4 步,精确控制“翻译”/“映射”的不同层次就变得非常困难。如果可以的话,我建议避免这种情况。


背景:
我使用了caffeine.exe -key:07很多年,才开始处理 pfsense 2.3.3-RELEASE-p1(基于 FreeBSD 10.3-RELEASE)。
然后,caffeine.exe -key:07在另一端收到的是^[[28~...,似乎映射到Ctrl+^Nano 中的 (Set Mark)。
这非常烦人(想象一下,有人在记事本中移动文本插入符号时按住 Shift 键)。

之前,我在 Putty 设置中做了大量自定义,以获得我~/.tcshrc认为的基本功能(,,,,,,,,,,Numpad ,Numpad )在bash/nano/screen 之间一致运行~/.inputrc~/.bashrc~/.nanorc~/.screenrcBackspaceDeleteHomeEndPgUpPgDownCtrl+LeftCtrl+Right0-9./*-+

一旦我发现了这个caffeine.exe -key:07“错误”,我就不想再重新追溯它了:)


已测试:
视窗8.1 64 位企业版 (6.3.9600) /油灰0.66 /普福斯2.3.3-RELEASE-p1(基于FreeBSD10.3-发布)/狂欢4.4.12-发布 /纳米2.7.3 /屏幕4.04.00


参考:

答案4

更好的解决方案是在您的 putty 会话上配置设置,以便 Caffine 不会干扰它。

在 Putty 中的 Terminal Keyboard 下选择 SCO 选项。在 Putty 中的 Terminal Bell 下将操作更改为 None(关闭铃声)。

Caffine 仍会执行其工作,并且不会干扰您的 Putty 会话。(我在 Putty 会话期间不使用 Fn 键,因此我不知道如果您想使用 Fn 键会发生什么)。

相关内容