我最近设置了我的 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 的脚本,它为我解决了这个问题。