Microsoft Remote Desktop version 8

jhalvorson
Valued Contributor

Microsoft Remote Desktop version 8 is available from the Mac App Store.

Does anyone know if it will be available for deployment to enterprise without being tied to an Apple ID or how to deploy without prompting for the Apple ID when the user launches the app?

2 ACCEPTED SOLUTIONS

gregneagle
Valued Contributor

Create an organizational AppleID if you haven't already. Sign into the App Store with that ID. Download and install the new Microsoft Remote Desktop.app. Package it and deploy it. Done. When/if there is an updated version, rinse and repeat.

View solution in original post

rtrouton
Release Candidate Programs Tester

I've documented the process of downloading the Remote Desktop installer package and posted it here:

http://derflounder.wordpress.com/2013/10/19/downloading-microsofts-remote-desktop-installer-package-...

View solution in original post

49 REPLIES 49

gregneagle
Valued Contributor

Create an organizational AppleID if you haven't already. Sign into the App Store with that ID. Download and install the new Microsoft Remote Desktop.app. Package it and deploy it. Done. When/if there is an updated version, rinse and repeat.

wyip
Contributor

It looks like you can just open up the .app and delete "/Contents/_MASReceipt". I just tried it with the current version that's in the Mac App Store (8.0.24091) and was able to copy the .app from one computer to another, and it didn't prompt for an Apple ID after copying.

jwojda
Valued Contributor II

I tried it as well, same result after deleting teh MASReceipt folder.

jhalvorson
Valued Contributor

