无头服务器上的xclip

我一直在使用xclip来复制bash命令的输出,如下所示:

pwd | tr -d "\n" | xclip -selection c 

这样我就可以将输出粘贴到另一个终端会话中。

我试图在我的无头服务器(ubuntu 13.04)上使用它,它是在没有x的情况下启动的。 它不适用于错误:

 Error: Can't open display: (null) 

有没有解决的办法。 我意识到,当程序被称为xclip时,它可能是不可能的。

剪贴板由X服务器提供 。 无论服务器是否无头,都无关紧要,重要的是您的本地图形会话可供远程计算机上运行的程序使用。 由于X的网络透明设计,这是可能的。

我假设您使用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本身没有剪贴板。 这是一个Xfunction。 xclipt只是一个命令行界面,如您所见,它需要display 。 一种方法是只使用临时文件:

 $ echo 123 > /tmp/f $ tr -d '2' < /tmp/f 13