vagrant/plugins/hosts/linux/cap/rdp.rb

57 lines
1.9 KiB
Ruby

require "vagrant/util/which"
module VagrantPlugins
module HostLinux
module Cap
class RDP
def self.rdp_client(env, rdp_info)
# 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
if Vagrant::Util::Platform.wsl?
"mstsc.exe"
else
raise Vagrant::Errors::LinuxRDPClientNotFound
end
end
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]}"
when "mstsc.exe"
# Setup password
cmdKeyArgs = [
"/add:#{rdp_info[:host]}:#{rdp_info[:port]}",
"/user:#{rdp_info[:username]}",
"/pass:#{rdp_info[:password]}",
]
Vagrant::Util::Subprocess.execute("cmdkey.exe", *cmdKeyArgs)
args = ["/v:#{rdp_info[:host]}:#{rdp_info[:port]}"]
args += rdp_info[:extra_args] if rdp_info[:extra_args]
end
# Finally, run the client.
Vagrant::Util::Subprocess.execute(rdp_client, *args)
end
end
end
end
end