Copy/Paste from my desktop to the VM console via the vSphere client does not work. Guest clipboard doesn't ever get into client's clipboard and vice versa. (See steps to reproduce for details).
ESXi: 4.1.0-260247, vSphere client: 4.1.0-258902
I first noticed this in Lab Manager, but then I verified that its not working through the vsphere client connected directly to the host either. However, the clipboard does work with the 4.1 client connected to a 4.0.0-208111 vcenter server.
Upgrading the guests' VMware tools & hardware version does not help. Happens on both windows & linux guests and multiple varieties of windows clients (haven't tried it from a linux box).
Steps to reproduce:
On client desktop start notepad
type 'desktop' in notepad
Select 'desktop' and copy to clipboard (Ctrl+C)
Open guest console, start notepad
Paste into (guest's) notepad
nothing happens ('desktop' should appear)
type 'guest' in (guest's) notepad
Select 'guest' and copy to clipboard (Ctrl+C)
Paste into client's notepad
'desktop' appears (should be 'guest')
We got the same problem. Upgraded from 4.0 u2 to 4.1 and clipboard functionality stopped working. We tried to force it in VM settings (see below) to no avail:
Name field | Value |
isolation.tools.copy.enable | true |
isolation.tools.paste.enable | true |
isolation.tools.setGUIOptions.enable | true |
We've encountered the same issue.
Did either of you find a workaround?
I haven't found anything. I'm going to call support today, but I wanted to check the forums first to see if anybody else knew anything about it.
Please try the following setting in vms vmx file and let know whether it worked.
isolation.tools.copy.disable = "false"
isolation.tools.paste.disable = "false"
Hi,
We also having actually the same issue!, have tried the isolation.tools.copy.disable and isolation.tools.paste.disableand still not working.
Already open a case with vmware, still awaiting for confirmation.
anyone got this fixed?
thanks
Are the isolation.tools settings in .vmx file as follows:
isolation.tools.copy.disable = "FALSE"
isolation.tools.paste.disable = "FALSE"
Actually isolation.tools.copy.enable and isolation.tools.paste.enable are not valid settings
Oops!
Sorry, didn't notice your answer
Recently upgraded to vSphere v4.1.0 Build 258902 and have the same issue. No copy and pasting to/from a Windows VM Console. Hopefully someone will post a workaround for this, and hopefully the fix won't be an individual modification to every VM.
definatly not able to change vmx file, i got over 2000VMs now
Already open a case with vmware, still awaiting for confirmation.
Any reply from VMware support yet?
VCP4 | MCITP | Master ASE | CCNA
nope they kind of disapear! will chase them and let you know.
We are having the same issue after going to 4.1, hopefully they have a fix soon
Same here - notice no cut and paste after reinstall from ESX 3.5 U5 to ESXi 4.1. I'm running VC 4.1 with VI client running on Windows 7 64 bit.
My old setup had no issues from W7 Client.
Been having a bumpy ride to upgrade to Vsphere 4.1 - made a inquiry on this issue as a side note to a larger problem I'm having with storage views.
System works on the whole - just minus the storage views and cut /paste so far.
-dhayashi
my college just phone up the vmware again and is now officially a bug. let me know if anyone got an update from vmware.
Courtesy of Google Translate (Dutch/English)
Dear colleague Any-iT,
Related to vacation, I 1 September unavailable.
In
the case of failure and acute cases, I therefore kindly request you to
contact our office at number 040-2907557, or e-mail: support@Any-iT.nl. Otherwise, I immediately after my absence from your email response. I trust you enough information to have.
Sincerely,
Niels Elfrink
Any-iT
Disclaimer: This e-mail and its contents are confidential. If this message is not intended for you, we ask that you email directly to us to return and destroy. In this case it is also not allowed this email and its contents to use, copy or disclose to third parties. Any-iT
excludes all liability in connection with the incorrect, incomplete or
not timely reception of the information in this email.
In our environment, adding:
isolation.tools.copy.disable = "FALSE"
isolation.tools.paste.disable = "FALSE"
to the vmx file fixed the problem for VMs in Lab Manager (both from the web console and the vsphere client), so I imagine it would work for everything else (we're only using 4.1 for our lab manager environment at the moment). Currently writing a script to add that to all the vmx files.
Thanks everybody!
Could you let me know the script when you got them please
In our environment, adding:
bq. isolation.tools.copy.disable = "FALSE"
isolation.tools.paste.disable = "FALSE"to the vmx file fixed the problem for VMs in Lab Manager (both from the web console and the vsphere client), so I imagine it would work for everything else (we're only using 4.1 for our lab manager environment at the moment). Currently writing a script to add that to all the vmx files.
Thanks everybody!
This worked for me as well. Please let us know if you are able to get a script working!
Script put together by one of our devs - cycles through all datastores (or whichever ones are picked up by the name filter) and adds the parameters to any .vmx files it finds. Won't add them twice, and if they're currently set to true it'll switch them to false. Goes through the datastores rather than vCenter since many of our VMs aren't in vCenter.
Of course it should be easy enough for anyone who wants to customise this to change other parameters. The main bits to change to get it to work are the datastore name - remove this for it to apply to all datastores, and the url. It uses the web api.
$credentials = Get-Credential Get-DataStore -name "<regular expression>" | ForEach-Object { $dsName = $_.Name $dsDriveName = "LUN" + $_.Name $dsPath = $dsDriveName + ":" $drive = New-DatastoreDrive -Name $dsDriveName -Datastore $_ Get-ChildItem $dsPath -Recurse -Include "*.vmx" | ForEach-Object { $filePath = $_.DataStoreFullPath.Replace("[$dsName] ", "") $fileUrl = "https://<esx-server>/folder/" + $filePath + "?dcPath=ha-datacenter&dsName=" + $dsName $getReq = [http://System.Net.WebRequest]::Create($fileUrl) $getReq.Method = "GET" $getReq.Proxy = [http://System.Net.WebProxy]::GetDefaultProxy() $getReq.Proxy.UseDefaultCredentials = $true $getReq.Credentials = $credentials [http://Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} $getResponse = $getReq.GetResponse() $rdr = New-Object System.IO.StreamReader $getResponse.GetResponseStream() $vmxFile = @() while($rdr.Peek() -ne -1) { $vmxFile += $rdr.ReadLine() } $getResponse.Close() for($i=0;$i -lt $vmxFile.Length;$i++) { if($vmxFile[$i] -ne $null -and $vmxFile[$i].Contains("isolation.tools.copy.disable")) { $vmxFile[$i] = $null } if($vmxFile[$i] -ne $null -and $vmxFile[$i].Contains("isolation.tools.paste.disable")) { $vmxFile[$i] = $null } } $vmxFile += "isolation.tools.copy.disable = ""FALSE""" $vmxFile += "isolation.tools.paste.disable = ""FALSE""" $putReq = [http://System.Net.WebRequest]::Create($fileUrl) $putReq.Method = "PUT" $putReq.PreAuthenticate=$true $putReq.Credentials = $credentials $putReq.ContentType = "application/octet-stream" $ms = New-Object System.IO.MemoryStream $wtr = New-Object System.IO.StreamWriter $ms $vmxFile | Where-Object { -not [http://System.String]::IsNullOrEmpty( $_ ) } | ForEach-Object { $wtr.WriteLine( $_ ) } $wtr.Flush() $ms.Flush() $putReq.ContentLength = $ms.Length $requestStream = $putReq.GetRequestStream() $wtr = New-Object System.IO.StreamWriter $requestStream $vmxFile | Where-Object { -not [http://System.String]::IsNullOrEmpty( $_ ) } | ForEach-Object { $wtr.WriteLine( $_ ) } $wtr.Flush() $requestStream.Flush() $requestStream.Close() $putResponse = $putReq.GetResponse() $putResponse.Close() } }
As a note of warning - this can put a heavy load on your server's soap API, and is best run on a single datastore at a time, during low usage periods.
To second this warning, we just attempted to run this across a large selection of datastores and managed to kill off vpxd with a flood of requests. Best to keep it down to one datastore at a time, or build a delay in before each request runs.