Merge pull request #6475 from nikelmwann/linux-host-use-xfreerdp
Prefer xfreerdp for RDP connections on Linux hosts.
This commit is contained in:
commit
9e1a119a4b
|
@ -404,8 +404,8 @@ module Vagrant
|
|||
error_key(:linux_nfs_mount_failed)
|
||||
end
|
||||
|
||||
class LinuxRDesktopNotFound < VagrantError
|
||||
error_key(:linux_rdesktop_not_found)
|
||||
class LinuxRDPClientNotFound < VagrantError
|
||||
error_key(:linux_rdp_client_not_found)
|
||||
end
|
||||
|
||||
class LocalDataDirectoryNotAccessible < VagrantError
|
||||
|
|
|
@ -5,17 +5,35 @@ module VagrantPlugins
|
|||
module Cap
|
||||
class RDP
|
||||
def self.rdp_client(env, rdp_info)
|
||||
if !Vagrant::Util::Which.which("rdesktop")
|
||||
raise Vagrant::Errors::LinuxRDesktopNotFound
|
||||
end
|
||||
# Detect if an RDP client is available.
|
||||
# Prefer xfreerdp as it supports newer versions of RDP.
|
||||
rdp_client =
|
||||
if Vagrant::Util::Which.which("xfreerdp")
|
||||
"xfreerdp"
|
||||
elsif Vagrant::Util::Which.which("rdesktop")
|
||||
"rdesktop"
|
||||
else
|
||||
raise Vagrant::Errors::LinuxRDPClientNotFound
|
||||
end
|
||||
|
||||
args = []
|
||||
args << "-u" << rdp_info[:username]
|
||||
args << "-p" << rdp_info[:password] if rdp_info[:password]
|
||||
args += rdp_info[:extra_args] if rdp_info[:extra_args]
|
||||
args << "#{rdp_info[:host]}:#{rdp_info[:port]}"
|
||||
|
||||
Vagrant::Util::Subprocess.execute("rdesktop", *args)
|
||||
# Build appropriate arguments for the RDP client.
|
||||
case rdp_client
|
||||
when "xfreerdp"
|
||||
args << "/u:#{rdp_info[:username]}"
|
||||
args << "/p:#{rdp_info[:password]}" if rdp_info[:password]
|
||||
args << "/v:#{rdp_info[:host]}:#{rdp_info[:port]}"
|
||||
args += rdp_info[:extra_args] if rdp_info[:extra_args]
|
||||
when "rdesktop"
|
||||
args << "-u" << rdp_info[:username]
|
||||
args << "-p" << rdp_info[:password] if rdp_info[:password]
|
||||
args += rdp_info[:extra_args] if rdp_info[:extra_args]
|
||||
args << "#{rdp_info[:host]}:#{rdp_info[:port]}"
|
||||
end
|
||||
|
||||
# Finally, run the client.
|
||||
Vagrant::Util::Subprocess.execute(rdp_client, *args)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -823,10 +823,11 @@ en:
|
|||
that the NFS client software is properly installed, and consult any resources
|
||||
specific to the linux distro you're using for more information on how to
|
||||
do this.
|
||||
linux_rdesktop_not_found: |-
|
||||
The `rdesktop` application was not found. Vagrant requires this
|
||||
in order to connect via RDP to the Vagrant environment. Please ensure
|
||||
this application is installed and available on the path and try again.
|
||||
linux_rdp_client_not_found: |-
|
||||
An appropriate RDP client was not found. Vagrant requires either
|
||||
`xfreerdp` or `rdesktop` in order to connect via RDP to the Vagrant
|
||||
environment. Please ensure one of these applications is installed and
|
||||
available on the path and try again.
|
||||
machine_action_locked: |-
|
||||
An action '%{action}' was attempted on the machine '%{name}',
|
||||
but another process is already executing an action on the machine.
|
||||
|
|
Loading…
Reference in New Issue