解决 google chrome 浏览器里复制的内容不能粘贴到vmware workstation虚拟机里的问题
1、现象:
ubuntu 上安装的google chrome 浏览器复制的内容不能粘贴到vmware workstation虚拟机里,但能正常复制到其他地方,如gedit里:
google chrome 里复制内容 ---粘贴---》vmware workstation虚拟机 (不能)
google chrome 里复制内容 ---粘贴---》其他地方,如gedit里(正常)
发现发生问题的软件版本:
ubuntu 14.04 + google chrome (36,37的版本都会,35正常) + vmware workstation 10.0.3 build-1895310(虚拟 windows 8.1 32位)
2、解决办法:
论坛上发现的老外搞的办法,用python来在后台监视剪贴板变化,发现是chrome引起的就运行“xsel -o -b|xsel -i -p;xsel -o -p|xsel -i -b”命令,具体原理后面在去了解,先分享方法出来给难兄难弟,呵呵。
老外脚本地址(由衷感谢他的分享):
https://gist.github.com/solariz/2ec85f1f8fe0d4f44b6f
拿过来要改下,监控google chrome引起的剪贴板变化就行了,记得先安装xdotool和xsel
1、安装软件:
sudo apt-get install xdotool xsel
2、改脚本(脚本我命名为cpchrome.py)
3、运行脚本:
nohup python cpchrome.py &
4、google chrome 里复制内容 ---粘贴---》vmware workstation虚拟机 (OK,oo)
5、附上我改过的脚本cpchrome.py(“#sjw add”为我改过的地方):
#!/usr/bin/python ## License: CC0 ## Author: Marco Goetze ## Web: http://solariz.de ## Version: 1.2 ## DIZ: ## Little Helper Script for Linux to make my KeePass Copy and Paste cooperate again with ## Chrome Browser. ## You need to have the latest keepass version and XSEL installed. ## Tested with: ## xsel 1.2.0 ## keepass 2.27 ## xdpyinfo 1.3.1 ## chrome 36 ## on Linux Mint Qiana (x64) on MATE and Cinnamon but should work on any gnome based desktop ## ## Plese see this chrome topic for discussion: https://productforums.google.com/forum/#!topic/chrome/4s5_Sx-e4z0 ## ## You can edit this if needed, I use it since v1.2 to prevent the clipboard copy operation on each Copy Action ## it should only run when invoked by LastPass. To make this happen be sure you have 'xdotool' & 'xsel' installed ## apt-get install xdotool xsel ## without this script will not work! ## #window_name_matches = ['KeePass', 'kdbx', 'Edit Entry', 'Add Entry'] #sjw change window_name_matches = ['Google Chrome'] #sjw add ## no need for changes below here from gi.repository import Gtk, Gdk import subprocess glob_inhalt = "" print "KeePass Linux Clipboard Workaround" print "Version 1.2 by Marco Goetze (www.solariz.de)" def test(*args): global glob_inhalt found = False # Get Clipboard task = subprocess.Popen("xsel -o -b", shell=True, stdout=subprocess.PIPE) data = task.stdout.read() assert task.wait() == 0 # check if changed if data != glob_inhalt: glob_inhalt = data print "Clipboard changed, checking if Lastpass Window is active..." task = subprocess.Popen("xdotool getactivewindow getwindowname", shell=True, stdout=subprocess.PIPE) winID = task.stdout.read().rstrip('\n') ##print winID winID = winID.rpartition('-')[2].strip() #sjw add ##print winID for s in window_name_matches: if s in winID: found = True if found == True: print "Match detected, processing Clipboard..." # wtf... yes, this works. From Clipboard to Primaty to clipboard and chome have it in CTRL-V task = subprocess.Popen("xsel -o -b|xsel -i -p;xsel -o -p|xsel -i -b", shell=True, stdout=subprocess.PIPE) data = task.stdout.read() assert task.wait() == 0 else: print "No Match." clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) clip.connect('owner-change',test) Gtk.main()
2015-10-28 最新重写版代码见 http://sjwpython.iteye.com/blog/2252843