如何在两个 X 服务器之间共享剪贴板?

如何在两个 X 服务器之间共享剪贴板?

我最近设置了我的 Ubuntu 机器,以便在 pty8 中运行另一个 X 会话。我主要在这个其他 X 服务器上运行虚拟机或远程桌面会话,这有助于缓解这些环境中键盘集成可能出现的一些问题。

但是,现在如果我从 :0 上的某个窗口复制某些内容,则无法将其粘贴到 :1 上的某个窗口中。

有没有办法可以在这两个会话之间共享剪贴板?

答案1

我想到了一个似乎效果很好的解决方案。我不确定是否有更好的方法,但我编写了一个脚本,启动我的虚拟机,然后监视显示器 :0 上的剪贴板是否有变化。当检测到变化时,它会将剪贴板内容复制到显示器 :1。它是双向执行此操作的,因此我也可以很好地从虚拟机中复制和粘贴。

脚本如下:

#!/bin/bash

virtualbox --startvm "Windows 7" --fullscreen &
waitpid=$!

watch_clip() {
  local curr="" prev="" from=$1 to=:0

  # On first run, we need to copy from :0 to :1 but not vice versa
  if [[ "$from" == ":0" ]]; then
    xclip -o -selection clipboard -d :0 2> /dev/null | xclip -selection clipboard -d :1
    to=:1
  fi

  while true; do
    # Get the current clipboard contents
    curr=`xclip -o -selection clipboard -d $from 2> /dev/null`

    # Compare to previous results and copy if it's changed
    if [[ "$curr" != "$prev" ]]; then
      echo "$curr" | xclip -selection clipboard -d $to
    fi

    prev="$curr"   
    sleep 0.5
  done
}

watch_clip :0 &
watch_clip :1 &
wait $waitpid

然后所需要的只是启动第二个 X 会话的命令:

startx ./.startwin7 -- :1

我没有注意到任何问题,但如果有人能想到更好的方法,我一定会很感激。

答案2

如果你想要交钥匙的东西,协同作用应该可以解决问题。我从来没有在一台机器上跨 X 会话使用过它。它可以在不同的机器之间共享剪贴板,因此如果设计缺陷或可用性问题导致它无法为您工作,那将是令人惊讶的。

另外:对于你的虚拟机,他们有构建适用于 Mac 和 Windows

答案3

我遇到了同样的问题。Synergy 对我来说效果不佳(它的剪贴板同步的 X11 部分存在重大错误),并且我不想使用一个只在时间延迟的情况下轮询剪贴板的脚本,因为这会浪费 CPU 和/或在粘贴之前添加随机延迟。我编写了一个名为 xclipsync 的脚本,它为我解决了这个问题。

https://github.com/apenwarr/xclipsync

相关内容