xsel:无法打开显示:(空)

xsel:无法打开显示:(空)

我想用 xsel 将一个长文件复制到剪贴板中,在我的本地电脑中,只需输入:

cat /usr/bin/mysql_secure_installation|xsel -b

mysql_secure_installation位于我本地操作系统中的 文件已复制到剪贴板中。

现在使用 ssh 命令登录我的 vps,然后输入

DISPLAY=:0 cat /usr/bin/mysql_secure_installation|xsel -b

我遇到错误信息:

xsel: Can't open display: (null)
: Inappropriate ioctl for device

我知道获取远程文件的正确方法是scp命令:

scp -P port username@tohostname:/remotefile /newlocalfile

我只是想知道如何在登录我的 vps 后将文件内容复制到剪贴板,将文件从远程计算机复制到本地计算机的剪贴板。

同样的错误:

DISPLAY=:0 xsel -b <  /usr/bin/mysql_secure_installation
xsel: Can't open display: (null)
: Connection refused

答案1

开始您的ssh连接

ssh -X yourserver

然后自己更改DISPLAY变量。 ssh应该自动设置它,以便xsel(以及任何其他 X11 客户端)可以使用本地计算机上的显示 - 包括其剪贴板。这就是所谓的X11转发

DISPLAY=:0在会话中手动设置ssh将告诉xsel您使用该远程服务器上的显示——如果该服务器正在运行的话。

答案2

其他答案已经展示了如何转发您的 X 会话以实现所需的 O(结果)。然而,这不是很安全(正如已经指出的那样)或性能,并且通常需要额外的设置。

在 SCROE 模型中实现相同 E(效果)的最佳方法是将原始数据字节流传输到主机并在本地将其推送到剪贴板。你已经快要拥有它了。你有一个管道,你有 scp,但 scp 只是几乎正确。

ssh -p port username@tohostname cat /usr/bin/mysql_secure_installation | xsel -ib

管道确保cat命令的标准输出偏僻的主机最终作为xsel命令的标准输入当地的主持人。 (我还添加了一个-i; 当显式指定操作模式时,使用 xsel 是最安全的。)

答案3

饰演 贾尔斯勋爵在这里说

  • 客户端您需要连接ssh -X(每个会话,~/.ssh/config始终使用它)
  • 服务器端你需要有X11Forwarding yes/etc/ssh/sshd_config注意d)。另外,一些软件包如xauthlibxdmcp6,默认安装。请记住sudo systemctl restart sshd.service使更改生效(在 ( sudo sshd -t) 之前使用测试模式,检查是否有任何错误)。

出于安全原因,我不会让它始终使用它,并且通常只在非常受信任的服务器上使用它。

其他来源

相关内容