Freedo Asked: 2020-02-15 01:52:24 +0800 CST2020-02-15 01:52:24 +0800 CST 2020-02-15 01:52:24 +0800 CST 在linux上强制putty使用右键粘贴 772 有没有办法putty在 Zorin OS(基于 Ubuntu)上强制允许通过右键单击粘贴。 我喜欢windows的行为,当按下右键时,粘贴选定的东西。 keyboard-shortcuts putty 6 个回答 Voted Best Answer Arkadiusz Drabczyk 2020-02-27T09:06:10+08:002020-02-27T09:06:10+08:00 正如用户 @ateijelo在他们的回答中所说,在 Unix 上无法使用“妥协(中间扩展,右粘贴)”,因为它没有实现。我不知道为什么不是,您应该向 Putty 开发人员询问,很可能甚至没有人要求它。但是,由于开源的性质,您始终可以修改程序的源代码以满足您的需求并使用它。以下补丁将修改右键单击的默认行为并使其粘贴文本: diff --git a/unix/gtkwin.c b/unix/gtkwin.c index 5660ee9..4f2ec2b 100644 --- a/unix/gtkwin.c +++ b/unix/gtkwin.c @@ -447,7 +447,7 @@ static Mouse_Button translate_button(Mouse_Button button) if (button == MBT_MIDDLE) return MBT_PASTE; if (button == MBT_RIGHT) - return MBT_EXTEND; + return MBT_PASTE; return 0; /* shouldn't happen */ } diff --git a/unix/uxsftpserver.c b/unix/uxsftpserver.c index a90344e..6fab0ba 100644 --- a/unix/uxsftpserver.c +++ b/unix/uxsftpserver.c @@ -412,16 +412,6 @@ static void uss_fstat(SftpServer *srv, SftpReplyBuilder *reply, } } -#if !HAVE_FUTIMES -static inline int futimes(int fd, const struct timeval tv[2]) -{ - /* If the OS doesn't support futimes(3) then we have to pretend it - * always returns failure */ - errno = EINVAL; - return -1; -} -#endif - /* * The guts of setstat and fsetstat, macroised so that they can call * fchown(fd,...) or chown(path,...) depending on parameters. 您必须获取 Putty 源代码、应用补丁并重新构建 Putty。虽然这是一个简单的过程。 克隆腻子存储库: git clone git://git.tartarus.org/simon/putty.git && cd putty 将上面粘贴的补丁保存到 MBT_PASTE.patch 并应用它(如果直接从http://drabczyk.org/MTB_PASTE.patch下载补丁失败): git apply MTB_PASTE.patch 构建腻子: $ cd unix $ ../mkfiles.pl && ../mkauto.sh $ make -j$(nproc) -f Makefile.gtk LDFLAGS="-Wl,--no-as-needed,-ldl" 在我的机器上构建只需 6 秒。启动新建的 Putty 二进制文件: ./putty 您应该看到所有已保存的会话和设置,就像您使用发行版的包管理器盯着安装在系统范围内的 Putty 一样。您现在应该能够通过右键单击粘贴选定的文本。如果您不想自己重新编译 Putty 并且您 相信我,您可以从这里 http://drabczyk.org/putty获得预编译的二进制文件。 这种方法当然有它的缺点。我介绍的更改尚未被 Putty 开发人员正式接受,这意味着您现在正在使用 fork。如果您使用发行版的包管理器替换安装的 Putty 二进制文件,则每次使用发行版的包管理器更新 Putty 时都会替换它(有时您甚至可能没有意识到 Putty 正在更新,例如在运行大规模系统升级时) . 或者,您可以将 Putty 的 fork 放在其他地方,例如放在并添加到您的~/bin前面,以便在系统范围的 Putty 二进制文件之前选择 fork。我也不知道这个小小的变化会导致哪些不想要的副作用(如果有的话)。~/bin$PATH 我也在考虑使用xdotool,但我不确定你是运行 X 还是 Wayland,我认为修改源代码中的一行更容易。 Michael D. 2020-02-25T11:15:07+08:002020-02-25T11:15:07+08:00 按住 CTRL + 右键单击腻子窗口将允许您从菜单中选择“从剪贴板粘贴”或“复制到剪贴板”。足够接近? ateijelo 2020-02-28T10:43:12+08:002020-02-28T10:43:12+08:00 好的,根据@arkadiusz-drabczyk 的回答,我将详细说明如何在 Debian 上制作自己的 PuTTY 版本: 在 apt 源文件中启用源 URI。这可以通过许多发行版中的 UI 来完成: 或者通过确保 /etc/apt/sources.list 中有如下所示的行: deb-src http://deb.debian.org/debian/ stable main contrib non-free 一旦你有了这些,请按照下列步骤操作: mkdir putty cd putty sudo apt-get update sudo apt-get install wget sudo apt-get build-dep putty apt-get source putty cd putty-0.70 sed -i 's/return MBT_EXTEND/return MBT_PASTE/' unix/gtkwin.c dpkg-buildpackage -b --no-sign cd .. sudo dpkg -i putty_0.70-6_amd64.deb putty-tools_0.70-6_amd64.deb 检查它所说的位置0.70并更改为适合您的版本。这应该会安装您修改后的 PuTTy。 ctrl-alt-delor 2020-02-22T01:39:37+08:002020-02-22T01:39:37+08:00 MS-Windows/dos/cmd 终端具有粘贴最后选择绑定到右键单击的功能(如果启用)。腻子可能也在做同样的事情。 许多 X11 程序都有这个绑定到中键。但是,无需通过额外的单击来选择选择。这将适用于 openssh。 虽然我不知道为什么有人会在 Microsoft 的 Windows 之外使用 PuTTY(它是 MS-Windows 的 ssh 以帮助人们逃生,不如 konsole 中的 open-ssh-client 好)。我已经确认中键确实会粘贴到 Debian 10 上的 PuTTY 终端中: Putty Release 0.70 Build platform: 64-bit Unix (GTK + X11) Compiler: gcc 8.3.0 Compiled against GTK version 3.24.5 Source commit: 3cd10509a51edf5a21cdc80aabf7e6a934522d47 ateijelo 2020-02-25T15:59:10+08:002020-02-25T15:59:10+08:00 我不带来好消息。文档是这样说的: Windows 通常只有两个鼠标按钮,因此在 Windows 上运行时,PuTTY 是可配置的。在 PuTTY 的默认配置(“妥协”)中,右键粘贴,中间按钮(如果有的话)扩展选择。 如果您有一个三键鼠标并且您已经习惯了 xterm 排列,您可以使用“鼠标按钮的操作”控件来选择它。 实际上,配置还有一个附加部分: 并且即使您MouseIsXterm=1在保存会话的配置文件中设置了该选项,PuTTY 也仅在 Windows 中运行时才会关注它。mouse_is_xterm在源文件windows.c中搜索。 如果你经常使用 Linux,我建议你训练你的肌肉记忆到中键粘贴,当你在 Windows 中使用 PuTTY 时,也这样做。它是所有 Linux 终端的标准,如果你试图改变它,你将面临一场艰苦的战斗。一些终端可能允许,但大多数不允许。 TheBeardedQuack 2020-02-25T08:06:55+08:002020-02-25T08:06:55+08:00 虽然我不知道如何强制 putty 在 Linux 上使用右键单击,但我建议(像其他答案一样)尽可能使用更好的程序。 这里的每个人都假设您正在使用 putty 进行 SSH,如果是这种情况,我建议您使用标准终端和 SSH 程序。 但是,如果您使用的是串行接口,我建议您改用屏幕终端仿真器。例如,我像这样启动它sudo --group dialout screen /dev/ttyUSB0 115200来与我们的串行设备交互。使用这种方法,您只能获得即时窗口,如果您需要访问回滚,则必须使用热键 Ctrl+a,[ 然后您可以使用箭头键浏览历史记录。只需按 Esc 即可退出复制模式并返回当前行。 如果您的终端支持,使用您的标准终端允许您通过右键单击或热键来复制和粘贴任何其他终端程序。使用屏幕,您还可以获得一大堆功能,这些功能可能有用也可能没用,具体取决于您需要做什么。 对于 Telnet 和 putty 支持的其他通信,我确信 Linux 有很多类似的替代方案可用。 如果这不涵盖您的用例,我建议修改您的问题,让我们知道您在使用 putty 做什么,以便我们提供最佳建议。
正如用户 @ateijelo在他们的回答中所说,在 Unix 上无法使用“妥协(中间扩展,右粘贴)”,因为它没有实现。我不知道为什么不是,您应该向 Putty 开发人员询问,很可能甚至没有人要求它。但是,由于开源的性质,您始终可以修改程序的源代码以满足您的需求并使用它。以下补丁将修改右键单击的默认行为并使其粘贴文本:
您必须获取 Putty 源代码、应用补丁并重新构建 Putty。虽然这是一个简单的过程。
克隆腻子存储库:
将上面粘贴的补丁保存到 MBT_PASTE.patch 并应用它(如果直接从http://drabczyk.org/MTB_PASTE.patch下载补丁失败):
构建腻子:
在我的机器上构建只需 6 秒。启动新建的 Putty 二进制文件:
您应该看到所有已保存的会话和设置,就像您使用发行版的包管理器盯着安装在系统范围内的 Putty 一样。您现在应该能够通过右键单击粘贴选定的文本。如果您不想自己重新编译 Putty 并且您 相信我,您可以从这里 http://drabczyk.org/putty获得预编译的二进制文件。
这种方法当然有它的缺点。我介绍的更改尚未被 Putty 开发人员正式接受,这意味着您现在正在使用 fork。如果您使用发行版的包管理器替换安装的 Putty 二进制文件,则每次使用发行版的包管理器更新 Putty 时都会替换它(有时您甚至可能没有意识到 Putty 正在更新,例如在运行大规模系统升级时) . 或者,您可以将 Putty 的 fork 放在其他地方,例如放在并添加到您的
~/bin
前面,以便在系统范围的 Putty 二进制文件之前选择 fork。我也不知道这个小小的变化会导致哪些不想要的副作用(如果有的话)。~/bin
$PATH
我也在考虑使用
xdotool
,但我不确定你是运行 X 还是 Wayland,我认为修改源代码中的一行更容易。按住 CTRL + 右键单击腻子窗口将允许您从菜单中选择“从剪贴板粘贴”或“复制到剪贴板”。足够接近?
好的,根据@arkadiusz-drabczyk 的回答,我将详细说明如何在 Debian 上制作自己的 PuTTY 版本:
在 apt 源文件中启用源 URI。这可以通过许多发行版中的 UI 来完成:
或者通过确保 /etc/apt/sources.list 中有如下所示的行:
一旦你有了这些,请按照下列步骤操作:
检查它所说的位置
0.70
并更改为适合您的版本。这应该会安装您修改后的 PuTTy。MS-Windows/dos/cmd 终端具有粘贴最后选择绑定到右键单击的功能(如果启用)。腻子可能也在做同样的事情。
许多 X11 程序都有这个绑定到中键。但是,无需通过额外的单击来选择选择。这将适用于 openssh。
虽然我不知道为什么有人会在 Microsoft 的 Windows 之外使用 PuTTY(它是 MS-Windows 的 ssh 以帮助人们逃生,不如 konsole 中的 open-ssh-client 好)。我已经确认中键确实会粘贴到 Debian 10 上的 PuTTY 终端中:
我不带来好消息。文档是这样说的:
实际上,配置还有一个附加部分:
并且即使您
MouseIsXterm=1
在保存会话的配置文件中设置了该选项,PuTTY 也仅在 Windows 中运行时才会关注它。mouse_is_xterm
在源文件windows.c中搜索。如果你经常使用 Linux,我建议你训练你的肌肉记忆到中键粘贴,当你在 Windows 中使用 PuTTY 时,也这样做。它是所有 Linux 终端的标准,如果你试图改变它,你将面临一场艰苦的战斗。一些终端可能允许,但大多数不允许。
虽然我不知道如何强制 putty 在 Linux 上使用右键单击,但我建议(像其他答案一样)尽可能使用更好的程序。
这里的每个人都假设您正在使用 putty 进行 SSH,如果是这种情况,我建议您使用标准终端和 SSH 程序。
但是,如果您使用的是串行接口,我建议您改用屏幕终端仿真器。例如,我像这样启动它
sudo --group dialout screen /dev/ttyUSB0 115200
来与我们的串行设备交互。使用这种方法,您只能获得即时窗口,如果您需要访问回滚,则必须使用热键 Ctrl+a,[ 然后您可以使用箭头键浏览历史记录。只需按 Esc 即可退出复制模式并返回当前行。如果您的终端支持,使用您的标准终端允许您通过右键单击或热键来复制和粘贴任何其他终端程序。使用屏幕,您还可以获得一大堆功能,这些功能可能有用也可能没用,具体取决于您需要做什么。
对于 Telnet 和 putty 支持的其他通信,我确信 Linux 有很多类似的替代方案可用。
如果这不涵盖您的用例,我建议修改您的问题,让我们知道您在使用 putty 做什么,以便我们提供最佳建议。