Update from this morning: I followed gregneagle's steps, deployed, and user's can open with out any prompt. (I didn't need to delete the _MasReceipt folder.) This is the same packaging process that has worked for me on all "Apple" created applications from the App Store.

It hasn't worked for me for 3rd party apps from the App Store. I believe deleting that folder is necessary for deploying other 3rd party apps.

So I will keep the MS Remote Desktop 8 package I created, including the _MasReceipt, and see how it goes.

stevewood
Honored Contributor II
Honored Contributor II

Deleting the _MasReceipt folder keeps the app from using the Mac App Store for updates. So when the MAS scans apps on your system, if it finds the_MasReceipt folder, the MAS will prompt you to update the app if there are updates. Of course I am simplifying the backend of how it knows there are updates, but I'm sure you get the idea.

mikeh
Contributor II

I've been using Greg's method. A highly-annoying side effect, though, is that the App Store notifies the user of updates, but since the app is purchased with the institutional AppleID, the user can't install the update because they don't know the password (which we are not sharing). So they call us (a lot) to say they need the update.

I'm hoping that the automatic app update feature in OS X Mavericks might be a worthwhile feature. (Even better would be a way to initiate updates from the Mac App Store using something similar to the command-line softwareupdate command.) The only problem with autoupdating is the possibility of updates breaking the program. I'm looking at you, Wunderlist!

rtrouton
Release Candidate Programs Tester

You should be able to download a copy of the Microsoft Remote Desktop 8 installer from the MAS using the technique described here:

http://derflounder.wordpress.com/2013/08/22/downloading-apples-server-app-installer-package/

When I installed Microsoft Remote Desktop 8 in a test VM using the installer package copy, there was no _MASReceipt and I was not prompted to enter an Apple ID.

mikeh
Contributor II

Well, would you look at that. A debug menu. Thanks for the tip!

rtrouton
Release Candidate Programs Tester

I've documented the process of downloading the Remote Desktop installer package and posted it here:

http://derflounder.wordpress.com/2013/10/19/downloading-microsofts-remote-desktop-installer-package-...

jhalvorson
Valued Contributor

I've used the process suggested by rtrouton. It works!

donmontalvo
Esteemed Contributor III

iTap is dead...long live Microsoft Remote Desktop.

http://itap-mobile.com/desktop/rdp

--
https://donmontalvo.com

JPDyson
Valued Contributor

The desktop version is fairly busted. Just by having a bookmarks/saved sessions list, it's a step in the right direction. However, noticeably absent is a preference for user-defined defaults, or any measure of restraint when sizing the toolbar and fonts (at least on my Retina 15). Also, it doesn't seem to detect my trust settings for our CA.

jwojda
Valued Contributor II

any difference in using RTrouton's method vs the MAS version? Seems like a lot of extra steps when we can just delete teh MASReceipt folder.

mm2270
Legendary Contributor III

@jwojda,
The primary difference is that with Rich's method, you end up with a valid signed Apple package installer. With the latter, you will need to wrap up the application in something like Composer or Packages, etc. So, while it might seem like more work, it actually saves you the step of rewrapping the package in most cases.

bengross
New Contributor

More confirmation that iTap mobile RDP is the basis for the new Microsoft Remote Desktop as hinted by @donmontalvo. Looking at the strings in the binary show many references to iTap and HLW.

Microsoft taps iTap as basis for remote desktop apps | Macworld
http://www.macworld.com/article/2053689/microsoft-taps-itap-as-basis-for-remote-desktop-apps.html

scottb
Honored Contributor

Both ways seem to work. I s'pose though that ripping MAS receipts is breaking the 40 page licensing agreements we click through. But until Apple adds a way for folks to do this in the enterprise, MAS receipts will mysteriously disappear…thanks rtrouton for the instructions.

bentoms
Release Candidate Programs Tester

I've knocked up a little script to create connections using the new app: http://macmule.com/2013/10/22/how-to-create-a-microsoft-remote-desktop-8-connection/

jwojda
Valued Contributor II

what about copying existing connections to a new computer?

scottb
Honored Contributor

@jwojda: If you right-click on connections, you can select "export". Then you can import them with the File Menu/Import.
So I guess you can package those and setup a script to import or whatever. Not sure where they are stored as they are created - I'm not on my main Mac at the moment...

jwojda
Valued Contributor II

@boettchs - lmao - that simple eh? I think I need to go home and have a beer.

scottb
Honored Contributor

@jwojda - are you kidding - who'd expect such an elegant solution from MS? :)
Send one my way please!

spowell01
Contributor

Any progress on deploying connections? I've got the new RDP app deploying well, but i cannot get a connection deployed. I have tried using the script by bentoms, but I'm not seeing a connection show up after it completes.

Composer isn't showing any files when i try to snapshot the "import" of a .rdp connection.

stevewood
Honored Contributor II
Honored Contributor II

@spowell01 I took @bentoms script and had to re-write it to use the defaults command and I've had success with this:

#!/bin/sh

# date: 18 Jun 2014
# Name: RDC-Connection.sh
# Author:  Steve Wood (swood@integer.com)

# grab the logged in user's name
loggedInUser=`/bin/ls -l /dev/console | /usr/bin/awk '{ print $3 }'`

# global
RDCPLIST=/Users/$loggedInUser/Library/Containers/com.microsoft.rdc.mac/Data/Library/Preferences/com.microsoft.rdc.mac.plist
myUUID=`uuidgen`
LOGPATH='/private/var/inte/logs'

# set variables
connectionName="NAME YOUR CONNECTION"
hostAddress="SERVERIPADDRESS"

# if you need to put an AD domain name, put it in the userName variable, otherwise leave blank
userName='DOMAINNAME'
userName+=$loggedInUser
resolution="1280 1024"
colorDepth="32"
fullScreen="FALSE"
scaleWindow="FALSE"
useAllMonitors="TRUE"

set -xv; exec 1> $LOGPATH/rdcPlist.txt 2>&1

defaults write $RDCPLIST bookmarkorder.ids -array-add "'{$myUUID}'"
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.label -string "$connectionName"
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.hostname -string $hostAddress
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.username -string $userName
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.resolution -string "@Size($resolution)"
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.depth -integer $colorDepth
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.fullscreen -bool $fullScreen
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.scaling -bool $scaleWindow
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.useallmonitors -bool $useAllMonitors

chown -R "$loggedInUser:staff" /Users/$loggedInUser/Library/Containers/com.microsoft.rdc.mac

I haven't had chance to place this on my Github or on a blog post at all.

stevewood
Honored Contributor II
Honored Contributor II

I forgot to mention, the one thing I haven't been able to do is manage the Redirection portion of RDC. So if you need to setup a folder redirection to a user's home folder, I haven't figure that one out yet.

spowell01
Contributor

Thanks Steve! No need for folder redirection at this point. I will play with the new script you've shared shortly.

spowell01
Contributor

I'm getting an error on line 28 of the script referencing the log location in private/var

Script exit code: 1
Script result: + exec /Library/Application Support/JAMF/tmp/KIBSDRDP_Connection2.sh: line 28: /private/var/inte/logs/rdcPlist.txt: No such file or directory

Do I need to create that location in private var first?

spowell01
Contributor

I realized that the path you were saving logs to is specific to your environment. I went ahead and added a line to the script to create a differently named folder under private/var for our district to use. After that i was able to get past the error and the script appears to complete successfully. I'm still not seeing any connections under " My Desktops".

still troubleshooting here

spowell01
Contributor

So i have examined the plist many times now....Right after deployment it looks formatted properly with a unique UUID and each bookmark line looks good; yet it never shows up as a connection in MS RDP. If i manually make a connection from within MS RDP, and then view the plist file the one that i just created is pretty different. If i then go and delete the connection from the GUI, and reopen the plist file the format of the connection i tried to deploy is all wonky. I may just have to manually set the connections since this doesn't seem as easy as i was hoping.

spowell01
Contributor

Here is a copy of what the plist looks like right after deploying the connection

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict> <key>bookmarkorder.ids</key> <array> <string>{97531981-CA4B-4E88-8028-A14F1CFD9A29}</string> </array> <key>bookmarks.bookmark.{97531981-CA4B-4E88-8028-A14F1CFD9A29}.depth</key> <integer>32</integer> <key>bookmarks.bookmark.{97531981-CA4B-4E88-8028-A14F1CFD9A29}.fullscreen</key> <false/> <key>bookmarks.bookmark.{97531981-CA4B-4E88-8028-A14F1CFD9A29}.hostname</key> <string>KIBSDRDP.kibsd.org</string> <key>bookmarks.bookmark.{97531981-CA4B-4E88-8028-A14F1CFD9A29}.label</key> <string>Virtual Psych Scoring Server</string> <key>bookmarks.bookmark.{97531981-CA4B-4E88-8028-A14F1CFD9A29}.resolution</key> <string>@Size(1280 1024)</string> <key>bookmarks.bookmark.{97531981-CA4B-4E88-8028-A14F1CFD9A29}.scaling</key> <false/> <key>bookmarks.bookmark.{97531981-CA4B-4E88-8028-A14F1CFD9A29}.useallmonitors</key> <true/> <key>bookmarks.bookmark.{97531981-CA4B-4E88-8028-A14F1CFD9A29}.username</key> <string>kibsdcomposer</string>
</dict>
</plist>

spowell01
Contributor

And this is what the plist looks like after I manually create a connection....it looks like something gets jumbled up

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSNavLastRootDirectory</key>
<string>~/Desktop</string>
<key>NSNavPanelExpandedSizeForOpenMode</key>
<string>{712, 448}</string>
<key>NSWindow Frame NSNavPanelAutosaveName</key>
<string>284 247 712 470 0 0 1280 778 </string>
<key>QtLibrarySettings.Qt.filedialog</key>
<data>
AAAAvgAAAAMAAAAeAAAA/wAAAAAAAAACAAAAaAAADgABAAAABwEAAAABAAAAAgAAAAVm
aWxlOgAAAERmaWxlOi8vL1VzZXJzL0NvbXBvc2VyL0xpYnJhcnkvQ29udGFpbmVycy9j
b20ubWljcm9zb2Z0LnJkYy5tYWMvRGF0YQAAAAIAAAB6AC8AVQBzAGUAcgBzAC8AQwBv
AG0AcABvAHMAZQByAC8ATABpAGIAcgBhAHIAeQAvAEMAbwBuAHQAYQBpAG4AZQByAHMA
LwBjAG8AbQAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AcgBkAGMALgBtAGEAYwAvAEQAYQB0
AGEAAAAuAC8AVQBzAGUAcgBzAC8AQwBvAG0AcABvAHMAZQByAC8ARABlAHMAawB0AG8A
cAAAAC4ALwBVAHMAZQByAHMALwBDAG8AbQBwAG8AcwBlAHIALwBEAGUAcwBrAHQAbwBw
AAAAfgAAAP8AAAAAAAAAAQAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAIEAAAABAEB
AAAAAAAAAAAAAAAAAABk/////wAAAIEAAAAAAAAABAAAAQQAAAABAAAAAAAAAEIAAAAB
AAAAAAAAAEQAAAABAAAAAAAAAHoAAAABAAAAAAAAAAE=
</data>
<key>bookmarklist.expansionStates</key>
<dict>
<key>GENEREAL</key>
<true/>
</dict>
<key>bookmarkorder.ids</key>
<array>
<string>{c27f3b46-eb8b-46aa-8b11-4423cc22f4ae}</string>
</array>
<key>bookmarks.bookmark.{c27f3b46-eb8b-46aa-8b11-4423cc22f4ae}.fullscreenMode</key>
string>@Variant(???????FullscreenMode?????)</string
<key>bookmarks.bookmark.{c27f3b46-eb8b-46aa-8b11-4423cc22f4ae}.hostname</key>
<string>THIS IS A TEST CONNECTION FROM THE GUI</string>
<key>bookmarks.bookmark.{c27f3b46-eb8b-46aa-8b11-4423cc22f4ae}.label</key>
<string>THIS IS A TEST CONNECTION FROM THE GUI</string>
<key>bookmarks.bookmark.{c27f3b46-eb8b-46aa-8b11-4423cc22f4ae}.username</key>
<string>THIS IS A TEST CONNECTION FROM THE GUI</string>
<key>connectWindow.geometry</key>
<data>
AdnQywABAAAAAAHx////0QAAA/YAAAJvAAAB8QAAACwAAAP2AAACbwAAAAAAAA==
</data>
<key>connectWindow.windowState</key>
<data>
AAAA/wAAAAD9AAAAAAAAAgYAAAJEAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAEA
AAAOAHQAbwBvAGwAQgBhAHIBAAAAAP////8AAAAAAAAAAA==
</data>
<key>internal.exportoptionsdialogexportFilename</key>
<string>KIBSD Psych Virtual Scoring Server</string>
<key>preferences.adalmohoro.username</key>
<string></string>
<key>preferences.rdweb.feedurl</key>
string>@Variant(????ÿÿÿÿ)</string
<key>preferences.rdweb.username</key>
<string></string>
<key>preferences.resolutions</key>
<array>
<string>@Size(640 480)</string>
<string>@Size(800 600)</string>
<string>@Size(1024 768)</string>
<string>@Size(1280 720)</string>
<string>@Size(1280 1024)</string>
<string>@Size(1600 900)</string>
<string>@Size(1920 1080)</string>
<string>@Size(1920 1200)</string>
</array>
<key>show_whats_new_dialog</key>
<false/>
<key>stored_version_number</key>
<string>8.0.24875</string>
</dict>
</plist>

stevewood
Honored Contributor II
Honored Contributor II

@spowell01 any time I had a bookmark that was not showing up, it came down to an ownership issue on the plist. Make sure that the entire container structure has the correct ownership (user:staff).

The plist created by Remote Desktop is a binary plist, so you need to use plutil to convert it to XML if you want to read it or post it:

plutil -convert xml1 <plist>

The plist you posted looks correct.

spowell01
Contributor

@stevewood
Thanks for your responses steve, I was able to copy the text from the plist over to my windows machine and as you can see above it let me post it without issue.

It looks to me like once I create a connection manually, the uuid is no longer tied to each string on my original connection?

stevewood
Honored Contributor II
Honored Contributor II

The UUID is individual to each bookmark you create. So, if you create it using the script you'll have one UUID, and then if you create manually in RDC, you'll have a different UUID for that connection. Make sense?

If you open a Terminal window and go to this path: /Users/<user>/Library/Containers and do an ls -la on that directory, what are the owner/group and permissions for com.microsoft.rdc.mac?

spowell01
Contributor

drwx---rwx 5 composer staff 170 Jun 18 16:56 com.microsoft.rdc.mac

composer is the username on this machine currently.

I understand that the UUID is individual, after deployment with the script, the UUID i am seeing for my custom connection is:97531981-CA4B-4E88-8028-A14F1CFD9A29; however it never shows up in the guy

After creating a second connection via the gui i am seeing the uuid for my original connection disappear, and only seeing a uuid for the new connection. The act of creating a new connection in the gui shouldn't wipeout the uuid from my first connection.

acdesigntech
Contributor II

so... our users here use the old 2.1.3 version of Remote Desktop Connection.app. I'd love to deploy v8 as it is way more stable when connecting to Win 7 computers... but need an automated way to set up the connection they already have. @stevewood][/url, it looks like your script could possibly do this if I read the hostname in from the old rdc plist.

Any ideas on how to automate accepting the machine cert on a new connection using to Windows 7?

EDIT:
Or rather, pre-populating the cert and putting it in the users keychain? Probably not, but it never hurts to ask!

spowell01
Contributor

I've played around a bit more with the connection script this morning and i had one successful run where i installed just the RDP app, and then in a second policy ran the script and voila i saw the connection on the client. I can't reproduce that though, and everything else i try ends up with the plist looking correct with nothing showing up, until i manually create a connection then the plist/bookmark line format changes completely.

spowell01
Contributor

And i've finally got it working. I believe it was related to the fact that the plist file was replacing itself with a cached version after i updated it. Looking back i knew of this issue as we had to use killall cfprefsd when modifying plists before. I discovered that simply doing a defaults read on the plist right after updating it essentially does the same thing as killall cfprefsd.

Here is the final script that i'm using and it seems to work pretty flawlessly to add a new connection without wiping out what the users already had in their list. Thanks @stevewood for all your help!

#!/bin/sh

# date: 18 Jun 2014
# Name: RDC-Connection.sh
# Author: Steve Wood (swood@integer.com)
# Modified by Sam Powell (spowell01@kibsd.org)

#This will create a log folder @ /private/var
mkdir /private/var/logs/

# grab the logged in user's name
loggedInUser=/bin/ls -l /dev/console | /usr/bin/awk '{ print $3 }'

# global
RDCPLIST=/Users/$loggedInUser/Library/Containers/com.microsoft.rdc.mac/Data/Library/Preferences/com.microsoft.rdc.mac.plist
myUUID=uuidgen
LOGPATH='/private/var/logs'

# set variables
connectionName="Virtual Psych Scoring Server"
hostAddress="10.11.1.158"

# if you need to put an AD domain name, put it in the userName variable, otherwise leave blank
userName='kibsd'
userName+=$loggedInUser

set -xv; exec 1> $LOGPATH/rdcPlist.txt 2>&1

defaults write $RDCPLIST bookmarkorder.ids -array-add "'{$myUUID}'"
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.label -string "$connectionName"
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.hostname -string $hostAddress
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.username -string $userName

sudo chown -R "$loggedInUser:staff" /Users/$loggedInUser/Library/Containers/com.microsoft.rdc.mac

sudo chmod -R 777 /Users/$loggedInUser/Library/Containers/com.microsoft.rdc.mac

sudo -u $loggedInUser defaults read /Users/$loggedInUser/Library/Containers/com.microsoft.rdc.mac/Data/Library/Preferences/com.microsoft.rdc.mac.plist

gmarnin
New Contributor III

@stevewood thanks for the script.

Has anyone added the "alternate shell:s": key to Steve's script? I can't figure out the correct syntax.

The key is supported as per https://technet.microsoft.com/en-us/library/dn690096.aspx

userName='domain'
userName+=$loggedInUser
resolution="0 0"
colorDepth="32"
fullScreen="false"
scaleWindow="true"
useAllMonitors="true"
# When I manually add this to the profile it works: alternate shell:s:||WordPad
application="||WordPad"

defaults write $RDCPLIST bookmarkorder.ids -array-add "'{$myUUID}'"
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.label -string "$connectionName"
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.hostname -string $hostAddress
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.username -string $userName
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.resolution -string "@Size($resolution)"
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.depth -integer $colorDepth
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.fullscreen -bool $fullScreen
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.scaling -bool $scaleWindow
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.useallmonitors -bool $useAllMonitors
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.alternateshell -string $application

stevewood
Honored Contributor II
Honored Contributor II

@gmarnin after some testing, here's what I've come up with that seems to work. Test it, of course.

#!/bin/sh

# date: 18 Jun 2014
# Name: RDC-Connection.sh
# Author:  Steve Wood (swood@integer.com)
# updated: 29 Feb 2016 - included line to add remote program to start on connection for @gmarnin

# grab the logged in user's name
loggedInUser=`/bin/ls -l /dev/console | /usr/bin/awk '{ print $3 }'`

# global
RDCPLIST=/Users/$loggedInUser/Library/Containers/com.microsoft.rdc.mac/Data/Library/Preferences/com.microsoft.rdc.mac.plist
myUUID=`uuidgen`
LOGPATH='/private/var/inte/logs'

# set variables
connectionName="NAME YOUR CONNECTION"
hostAddress="SERVERIPADDRESS"

# if you need to put an AD domain name, put it in the userName variable, otherwise leave blank
userName='DOMAINNAME'
userName+=$loggedInUser
resolution="1280 1024"
colorDepth="32"
fullScreen="FALSE"
scaleWindow="FALSE"
useAllMonitors="TRUE"

set -xv; exec 1> $LOGPATH/rdcPlist.txt 2>&1

defaults write $RDCPLIST bookmarkorder.ids -array-add "'{$myUUID}'"
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.label -string "$connectionName"
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.hostname -string $hostAddress
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.username -string $userName
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.resolution -string "@Size($resolution)"
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.depth -integer $colorDepth
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.fullscreen -bool $fullScreen
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.scaling -bool $scaleWindow
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.useallmonitors -bool $useAllMonitors
defaults write $RDCPLIST bookmarks.bookmark.{$myUUID}.remoteProgram -string "C:\\Program Files\\\\Windows NT\\Accessories\\wordpad.exe"


chown -R "$loggedInUser:staff" /Users/$loggedInUser/Library/Containers/com.microsoft.rdc.mac