Customizing/Deploying TeamViewer

New Contributor III

Hi Everyone,

Just wondering if any of you have experience customizing TeamViewer Host 9 for deployment?
I tried following this instructions:

but I'm using composer instead. I deployed the pkg to my test machines but TeamViewer doesn't want to run.

Any help? Thanks.


New Contributor III

someone got any experience on this? Please :)

Valued Contributor

In mid July I'm going through Jumpstart training at our institution. While we primarily use Apple Remote Desktop and will possibly Casper Remote moving forward (all our managed machines are setup with a VPN to connect to us), we're looking to TeamViewer to be our online remote quicksupport system. We're not trying to use the TeamViewer Management Console to organize everything.

What exactly are you trying to customize in TeamViewer for your deployment? Are you trying to deploy the full TeamViewer install, or just TeamViewer Host?

My guess is you could take a New & Modified snapshot in Composer prior to install, install and configure your settings - unattended password, wake on LAN, etc. - and then take your after snapshot so your sure to get all your settings.

Still very new to this, but I'm assuming you could then build your .pkg or .dmg and deploy it so those settings ripple to any new or existing home directories on the Mac so no matter who's logged or what new accounts are created you could still connect to them remotely.

All that being said, it might just be easier to download or configure the TeamViewer QuickSupport module and cache it somewhere on your deployed machines so it can be immediately launched without you or your users needing to download or install anything.

Sorry for all the speculation ... As we work on our first round of deployments, I'll report back anything helpful I learn in attempting to integrate TeamViewer into our environment through Casper.

Valued Contributor

@Araneta ,

Don't know if you have a TeamViewer license or not, but if you have a license you can create custom modules that have your institution's branding and text for your users. I just made and downloaded the custom TeamViewer Host module I created on a freshly imaged computer, took a normal snapshot with Composer, and installed the TeamViewer module. Opened the TeamViewer Host application a few times to make sure it worked as expected and had our custom branding, set custom preferences / settings, and then took my post snapshot.

Worth noting, when you download your custom-made TeamViewer module package, TeamViewer does NOT include your customizations in the package itself. The TeamViewer application has to be able to talk to to download the customization files it needs. Why TeamViewer doesn't put these things in the package you download I really don't know ... Anyway, we ran into the problem where the VLAN we were using was preventing TeamViewer Host from accessing, and rather than open up the whole website in our web filter, I just temporarily connected the computer to a different VLAN just to get the customization files. With those files downloaded then took the 2nd Composer snapshot.

As far as I can tell, there's really nothing special you have to do besides that. We made sure to attach our institution's account to TeamViewer Host so we can track them and enforce any TeamViewer policies we might specify in the TeamViewer Management console.

New Contributor III

Hey @aporlebeke ,

Yes we have license for Teamviewer. Does your Teamviewer settings have the unattended password set?b6a30cf67ea84278b2165fef0708f623
That is one thing that I can't figure out before, how to apply that password as part of package.

I deploy Teamviewer now on our clients as you mentioned but with a slightly different process. I've been following this process:

For us to keep the PermanentPassword we need to deploy Teamviewer 8 first and then install the new version on top of it.
I haven't had any luck before deploying it straight from a composer package. If you're saying now that it works perfectly I may have to re-visit my process.

New Contributor III

I've tried deploying teamviewer on our macs using composer and it never seemed to work. It's been about a year since I tried last, but I think one of the issues was that it either didn't assign to our account, didn't keep our unattended password, or didn't show up in our list when logging into the Teamviewer clients.

Or it could have been all three :D

But yeah, maybe I'll try it again and see what happened.

@aporlebeke Is there anything special you did to get it to work that you remember?

New Contributor

Hey, just wondering if anyone has successfully done this

New Contributor III

Hi @jski ,

Here's the workflow that I'm using.

  1. Install teamviewer 8 on a fresh machine. Set all you need (unattended password, etc.) Grab the SecurityPasswordAES and OptionsPasswordAES from /Library/Preferences/com.TeamViewer8.Settings
  2. Create a new policy or a new package using composer which contains the teamviewer 8 install and a pre install script to put the settings first. These are the ones I have on my script: defaults write /Library/Preferences/com.TeamViewer8.Settings SecurityPasswordAES -data yourownstring defaults write /Library/Preferences/com.TeamViewer8.Settings General_DirectLAN -int 2 defaults write /Library/Preferences/com.TeamViewer8.Settings UpdateCheckInterval -int -1 defaults write /Library/Preferences/com.TeamViewer8.Settings AutoUpdateMode -int 3 defaults write /Library/Preferences/com.TeamViewer8.Settings Security_Adminrights -int 1 defaults write /Library/Preferences/com.TeamViewer8.Settings HostInfoDialog -int 0 defaults write /Library/Preferences/com.TeamViewer8.Settings OptionsPasswordAES -data yourownstring

