问题描述
我一直在使用 xclip 来复制 bash 命令的输出,如下所示:
pwd | tr -d "\n" | xclip -selection c
这样我就可以将输出粘贴到另一个终端会话中。
我试图在我的无头服务器(ubuntu 13.04)上使用它,它是在没有 x 的情况下启动的。它不适用于错误:
Error: Can't open display: (null)
有没有解决的办法。我意识到看到该程序称为 xclip 可能是不可能的。
最佳答案
剪贴板由 X server 提供。服务器是否无头并不重要,重要的是您的本Map形会话可用于远程计算机上运行的程序。多亏了 X 的 network-transparent 设计,这才成为可能。
我假设您正在使用 SSH 从运行 Linux 的机器连接到远程服务器。确保在客户端配置和服务器配置中都启用了 X11 转发。在客户端配置中,您需要将 ~/.ssh/config
中的 ForwardX11 yes
行默认打开,或者将选项 -X
传递给该会话的 ssh
命令。在服务器配置中,您需要在 /etc/ssh/sshd_config
中有行 X11Forwarding yes
(它在 Ubuntu 上默认存在)。
要检查是否启用了 X11 转发,请查看 DISPLAY
环境变量的值: echo $DISPLAY
。您应该会看到类似 localhost:10
的值(运行在远程计算机上的应用程序被告知连接到运行在同一台计算机上的显示器,但该显示器连接实际上是通过 SSH 转发到您的客户端显示器)。请注意,如果未设置 DISPLAY
,则手动设置它是没有用的:如果转发到位,环境变量始终设置正确。如果您需要诊断 SSH 连接问题,请将选项 -vvv
传递给 ssh
以详细跟踪正在发生的事情。
如果您通过其他方式连接,您可能无法实现 X11 转发。如果你的客户端运行的是Windows,PuTTY支持X11转发;您必须在 Windows 机器上运行 X 服务器,例如 Xming 。
次佳答案
Bash 本身没有剪贴板。这是一个X功能。 xclip
只是一个命令行界面,如您所见,它需要 $DISPLAY
。一种解决方法是只使用一个临时文件(例如使用 tempfile
创建):
$ echo 123 > /tmp/fileDy7Dgv
$ tr -d '2' < /tmp/fileDy7Dgv
13