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


9

我最近设置了我的Ubuntu计算机,以便在pty8中运行另一个X会话。我主要在这台其他X服务器上运行虚拟机或远程桌面会话,这有助于解决在这些环境中键盘集成可能引起的一些挫败感。

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

有什么方法可以在这两个会话之间共享剪贴板吗?

Answers:


7

我想出了一个看起来效果很好的解决方案。我不确定是否有更好的方法,但是我写了一个脚本来启动我的VM,然后监视显示在:0上的剪贴板中的更改。检测到更改时,它将剪贴板内容复制到显示:1。它是双向执行的,因此我也可以从VM复制和粘贴。

这是脚本:

#!/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

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


您的文章给了我一个想法,我已经简化你的脚本是:xclip -selection clip -o -display :0 | xclip -selection clip -i -display :1(见superuser.com/a/992418/19223
lorenzog

3

如果您想交钥匙,Synergy应该可以解决。在X会话中,我从未在一个盒子上使用过它。它可以在不同的计算机之间共享剪贴板,因此如果设计缺陷或可用性问题使它无法为您服务,那将是令人惊讶的。

另外:对于您的vm,它们具有适用于Mac和Windows的版本


+1。太酷了,我在搜索中看到了类似的内容,只是希望有一些不需要任何设置的内容。我从自己的解决方案中考虑的唯一问题是,如果有人在登录或启动虚拟机之前登录了我的笔记本电脑上的访客帐户。那还没有发生,但是如果确实成为问题,那么我可能会考虑使用Synergy来同步剪贴板。
Andy E

1
再次感谢您的回答。我已经颁发了赏金,但是我决定对可接受的解决方案做出自己的回答,因为它离我要寻找的更近,并且到目前为止,我还没有遇到任何问题。
Andy E

1
谢谢!您的解决方案很有趣;对您有什么用,对吗?干杯
布莱恩·阿吉

1

我有同样的问题。Synergy不适用于我(它在剪贴板同步的X11部分中存在重大错误),并且我不希望有一个脚本会随时间延迟轮询剪贴板,因为这会浪费CPU和/或在粘贴之前添加了随机延迟。我编写了一个脚本xclipsync,可以为我解决问题。

https://github.com/apenwarr/xclipsync

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.