Create a dummy receipt for teamviewer 8 clients or a licensed computer smart group.
Include a update inventory script or Maintenance(Policy) to update the machine inventory to JSS.

  1. Create a policy scoped to Teamviewer 8 computer that uninstalls teamviewer 8 and install teamviewer 9 (hasn't tested it on 10 yet) plus a post install script to remove teamviewer 8 settings after the new version is installed.

Here's the script:
test -f /Library/Preferences/com.TeamViewer8.Settings.plist && rm -f /Library/Preferences/com.TeamViewer8.Settings.plist
test -f /Library/Preferences/com.TeamViewer8.Settings.plist.lockfile && rm -f /Library/Preferences/com.TeamViewer8.Settings.plist.lockfile
test -f /Library/Preferences/com.TeamViewer9.Settings.plist.lockfile && rm -f /Library/Preferences/com.TeamViewer9.Settings.plist.lockfile

Remove TeamViewer 8 folder in Applications if it exists

test -d /Applications/TeamViewer 8/ && rm -rf /Applications/TeamViewer 8/

exit 0

and your done.

It is a bit fiddly that's why I just switched to deploying Quicksupport instead. You can set the password easily on quicksupport and I just included quicksupport on the dock.

Good luck

Valued Contributor

@Araneta @rleatherwood Hello everyone. Sorry for not responding, for some reason I didn't have email notifications turned on for JAMFnation. That's since been fixed :)

SO! Today I said enough is enough. I'm tired of imaging our machines, logging in, opening a web browser, navigating to our custom PKG URL @, clicking through the installer, setting a passcode, etc. etc. just get to get TeamViewer on our machines.

So, I created a script, which I have tested successfully (EDIT: works with TeamViewer 11 & 12). The script automates most of the process - downloading, installing, and deleting the TeamViewer PKG. You still have to manually enter a remote code, but I can image you could build that yourself it you wanted to.

Here's the script:

