Example scripts that turn a fresh Linux or Windows workstation into an AWS Deadline Cloud submission machine. An artist who logs in finds Blender and the Deadline Cloud submitter installed, alongside Deadline Cloud monitor with a profile already configured. The only remaining step is signing in.
Treat each script as a worked example to copy and adapt. Each takes one argument and keeps its settings as constants at the top, so the whole flow reads top to bottom.
How to complete the workstation setup that normally requires a person clicking through installers and a monitor sign-in dialog:
- Installing Blender from an official release archive.
- Installing the Deadline Cloud submitter with its silent installer.
- Enabling the submitter's Blender add-on, which the silent installer alone does not do.
- Installing Deadline Cloud monitor.
- Creating a monitor profile non-interactively with
deadline-cloud-monitor create-profile, so the profile exists before anyone signs in.
Run either script during provisioning, from EC2 user data, during an AMI or image bake, or by hand on a workstation VM.
Blender stands in for whichever DCC you run. It is used here because it installs unattended from a public archive with no license server, which keeps the example runnable as-is. See Adapting to another DCC.
-
Ubuntu 22.04 or a Windows image, with a desktop environment already present because the scripts do not install one. Blender, the submitter GUI, and the monitor are all desktop applications. An AWS Deadline Cloud base image, a NICE DCV workstation, or a Windows Server image with the Desktop Experience all work.
Deadline Cloud monitor's
.debdepends onlibwebkit2gtk-4.0-37, which Ubuntu 24.04 no longer publishes; it carrieslibwebkit2gtk-4.1-0instead, and no official repository offers the 4.0 build for it. That is why this example pins Ubuntu 22.04. The Linux script checks for the package up front and stops with an explanation rather than failing partway through.On a newer release, install the submitter without the monitor and authenticate a different way.
deadline auth loginis not an alternative, because it drives the monitor and only accepts profiles the monitor created. Use an ordinary AWS credential source instead, such as an IAM Identity Center profile created withaws configure ssoor an instance profile, and delete the monitor and profile steps from the script. The artist then signs in through that mechanism rather than the monitor, so what this sample pre-configures no longer applies. -
An x86-64 host. Blender's archive, Deadline Cloud monitor, and the
libssl1.1package the Linux script fetches are all pinned to x86-64, so an arm64 instance such as Graviton needs those three substituted. -
Administrator access, and on Windows it has to be the artist's own account. Windows cannot write another user's per-user state without that user's password, so the script has to run as an administrator and as the account that signs in, both at once. It refuses to run as
SYSTEMfor the same reason. That means the artist's account needs to be in the localAdministratorsgroup. Linux only needsroot, since it writes the per-user state withrunuser.Where artists are standard users, split the Windows script in two. Run the Blender, submitter, and monitor installers under any administrator account. Then run only the add-on step and
create-profileas the artist, without administrator rights. The monitor installs per user into%LOCALAPPDATA%andcreate-profilewrites to%USERPROFILE%, so those two steps do not need them. -
Outbound HTTPS to
downloads.deadlinecloud.amazonaws.comand to the Blender mirror. -
A working default web browser. Deadline Cloud monitor hands off to it to complete sign-in, so without one the artist sees "Failed to execute default Web Browser". Windows Server images normally include Microsoft Edge, so nothing extra is needed there. On Ubuntu 22.04 and later,
apt install firefoxgets a transitional package that installs the Firefox snap, and snaps do not work in every remote-desktop session. Install Firefox from the Mozilla apt repository instead, and add an apt pin so the.debwins over Ubuntu's snap transitional package. Verified on Ubuntu 22.04: the Mozilla.debcompletes sign-in in a VNC session. -
Your monitor URL, from the Monitors page of the Deadline Cloud console. It must include the Region segment, as in
https://mystudio.us-west-2.deadlinecloud.amazonaws.com/. -
No AWS credentials. The scripts call no AWS APIs.
The Linux script was written and tested against Ubuntu 22.04 on x86-64 only. Other Debian-family releases are likely to work, since the script uses nothing Ubuntu-specific beyond apt-get and the libssl1.1 package it fetches. On a non-Debian distribution, replace the apt-get calls, install the monitor from its .rpm rather than the .deb, and satisfy OpenSSL 1.1 the way that distribution expects.
Both scripts are run end to end in CI by virtual_workstation_checks.yml, on Ubuntu 22.04 and on Windows Server 2022 under both Windows PowerShell 5.1 and PowerShell 7, whenever this sample changes and once a week. The weekly run catches a new submitter or monitor release breaking the sample, since both are resolved as "latest" rather than pinned.
Linux, as root. Under sudo the artist's account is inferred from SUDO_USER:
sudo ./setup_workstation_linux.sh https://mystudio.us-west-2.deadlinecloud.amazonaws.com/Name the account explicitly when provisioning runs as root with nothing to infer from, which includes EC2 user data and an AMI bake. Pass it there, because the profile and Blender's add-on preferences are per user: without it the script configures root and the artist finds nothing set up.
./setup_workstation_linux.sh https://mystudio.us-west-2.deadlinecloud.amazonaws.com/ artistWindows, in an elevated PowerShell session as the artist's own account. Start PowerShell with Run as administrator first: the script declares #Requires -RunAsAdministrator, so launching it from an unelevated shell fails with ScriptRequiresElevation rather than prompting.
.\setup_workstation_windows.ps1 https://mystudio.us-west-2.deadlinecloud.amazonaws.com/The monitor, its profile, and Blender's add-on preferences are all per user. Linux writes them for another account with runuser, but Windows cannot do so without that account's password, so the Windows script has no equivalent of the second argument.
On Windows, running the script through a mechanism that executes as SYSTEM rather than as a user, such as Systems Manager Run Command or an EC2 user data script, writes the profile and Blender preferences into a service profile the artist never logs in to. The artist then sees no pre-configured monitor. Run it as the artist's own account: interactively, or as a scheduled task created with /RU <artist> /RL HIGHEST.
After either script finishes, the artist signs in through a desktop session on the machine. The scripts install no desktop or remote-access server, so provide one separately.
Both scripts run the same five steps, in the same order, under section headers that name each one. The Linux script has one extra section, Prerequisites, covering the packages and OpenSSL 1.1 described below.
- Validate the monitor URL and derive the Region, the subdomain, and the profile name (
<subdomain>-<region>). - Install Blender from the official archive, verified against its published checksum, into a fixed prefix (
/opt/blenderorC:\Program Files\Blender). - Install the submitter from its
latestURL, verify its checksum, and run it with--mode unattended. - Enable the Blender add-on. The silent install stages the add-on but cannot enable it, because add-ons live in Blender's per-user preferences while the install runs at system scope. The scripts run the installer's own
add_submitter_to_pref.pythrough Blender in background mode, then read the preferences back to confirm. - Install the monitor and create the profile with
create-profile, a non-GUI subcommand that writes the profile and exits without needing a display.
Every download is verified against a published SHA-256 checksum, and the scripts fail if a checksum cannot be fetched. An internal Blender mirror must also serve Blender's blender-<version>.sha256 manifest.
Both the submitter and the monitor publish a latest path per platform that always serves the current release, each with a .sha256 beside it. The scripts use the two that apply to them. The rest are here for adapting to another platform.
| Component | Platform | URL, under https://downloads.deadlinecloud.amazonaws.com/ |
|---|---|---|
| Submitter | Linux | submitters/latest/linux/DeadlineCloudSubmitter-linux-x64-installer.run |
| Submitter | Windows | submitters/latest/windows/DeadlineCloudSubmitter-windows-x64-installer.exe |
| Submitter | macOS | submitters/latest/macos/DeadlineCloudSubmitter-osx-installer.app.zip |
| Monitor | Debian family | dcm/latest/deadline-cloud-monitor_amd64.deb |
| Monitor | RPM family | dcm/latest/deadline-cloud-monitor.x86_64.rpm |
| Monitor | Linux, generic | dcm/latest/deadline-cloud-monitor_amd64.AppImage |
| Monitor | Windows | dcm/latest/DeadlineCloudMonitor_x64-setup.exe |
| Monitor | macOS, Intel | dcm/latest/Deadline Cloud Monitor x64.dmg |
| Monitor | macOS, Apple silicon | dcm/latest/Deadline Cloud Monitor aarch64.dmg |
Append .sha256 to any of these for its checksum.
The Linux script also installs libssl1.1, because Deadline Cloud monitor links against OpenSSL 1.1 while no current Ubuntu release provides it. Ubuntu 20.04 is the last release to carry the package, so the script takes it from the Ubuntu archive. That one artifact is published without a .sha256 beside it, so its expected hash is a constant at the top of the script alongside the version, with a comment naming the index to read a newer hash from.
On another distribution, prefer whatever OpenSSL 1.1 package your own repositories provide and delete that step, rather than installing an Ubuntu-built .deb elsewhere.
create-profile writes an AWS profile that resolves credentials through the monitor rather than through IAM Identity Center stanzas:
[profile mystudio-us-west-2]
region=us-west-2
credential_process=cat "/home/artist/.cache/com.amazonaws.deadline.monitor/credentials_mystudio-us-west-2.json"
user_id=
identity_store_id=
monitor_id=pending-first-loginThe scripts pass two further flags, both optional:
--set-as-deadline-defaultpoints the Deadline Cloud CLI at this profile, by writingaws_profile_nameunder[defaults]in~/.deadline/config. Without it,deadlinecommands need--profileorAWS_PROFILE. Drop it on a workstation that submits to more than one monitor.--enable-auto-loginstarts sign-in as soon as the monitor opens, rather than making the artist pick the profile first. Keep it unless you want the picker, since skipping the picker is most of what pre-configuring the profile buys.
On Windows the same profile instead delegates to the monitor executable:
credential_process="C:\Users\artist\AppData\Local\DeadlineCloudMonitor\DeadlineCloudMonitor.exe" get-credentials --profile mystudio-us-west-2The placeholder and empty fields are expected. create-profile requires a --monitor-id, but the real ID cannot be discovered without AWS credentials, so the scripts pass pending-first-login. The monitor replaces it, along with user_id and identity_store_id, with authoritative values from the portal at the artist's first sign-in. Either form of credential_process yields no credentials until that sign-in happens, so it is the intended remaining step.
The placeholder must be non-empty. An empty --monitor-id makes the monitor drop the profile from its picker and fall back to asking for the monitor URL, which defeats the point of pre-configuring it. The value is shown verbatim in the monitor's profile list until first sign-in, so it reads as a status rather than looking like a real ID.
Because the cache path is written into the profile at creation time and lives under the invoking user's home directory, the profile only works for the account it was created for.
Everything Deadline Cloud does is identical for every DCC, so switching to Maya, Nuke, Houdini, 3ds Max, Cinema 4D, After Effects, or VRED means changing three things, called out in comments in both scripts:
- The component names (
SUBMITTER_COMPONENTandBLENDER_COMPONENT, or$SubmitterComponentand$BlenderComponent), such asdeadline_cloud_for_houdiniplushoudini_20_5. Run<installer> --helpfor the current--enable-componentsvalues. The--<dcc>-pathflag is derived from the version component, so it follows automatically. - The Blender install step. Commercial DCCs need a vendor installer and, in most cases, a license server, so replace that block entirely. Also update the install prefix constant.
- The add-on enable step. It is Blender-specific, including the
Submitters/Blender/paths and thedeadline_cloud_blender_submittername it verifies. Other DCCs are wired up by the installer itself or by an environment variable such asMAYA_MODULE_PATHorNUKE_PATH, so you can often delete it.
Note that the submitter installer's --<dcc>-path flag takes the DCC executable on Windows but the install directory on Linux.
To install more than one DCC, pass a comma-separated --enable-components list with every DCC and version component you need, one --<dcc>-path flag each, and repeat step 2 per DCC.
| Item | Linux | Windows |
|---|---|---|
| Blender | /opt/blender, symlinked to /usr/local/bin/blender |
C:\Program Files\Blender |
| Submitter and Deadline Cloud CLI | /opt/DeadlineCloudSubmitter |
C:\Program Files\DeadlineCloudSubmitter |
| Monitor | /usr/bin/deadline-cloud-monitor (system-wide) |
%LOCALAPPDATA%\DeadlineCloudMonitor (per user) |
| AWS profile | ~/.aws/config |
%USERPROFILE%\.aws\config |
| Deadline Cloud CLI config | ~/.deadline/config |
%USERPROFILE%\.deadline\config |
The submitter installer puts the deadline CLI on PATH itself. On Linux it writes /etc/profile.d/deadline.sh, which appends /opt/DeadlineCloudSubmitter/DeadlineClient, so the CLI appears in new login shells rather than the one that ran the script.
-
No credentials are stored, and none are needed. The scripts write no secrets and call no AWS APIs. The profile delegates to the monitor, which acquires credentials only when the artist signs in interactively.
-
Every installer is checksum-verified, and verification cannot be skipped. If you mirror Blender internally, serve its checksum manifest too and point the mirror constant at it.
-
Licensing. Blender is distributed under the GNU GPL. Review its terms for your use.
-
Cost. The scripts create no AWS resources. Running the workstation is billable, and jobs submitted from it are billed normally.
-
Cleanup. Uninstall the submitter, then the monitor, then delete the Blender prefix:
# Linux sudo /opt/DeadlineCloudSubmitter/uninstall --mode unattended sudo rm -rf /opt/DeadlineCloudSubmitter # the uninstaller leaves THIRD_PARTY_LICENSES behind sudo apt-get remove -y deadline-cloud-monitor sudo rm -rf /opt/blender /usr/local/bin/blender # Windows & "C:\Program Files\DeadlineCloudSubmitter\uninstall.exe" --mode unattended Remove-Item -Recurse -Force "C:\Program Files\Blender"
The Linux uninstaller removes
/etc/profile.d/deadline.sh, so thedeadlineCLI leaves new login shells. Remove the monitor on Windows through Settings > Apps > Installed apps. Then remove the profile stanza from~/.aws/configand the[defaults]entry from~/.deadline/config, and delete the monitor's credential cache (~/.cache/com.amazonaws.deadline.monitoron Linux).
Blender downloads fail with HTTP 403. download.blender.org rejects some automated clients, so the scripts default to a mirror. Pick another from mirror.blender.org, or host the archive and its checksum manifest internally.
The script stops with "exists but holds no blender executable." A previous run was interrupted partway through installing Blender, leaving the prefix incomplete. The guard refuses to delete a prefix it cannot recognize as one of its own, because that constant is meant to be edited and deleting it unconditionally as root would destroy whatever it names. Confirm the path is the one you intended, then remove it and re-run:
# Linux
sudo rm -rf /opt/blender
# Windows
Remove-Item -Recurse -Force "C:\Program Files\Blender"Interrupted runs do not cause this any more: Blender is unpacked to a staging directory beside the prefix and moved into place, so the prefix only ever exists complete.
The add-on step fails with qtpy.QtBindingsNotFoundError: No Qt bindings could be found. The bindings are present: the submitter bundles PySide6. That message is qtpy reporting an ImportError it could not attribute, and the real cause is a system library that PySide6 links against and this image does not have. On a minimal Ubuntu 22.04 image, the missing packages are:
sudo apt-get install -y libglib2.0-0 libfontconfig1 libfreetype6 \
libxkbcommon-x11-0 libxcb-cursor0 libxcb-icccm4 libxcb-image0 \
libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-shape0 libxcb-xkb1To see the actual cause rather than the qtpy summary, run ldd over the bundled Qt and look for not found:
ldd /opt/DeadlineCloudSubmitter/Submitters/Blender/python/modules/PySide6/QtCore.abi3.so | grep "not found"Ignore the libQt6*.so.6 entries there: those resolve within the bundle at load time. A full desktop environment provides every one of these packages, so the failure only appears on an image that has no desktop. It is the same class of failure as Blender's own missing X11 and GL libraries, which the script reports directly.
The Deadline Cloud menu is missing in Blender. Add-ons register per user, so confirm the script ran for the account that is signing in. On Linux that is the second argument. On Windows it is the account that ran the script. To check, as that same user:
blender --background --python-expr 'import bpy; print("deadline_cloud_blender_submitter" in bpy.context.preferences.addons.keys())'On Windows, write the same two lines to a file and pass --python <file> instead. Windows PowerShell does not preserve the inner quotes of an expression passed on the command line, so --python-expr raises NameError there. The script itself uses a file for this reason. Blender is not on PATH, so call it by path:
& 'C:\Program Files\Blender\blender.exe' --background --python C:\Temp\check_addon.pyDeadline Cloud monitor does not appear in the applications menu. Its desktop entry declares no menu category, so some desktop environments file it nowhere. Launch it by path instead, or add a launcher of your own:
# Linux
deadline-cloud-monitor
# Windows
& "$env:LOCALAPPDATA\DeadlineCloudMonitor\DeadlineCloudMonitor.exe"The monitor asks for a monitor URL instead of using the profile. The monitor found no usable profile, most often for one of these reasons:
- The profile went to a different account than the one signing in. On Windows, running the script as
SYSTEMproduces exactly that. Check that the stanza is in the signing-in user's own~/.aws/configor%USERPROFILE%\.aws\config. - The profile's
monitor_idis empty, which makes the monitor drop it from the picker. The scripts always write a non-empty placeholder, so this points to a profile created by hand. Recreate it with a non-empty--monitor-idas described under The profile.
Submission fails with a credentials error. Expected until the artist signs in to the monitor once. Check with deadline auth status, which reports NEEDS_LOGIN before sign-in and AUTHENTICATED after.
On Windows, the script cannot find the monitor after installing it. The installer honors WOW64 redirection, so under a 32-bit host process it installs into C:\Windows\SysWOW64\config\systemprofile\AppData\Local\DeadlineCloudMonitor\ even though %LOCALAPPDATA% points elsewhere, and the InstallLocation it records still names System32. The script tries the recorded path, its SysWOW64 equivalent, and %LOCALAPPDATA%, and reports every candidate when none exists. To find it by hand:
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" |
Where-Object { $_.DisplayName -eq "DeadlineCloudMonitor" } |
Select-Object InstallLocation