You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

在Windows Terminal通过WSL远程连接RHEL服务器时,实现剪贴板复制及tmux选中复制功能的方法

在Windows Terminal通过WSL远程连接RHEL服务器时,实现剪贴板复制及tmux选中复制功能的方法

我之前也碰到过一模一样的场景:用Windows Terminal里的WSL ssh到远程RHEL服务器,想通过xclip把内容复制到Windows剪贴板却一直报Error: Can't open display,折腾了好几种方法,这里分享两个靠谱的解决方案:

方案一:修复X11转发让xclip正常工作

xclip依赖X11环境,所以得把远程服务器的X11请求转发到WSL的X服务器,再映射到Windows:

  • 先给WSL配置X服务器:
    • 如果是WSL2,推荐用自带的WSLg,它默认集成了X服务器,不用额外安装。确保你的WSL2是最新版本,打开WSL后会自动设置DISPLAY变量,无需手动配置。
    • 如果用第三方X服务器(比如VcXsrv),启动时一定要勾选「Disable access control」,然后在WSL终端里执行export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0来设置DISPLAY变量。
  • 配置ssh的X11转发:
    • 编辑WSL里的~/.ssh/config,确保有以下配置:
      Host your-rhel-server
        HostName server-ip
        User your-username
        ForwardX11 yes
        ForwardX11Trusted yes
      
    • 远程RHEL服务器上安装xclip:sudo dnf install xclip
  • 测试:在远程服务器上执行echo "测试内容" | xclip -sel clip,然后回到Windows粘贴,能看到内容就说明成功了。
  • 最后修改远程服务器的~/.tmux.conf,保持你原来的配置基础上补全剪贴板参数:
    set-option -s set-clipboard off
    
    bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'xclip -sel clip'
    bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'xclip -sel clip'
    
    (这里加-sel clip是指定系统剪贴板,避免默认选primary剪贴板导致Windows识别不到)

方案二:绕开X11,通过WSL中转到Windows剪贴板

如果X11转发总是出问题,这个方法更稳定——把远程服务器复制的内容通过ssh传回WSL,再调用Windows的clip.exe放到剪贴板:

  • 先建立远程到WSL的无密码ssh连接:
    • 在WSL里生成密钥对:ssh-keygen -t ed25519,一路回车默认配置就行。
    • 把WSL的公钥传到远程RHEL服务器:ssh-copy-id your-wsl-username@your-wsl-ip(WSL的IP可以在WSL终端里用hostname -I获取)。
  • 编写一个替代xclip的脚本(比如叫winclip),放到远程服务器的~/bin目录:
    #!/bin/bash
    ssh your-wsl-username@your-wsl-ip "clip.exe"
    
    给脚本加执行权限:chmod +x ~/bin/winclip,确保~/bin在你的PATH里(可以用echo $PATH查看)。
  • 修改远程服务器的~/.tmux.conf,把xclip换成我们的脚本:
    set-option -s set-clipboard off
    
    bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'winclip'
    bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'winclip'
    
  • (可选)为了提升复制速度,避免每次都新建ssh连接,可以在远程服务器的~/.ssh/config里加连接复用配置:
    Host wsl-host
      HostName your-wsl-ip
      User your-wsl-username
      ControlMaster auto
      ControlPath ~/.ssh/sockets/%r@%h-%p
      ControlPersist 10m
    
    然后把脚本里的ssh your-wsl-username@your-wsl-ip改成ssh wsl-host就行。

额外小技巧

如果你只是需要快速选中终端内容复制,也可以直接用Windows Terminal的自带功能:打开Windows Terminal设置,找到你的WSL配置,开启「复制所选内容到剪贴板」,这样选中内容后自动复制到Windows剪贴板,不过这个是终端层面的复制,和tmux的复制模式是分开的哦。

备注:内容来源于stack exchange,提问作者rollschild

火山引擎 最新活动