# Created by AP Orlebeke on 2/24/16
# Downloads TeamViewer 10 Host package, effectively going to 
# in a browser.
USER=$(/bin/ls -l /dev/console | /usr/bin/awk '{print $3}')
# Create a function to echo output and write to a log file
writelog () {
    echo "${1}"   "${2}" "${3}" "${4}"
    echo $(date) "${1}"   "${2}" "${3}" "${4}" >> $logfile
# Check for Log file
if [ -f "/path/to/log/file.log" ]; then
    writelog "CHECK: Log Present"
    touch "/path/to/log/file.log"
    writelog "CREATED: Log"
# You can change this to wherever you want, but setting to a local
# user will download the PKG to that user's home folder.
/usr/bin/cd /Users/$USER
writelog "DOWNLOADING: TeamViewer Host PKG"
/usr/bin/curl '' -o "Install TeamViewerHost-XXXXXXXX.pkg"
sleep 15
if [ -f "/Users/$USER/Install TeamViewerHost-XXXXXXXX.pkg" ]; then
    # Installs package
    writelog "INSTALLING: TeamViewer Host"
    /usr/sbin/installer -pkg "/Users/$USER/Install TeamViewerHost-XXXXXXXX.pkg" -target /
    writelog "WAITING: Download incomplete"
    sleep 5
    writelog "INSTALLING: TeamViewer Host Attempt 2"
    /usr/sbin/installer -pkg "/Users/$USER/Install TeamViewerHost-XXXXXXXX.pkg" -target /
sleep 5
writelog "DELETING: TeamViewer Host PKG"
sudo rm -rf "/Users/$USER/Install TeamViewerHost-XXXXXXXX.pkg"
writelog "Script Complete"
exit 0

The real key here for me was getting the full download path to our custom module (the curl line of the script). If you go to your module's URL - - there is a link in the middle of the page that you can click in the event the PKG doesn't download automatically.


Copy that link and pop it into the curl line to have the script download that file and BAM! You've got yourself a script you can use with a policy to automate a lot of the manual work you were doing before.

I had issues over the summer where I was changing the name of the TeamViewer PKG file that gets downloaded and if I recall correctly if you change the name it will not apply your custom design settings. So for this I kept the PKG named whatever it is by default.

You're happy to remove the logging component or shorten/extend the sleep times depending on your Internet speeds. Take it and run with it. I don't have a Github page, but maybe now I'll get around to it.

Hope it proves helpful for folks!

New Contributor III

Awesome thanks, I'll look into this when I get a free moment and see if we can get it working down here, we had just given up putting Teamviewer on our macs for now and have only been pushing it out to our PC's

This would be a great help!

Valued Contributor

This was super helpful. With some small edits I was able to get it to work for us. One question would you know what preference file is written to set the unattended password?

That one file or .plist I would love to have configured at install and first run.

Thank you for the work on this!

Valued Contributor

@dvasquez I haven't gotten around to figuring out how to automatically setup the unattended password. I was just glad to significantly decrease the steps we were taking post-image to setup. This information may live in a preference file, but depending on this information is formatted / written may not be deployable ... I'm going to take another look and see what I can figure out, but it's not something that's critical for me in our environment.

Valued Contributor

@dvasquez It looks like the /Library/Preferences PLIST (com.teamviewer.teamviewer10.plist) holds this information underneath the key of PermanentPassword, but all the sensitive information in this PLIST is encrypted. To automate or deploy this password you'd have to some fancy stuff, but frankly I'm not sure this is possible.

I'd reach out to TeamViewer and see. They charge extra for Windows if you want to be able to use an MSI file to automate TeamViewer installs, so I'd imagine they'd be not inclined to help do this on the Mac side.

Best of luck, but if you get it working, please share!

Valued Contributor

I get it. Just wanted to see. Thank you this it will have a significant impact on our deployment especially for our other regions.

Thank you!

Valued Contributor

Something I updated on our JSS recently was adding an Extension Attribute to collect the 9-digit unique TeamViewer ID number for machines that have or installed.

I've added it to my Github if you want to check it out.



Any further progress on deploying the unattended password for TeamViewer?

I found this, but no info on the unattended password:

Valued Contributor

@kvellano Interesting. I posted a comment on the YouTube video to see if this is now possible. We won't be upgrading to version 12 until July 2017, so I can't test myself :(

Also, if anyone has been using the script I posted previously, I've posted it on Github with some more helpful comments if you're looking to deploy it in your environment. You can checkout the TeamViewer download & install script here.

Valued Contributor

@kvellano I started testing TeamViewer12 with a trial license I received from support.

From what I can tell, the new script-based TeamViewer Host deployment option is dependent on the Assignment Tool, which is only available with a TeamViewer Corporate license, which is más $$.

Even if you do have a Corporate license and use this tool, it does not appear to allow you to automatically configure an unattended password. However, from their MSI deployment documentation (though focused on Windows) does include a macOS script flag that allows you to enable easy access for the account assignment: -allowEasyAccess=true.

I can confirm though that with the current version of TeamViewer 12 and my automated TeamViewer download & install script works on macOS Sierra (10.12.4). You just need to change the .../version_10x/... portion of the URL to version_12x.

Valued Contributor

Small update here.

After upgrading to TeamViewer 12 and updating our modules, I noticed that the script to download our host module was failing during install.

It appears that these downloads have moved a bit, as every time I ran our normal curl command I kept getting a file that was roughly ~200 bytes. The installer should be at least 30MB.


If you run a curl ' (the link you get by right-clicking the "Try Again" URL on your host download page) you'll get something like the following:

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="">here</a>.</h2>

You'll notice the difference in the initial portion of the URL compared to what's shown on the download page.

Use this link instead in your script.


I did mine differently by using @aporlebeke script because of Device Assignment.

I have a policy with a package and post install script.

The package contains my custom TeamViewer Host and the TeamViewer_Assignment and place them inside /Users/Shared/TeamViewer

and run the script below



#Check for Log file
if [ -f $logFile ]; then
    echo "$(date)" >> $logFile
    echo "Log Present" >> $logFile
    touch $logFile
    echo "$(date)" >> $logFile
    echo "Log file Created" >> $logFile
#Install the package
echo "Installing Package..." >> $logFile
/usr/sbin/installer -pkg "/Users/Shared/TeamViewer/Install TeamviewerHost-**ID**.pkg" -target /
echo "Package installed..." >> $logFile

#Launch TeamViewer Service
echo "launch TeamViewer plist..." >> $logFile
sudo launchctl load /Library/LaunchDaemons/com.teamviewer.teamviewer_service.plist

#Assign the right permission for TeamViewer_Assignment
sudo chmod +x /Users/Shared/TeamViewer/TeamViewer_Assignment

#Run Assignment Tool
/Users/Shared/Teamviewer/TeamViewer_Assignment -apitoken **XXXXXXXX** -datafile /Library/Application Support/TeamViewer Host/Custom Configurations/**ID**/AssignmentData.json -devicealias "${HOSTNAME} Description" -allowEasyAccess=true -wait=10 -verbose

#Remove installer file
sudo rm -rf "/Users/Shared/TeamViewer"
echo "deleting Teamviewer folder"

echo "complete" >> $logFile