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