{"id":1620,"date":"2025-02-11T01:27:28","date_gmt":"2025-02-11T06:27:28","guid":{"rendered":"https:\/\/www.brunerd.com\/blog\/?p=1620"},"modified":"2025-02-15T03:01:42","modified_gmt":"2025-02-15T08:01:42","slug":"zoom-rooms-that-dont-auto-login-after-macos-updates-solved","status":"publish","type":"post","link":"https:\/\/www.brunerd.com\/blog\/2025\/02\/11\/zoom-rooms-that-dont-auto-login-after-macos-updates-solved\/","title":{"rendered":"Zoom Rooms that don&#8217;t auto login after macOS updates: Solved"},"content":{"rendered":"\n<p>So here&#8217;s the situation: You have a Mac mini that&#8217;s used as a Zoom Room controller. You&#8217;ve enabled automatic login. You <em>don&#8217;t<\/em> want the screensaver to come on ever and it should never ask for a password if the screen is turned off. This is a common ask and used to be really simple. You&#8217;d just go into Jamf, create a configuration profile, add the <strong>Applications &amp; Custom Settings payload<\/strong>, choose <strong>Upload<\/strong>, set the domain to <code>com.apple.screensaver<\/code> and add two XML keys <code>askForPassword<\/code> and <code>idleTime<\/code> set to <code>integer<\/code> <code>0<\/code>. This is known as an &#8220;MCX&#8221; style payload, they are from the olden OS X Server days.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Easy-idleTime-and-askForPassword.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"763\" src=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Easy-idleTime-and-askForPassword-1024x763.png\" alt=\"\" class=\"wp-image-1621\" style=\"width:422px;height:auto\" srcset=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Easy-idleTime-and-askForPassword-1024x763.png 1024w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Easy-idleTime-and-askForPassword-300x224.png 300w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Easy-idleTime-and-askForPassword-768x572.png 768w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Easy-idleTime-and-askForPassword-1536x1145.png 1536w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Easy-idleTime-and-askForPassword.png 1594w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>You made this payload <strong>years<\/strong> ago and it worked reliably for <em>years<\/em>. Until Sonoma came out. Then you were hearing that Zoom Rooms were restarting after OS updates to the &#8220;lock screen&#8221; requiring a password?! What was going on? You open a Feedback and ACE case, you are asked for sysdiagnoses even though they are attached and you hear nothing. The summer passes, Sequoia comes out, &#8220;darn seems like they didn&#8217;t fix this&#8221;, you think. Then you wonder, maybe it&#8217;s not the OS that&#8217;s broken but <em>something<\/em> else?<\/p>\n\n\n\n<p>Turns out Apple changed how macOS it interprets the <code><a href=\"https:\/\/developer.apple.com\/documentation\/devicemanagement\/screensaver\" target=\"_blank\" rel=\"noreferrer noopener\">Screensaver<\/a><\/code> domain keys in an MCX style payload. Apparently, it can&#8217;t tolerate them any more. Integer values of <code>0<\/code> now cause it to <strong>Immediately<\/strong> ask for password! Now, instead of setting <code><strong>askForPassword<\/strong><\/code> to the integer <code>0<\/code> <em>it&#8217;s boolean<\/em> and you need to set that to <code><strong>true<\/strong><\/code> (yeah, that&#8217;s right, <em><strong>true<\/strong><\/em>) and then you set the key <code><strong>askForPasswordDelay<\/strong><\/code> to&#8230; yeah, you got it: <code><strong>2147483647<\/strong><\/code>! That&#8217;s what you were gonna say right? \ud83d\ude11 See the <a href=\"https:\/\/developer.apple.com\/documentation\/devicemanagement\/screensaver\">Apple documentation<\/a> and check your incredulity at the door, they say this has been around since 10.11 and the crazy high <code><strong>askForPasswordDelay<\/strong><\/code> value they say came about in <span style=\"text-decoration: underline;\"><em>10.<strong>13<\/strong><\/em><\/span> but macOS sure as heck respected the simple MCX style payloads up until macOS <strong><span style=\"text-decoration: underline;\">13<\/span><\/strong>!? So is this a typo? Regardless it&#8217;s super unintuitive, unfriendly and non-obvious<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/image-91.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"424\" src=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/image-91-1024x424.png\" alt=\"\" class=\"wp-image-1636\" style=\"width:584px;height:auto\" srcset=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/image-91-1024x424.png 1024w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/image-91-300x124.png 300w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/image-91-768x318.png 768w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/image-91.png 1430w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>Thankfully, they <em>didn&#8217;t<\/em> mess with how <code>idleTime<\/code> is interpreted, it still works as an <code>integer<\/code> set to <code>0<\/code>. Here&#8217;s the whole thing in an MDM .mobileconfig file.<\/p>\n\n\n\n<pre class=\"wp-block-code language-xml\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;!DOCTYPE plist PUBLIC \"-\/\/Apple\/\/DTD PLIST 1.0\/\/EN\" \"http:\/\/www.apple.com\/DTDs\/PropertyList-1.0.dtd\"&gt;\n&lt;plist version=\"1.0\"&gt;\n&lt;dict&gt;\n\t&lt;key&gt;PayloadContent&lt;\/key&gt;\n\t&lt;array&gt;\n\t\t&lt;dict&gt;\n\t\t\t&lt;key&gt;PayloadDisplayName&lt;\/key&gt;\n\t\t\t&lt;string&gt;Screensaver&lt;\/string&gt;\n\t\t\t&lt;key&gt;PayloadIdentifier&lt;\/key&gt;\n\t\t\t&lt;string&gt;com.apple.screensaver.9ABFE38F-2822-47FD-B2E3-5FBC49AFAD1B&lt;\/string&gt;\n\t\t\t&lt;key&gt;PayloadType&lt;\/key&gt;\n\t\t\t&lt;string&gt;com.apple.screensaver&lt;\/string&gt;\n\t\t\t&lt;key&gt;PayloadUUID&lt;\/key&gt;\n\t\t\t&lt;string&gt;9ABFE38F-2822-47FD-B2E3-5FBC49AFAD1B&lt;\/string&gt;\n\t\t\t&lt;key&gt;PayloadVersion&lt;\/key&gt;\n\t\t\t&lt;integer&gt;1&lt;\/integer&gt;\n\t\t\t&lt;key&gt;askForPassword&lt;\/key&gt;\n\t\t\t&lt;true\/&gt;\n\t\t\t&lt;key&gt;askForPasswordDelay&lt;\/key&gt;\n\t\t\t&lt;integer&gt;2147483647&lt;\/integer&gt;\n\t\t\t&lt;key&gt;idleTime&lt;\/key&gt;\n\t\t\t&lt;integer&gt;0&lt;\/integer&gt;\n\t\t\t&lt;key&gt;loginWindowIdleTime&lt;\/key&gt;\n\t\t\t&lt;integer&gt;0&lt;\/integer&gt;\n\t\t&lt;\/dict&gt;\n\t&lt;\/array&gt;\n\t&lt;key&gt;PayloadDescription&lt;\/key&gt;\n\t&lt;string&gt;Disallows screensaver and lock screen password&lt;\/string&gt;\n\t&lt;key&gt;PayloadDisplayName&lt;\/key&gt;\n\t&lt;string&gt;Passcode and Screensaver (Exempt, 14 up)&lt;\/string&gt;\n\t&lt;key&gt;PayloadIdentifier&lt;\/key&gt;\n\t&lt;string&gt;com.example.zoomroom.screensaver-passcode&lt;\/string&gt;\n\t&lt;key&gt;PayloadType&lt;\/key&gt;\n\t&lt;string&gt;Configuration&lt;\/string&gt;\n\t&lt;key&gt;PayloadUUID&lt;\/key&gt;\n\t&lt;string&gt;FBD0991C-8F71-4F69-98D9-4F03943C420A&lt;\/string&gt;\n\t&lt;key&gt;PayloadVersion&lt;\/key&gt;\n\t&lt;integer&gt;1&lt;\/integer&gt;\n&lt;\/dict&gt;\n&lt;\/plist&gt;<\/code><\/pre>\n\n\n\n<p>As you can see things are a bit more complicated now. <strong>Applications &amp; Custom Settings<\/strong> won&#8217;t make payloads like this and if you upload this to Jamf, <strong>make sure to sign it<\/strong> (with something like <a href=\"https:\/\/github.com\/JeremyAgost\/Hancock\" target=\"_blank\" rel=\"noreferrer noopener\">Hancock<\/a>) <em>otherwise<\/em> it will throw out the stuff it doesn&#8217;t understand. Just look at what it <em>does<\/em> understand out of all that.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Jamf-No-Understand-Screensaver-CP.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"260\" src=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Jamf-No-Understand-Screensaver-CP-1024x260.png\" alt=\"\" class=\"wp-image-1625\" style=\"width:571px;height:auto\" srcset=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Jamf-No-Understand-Screensaver-CP-1024x260.png 1024w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Jamf-No-Understand-Screensaver-CP-300x76.png 300w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Jamf-No-Understand-Screensaver-CP-768x195.png 768w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/Jamf-No-Understand-Screensaver-CP.png 1486w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>And if you wonder, &#8220;Well doesn&#8217;t the Jamf GUI let you build a config profile with the settings you need&#8221; the answer is no, it doesn&#8217;t, the time is a drop down that goes from &#8220;Immediately&#8221; to &#8220;8 hours&#8221; just a hair shy of <code><strong>2147483647<\/strong><\/code><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/GUI-Does-not-Allow-for-Custom-Time-Screensaver.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"382\" src=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/GUI-Does-not-Allow-for-Custom-Time-Screensaver-1024x382.png\" alt=\"\" class=\"wp-image-1626\" style=\"width:520px;height:auto\" srcset=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/GUI-Does-not-Allow-for-Custom-Time-Screensaver-1024x382.png 1024w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/GUI-Does-not-Allow-for-Custom-Time-Screensaver-300x112.png 300w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/GUI-Does-not-Allow-for-Custom-Time-Screensaver-768x286.png 768w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/GUI-Does-not-Allow-for-Custom-Time-Screensaver.png 1110w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>No, I haven&#8217;t made a &#8220;<a href=\"https:\/\/ideas.jamf.com\" target=\"_blank\" rel=\"noreferrer noopener\">Jamf idea<\/a>&#8221; about this, although I did make an unfruitful FB (FB13736030) with Apple July 2024. I just don&#8217;t think they care much about MCX payloads acting weird. Why it needed to so radically change things isn&#8217;t clear but for now, if you want something that works, copy the above XML into a file that ends in <code>.mobileconfig<\/code>, sign with <a href=\"https:\/\/github.com\/JeremyAgost\/Hancock\">Hancock<\/a> (or similar) and upload into your Jamf&#8217;s Configuration Profiles and scope only to Sonama and higher Macs. Make sure to exclude your old payload from them too. Now, next time your Zoom Room Mac gets an OS update, it will auto-login (if you&#8217;ve set that) after restart without getting stuck at the lock screen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>So here&#8217;s the situation: You have a Mac mini that&#8217;s used as a Zoom Room controller. You&#8217;ve enabled automatic login. You don&#8217;t want the screensaver to come on ever and it should never ask for a password if the screen is turned off. This is a common ask and used to be really simple. You&#8217;d [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,16,46,8],"tags":[25,63,65,62],"class_list":["post-1620","post","type-post","status-publish","format-standard","hentry","category-apple","category-bugs","category-jamf","category-security","tag-macos","tag-mdm","tag-screenlock","tag-zoom"],"_links":{"self":[{"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/posts\/1620","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/comments?post=1620"}],"version-history":[{"count":11,"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/posts\/1620\/revisions"}],"predecessor-version":[{"id":1642,"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/posts\/1620\/revisions\/1642"}],"wp:attachment":[{"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/media?parent=1620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/categories?post=1620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/tags?post=1620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}