设置:
Fedora 30 带有运行 Ubuntu 18.04.1 的 KVM/qemu 虚拟机。
(这个设置是因为我想在我的 Fedora 30 上运行 RStudio,它只是在 nouveau 图形子系统中的某个地方立即崩溃并死掉——但在 Ubuntu VM 中运行良好)。
问题:
当 RStudio 运行时,在 VM 中复制和粘贴是正确的 PITA。
VM启动后,主机和VM之间的复制粘贴工作正常,VM内部的复制粘贴也工作正常(例如KWrite到KWrite)
在虚拟机中启动 RStudio 后,复制和粘贴最初会继续工作(几次),但很快就会开始“锁定”。这适用于 RStudio 和 KWrite,并且适用于虚拟机内和主机到虚拟机的复制和粘贴。虚拟机中的接收进程冻结并且显然在等待某些事情。但是,虚拟机继续正常执行(例如,您可以使用 shell、运行top
等iotop
)
接收进程在 10-30 秒后再次唤醒,此时粘贴的文本可能已收到……也可能未收到。第一次出现问题后,粘贴通常会失败,这包括从虚拟机复制粘贴到主机。在 KWrite 中粘贴始终需要 10 秒,直到光标返回而没有剪贴板内容。 RStudio 的行为更加灾难性,有时杀死进程是唯一的解决方案。
如果将虚拟机放置一段时间,则有机会再次进行一些成功的复制粘贴操作,然后再次发生锁定。
在来宾计算机(而不是在显然不执行任何操作的主机上)重新启动spice-vdagent
( systemctl start spice-vdagentd
) 会中断锁定,并可能有机会再次执行一些复制粘贴。但这个操作充满了一些风险,因为我在某个时候整个 GUI 都冻结了。
怎么解决?
我应该寻找什么?
xclipboard
我在主机上使用过查看剪贴板中发生了什么。没有看到任何意外的情况。
聚苯乙烯
VM 已获得大量 RAM (10GiB),这似乎是必要的,因为即使编织涉及强度图的不太大的编织文件也会导致pandoc
内存不足。
当我在其中工作时,RStudio 有时会自行冻结几秒钟,同样不会锁定整个系统。感觉好像交换或垃圾收集正在启动,但 I/O 或 CPU 方面没有任何进展。烦人但还能生存。
答案1
在RStudio社区BB上,提供了以下想法:
设置环境变量
RSTUDIO_NO_CLIPBOARD_MONITORING=1
例如:
RSTUDIO_NO_CLIPBOARD_MONITORING=1 /usr/bin/rstudio
其基础是 GitHub 上的错误修复:
基于这个问题:
我们在哪里找到:
看来罪魁祸首可能是 RStudio 过度积极地监听剪贴板的更改。看:
#9 0x00000000005a2745 in rstudio::desktop::GwtCallback::onClipboardChanged(QClipboard::Mode) ()
我们这样做是为了支持全局鼠标选择,但也许这样做过于激进,或者我们正在处理我们应该忽略的剪贴板通知。
执行上述操作可以提高响应时间,但不会提高复制粘贴的可靠性。