设置 X11 转发

设置 X11 转发

我正在尝试从我的 mac 上通过 ssh 会话剪切粘贴一些交换机配置。它似乎在设置缓冲区大小后开始破坏它。当然,剪切粘贴缓冲区足够大,因为我可以在其他程序中很好地剪切粘贴(甚至用于同一 ssh 会话的 chrome 终端模拟器也足够有趣)。有没有办法增加 MacOS 上终端的剪切粘贴缓冲区,或者我是否卡在短时间的剪切粘贴中?

编辑: 因此,在我连接的操作系统上对内核 tty 驱动程序进行了大量调试之后,我发现其根本原因是特定的 tty 实现,它只有一个小缓冲区(1k)。因此,粘贴任何较大的内容都会超出该缓冲区并产生上述问题。使用 Chrome 终端模拟器,看起来它有自己的缓冲区,只是等待提示并将其逐行发送到 pty。

答案1

我没有解决方案来增加您可以粘贴到 SSH 会话中的数据量,但我确实有一个可能适合您的解决方法。解决方法涉及 X11 转发 OS X 剪贴板并与 X 服务器粘贴板共享。

设置 X11 转发

要在远程服务器上设置 X11 转发,您需要编辑/etc/ssh/sshd_config文件并更改行

#X11Forwarding no

X11Forwarding yes

你需要重新开始更新/etc/ssh/sshd_config文件后的 SSH 守护程序。现在我们需要使用xauth适合您平台的命令在您的远程服务器上安装

sudo pacman -S xorg-xauth # Arch-Linux
sudo apt-get install xauth # Debian/Ubuntu/etc.
sudo yum install xauth # RHEL/CentOS/Fedora/etc.

然后,您可以使用-X, 或 -Y选项连接到您的服务器。

  • -X将启用 X11 转发。
  • -Y将启用可信 X11 转发。

根据您的 OpenSSH 版本,可能需要也可能不需要此步骤。OpenSSH 中存在一个已知错误,会导致出现以下消息

X11 转发请求在通道 0 上失败

当尝试使用 X11 转发连接到远程服务器时。修复方法是编辑您的/etc/ssh/sshd_config文件并更改行

#X11UseLocalhost yes

X11UseLocalhost no

您现在应该能够成功连接到启用 X11 转发的远程服务器。

共享 OS X 和 X 服务器剪贴板

要与 X 服务器共享 OS X 键盘,我们需要编辑该文件~/Library/Preferences/org.x.X11.plist,或者~/Library/Preferences/org.macosforge.xquartz.X11.plist根据您的 OS X 版本。您可以使用ls ~/Library/Preferences/ | grep X11来确定需要编辑哪个文件。我们需要为此添加 5 个布尔键

sync_clipboard_to_pasteboard
sync_pasteboard
sync_pasteboard_to_clipboard
sync_pasteboard_to_primary
sync_primary_on_select

添加这些的最简单方法可能是使用终端命令

defaults write org.macosforge.xquartz.X11 sync_clipboard_to_pasteboard -boolean true
defaults write org.macosforge.xquartz.X11 sync_pasteboard -boolean true
defaults write org.macosforge.xquartz.X11 sync_pasteboard_to_clipboard -boolean true
defaults write org.macosforge.xquartz.X11 sync_pasteboard_to_primary -boolean true
defaults write org.macosforge.xquartz.X11 sync_primary_on_select -boolean true

必要时替换org.macosforge.xquartz.X11org.x.X11。进行此更改后,您还需要重新启动 X 服务器,注销 SSH 会话并从扩展坞退出应用程序就足够了。

似乎还有一个XQuartz 中的错误随更高版本的 OS X 一起提供,要求您xclock在共享 OS X 和 X 服务器剪贴板之前从 OS X 终端启动。

复制和粘贴

现在一切就绪,可以在 OS X 剪贴板和 X 服务器剪贴板之间进行复制和粘贴。最后要做的就是xclip在远程服务器上安装复制和粘贴尽您所能。

初始化复制和粘贴所需的顺序是首先通过 SSH 连接到远程服务器

$ ssh -X [user@]hostname

然后在另一个终端窗口中运行

$ xclock
^C

其中^C代表 CTRL+C。使用 或 CMD+C 从 OS X 复制pbcopy并使用 .paste 粘贴到远程服务器上xclip

  • xclip -o将打印剪贴板的内容到stdout,同时
  • xclip -istdin将从剪贴板读取

相关内容