View Issue Details

IDProjectCategoryView StatusLast Update
0003171DCP-o-maticPackagingpublic2026-07-11 07:00
Reportereaglebtc Assigned To 
PrioritynormalSeverityfeatureReproducibilityN/A
Status newResolutionopen 
PlatformMacOSanyOS Versionany
Product Version2.18.45 
Summary0003171: A LaunchDaemon to run an encode server in headless mode.
Description

Hello,

Chapter 13 of the manual describes configuring a computer as a node for encoding DCP's on the LAN, but all of those methods (except the live CD) require some manual steps to launch the app. And if it crashes for some reason, the operator must intervene to restore functionality.

For the Mac platform, I have taken the liberty of writing a LaunchDaemon Property List, and built a package with a post-install script to activate the CLI as a background daemon that always runs on boot. LaunchDaemons do not require any user to log in, so this becomes a "headless" instance.

The complete installation consists of one text file — a property list (plist) — in a special location and set with specific permissions, and a script to tell MacOS Launch Services to load and install it permanently.

Additional Information

The separate files are attached for your convenience and independent analysis. The package will place the file in the correct path, then run the post-install script to set permissions / ownership and activate the LaunchDaemon.

The attached package will work for all versions of MacOS at least through macOS 15 Sequoia. I haven't had a chance to test on a Mac with Tahoe or Golden Gate. NOTE: the package is not signed, and will throw a warning when you try to run it locally. Right-click, then Open.

Eventually you'll have to rebuild and re-sign what I created in order to distribute this yourself.

Tagscli, MacOS, server
Attached Files
postinstall.sh (236 bytes)   
#!/bin/bash

encodeserver="/Library/LaunchDaemons/com.dcpomatic.encodeserver.plist"

# Set permissions for LaunchDaemon, then load it.

chmod 644 "$encodeserver"
chown root:wheel "$encodeserver"
/bin/launchctl load -w "$encodeserver"


postinstall.sh (236 bytes)   
com.dcpomatic.encodeserver.plist (501 bytes)   
<?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>Label</key>
	<string>com.dcpomatic.encodeserver</string>
	<key>Program</key>
	<string>/Applications/DCP-o-matic/DCP-o-matic 2 Encode Server.app/Contents/MacOS/dcpomatic2_server_cli</string>
	<key>RunAtLoad</key>
	<true/>
	<key>KeepAlive</key>
	<true/>
	<key>ProcessType</key>
	<string>Background</string>
</dict>
</plist>

Branch
Estimated weeks required
Estimated work required

Activities

eaglebtc

2026-07-11 07:00

reporter   ~0007340

Two important things to note:

1) I downloaded all the DCP-o-matic apps and placed them in a subfolder:

/Applications/DCP-o-matic

2) The script I've provided expects "DCP-o-matic 2 Encode Server.app" to already be present in this subfolder of /Applications. Otherwise, the package will fail. For testing and validation purposes, please either move the app to this location, or revise the LaunchDaemon and update your own package accordingly.

If I were to make a suggestion: the Encode Server could be distributed separately as an "unattended installation" package with just the CLI, for people who want to set up a bunch of spare Macs as encoder nodes.

Issue History

Date Modified Username Field Change
2026-07-11 06:53 eaglebtc New Issue
2026-07-11 06:53 eaglebtc Tag Attached: cli
2026-07-11 06:53 eaglebtc Tag Attached: MacOS
2026-07-11 06:53 eaglebtc Tag Attached: server
2026-07-11 06:53 eaglebtc File Added: com.dcpomatic.encodeserver.pkg
2026-07-11 06:53 eaglebtc File Added: postinstall.sh
2026-07-11 06:53 eaglebtc File Added: com.dcpomatic.encodeserver.plist
2026-07-11 07:00 eaglebtc Note Added: 0007340