← blog

Auto-login di Mac headless, dan kenapa macOS 27 melewatkannya

24 September 2026 · 8 menit baca

Mac sewaan harus bisa bertahan dari reboot sendirian. Tidak ada orang yang berdiri di depan mesin untuk mengetik password. Desktop browser pelanggan terhubung ke sesi login grafis, jadi mesinnya harus kembali dalam keadaan login. Auto-login headless di Apple Silicon adalah tumpukan kecil detail spesifik, dan empat di antaranya gagal tanpa suara. Satu di antaranya baru ada di macOS 27. Ini daftarnya.

Dua pengaturan yang mengaktifkannya

Auto-login terdiri dari dua bagian. Preferensi yang menyebut penggunanya, dan password yang disimpan di tempat yang bisa dibaca jendela login.

# who logs in automatically
defaults write /Library/Preferences/com.apple.loginwindow autoLoginUser runner

# the password, XOR-obfuscated, in /etc/kcpassword
# (padded to a multiple of 12 bytes, keyed with a fixed vector)

/etc/kcpassword disamarkan dengan key tetap, bukan dienkripsi. Siapa pun yang bisa membaca file itu bisa memulihkan password-nya. Itu bisa diterima hanya karena mesinnya hanya bisa dijangkau lewat jaringan privat, tidak pernah lewat internet publik. Di mesin dengan port terbuka, itu sama saja kredensial yang tergeletak di tempat terbuka.

Empat penghenti yang diam

FileVault

FileVault mengenkripsi disk, dan disk harus dibuka sebelum macOS bisa me-login-kan siapa pun. Di mesin dengan keyboard, seseorang mengetik kunci pembukanya. Tanpa layar dan keyboard, tidak ada yang mengetiknya. Jadi auto-login dan FileVault tidak bisa berjalan bersamaan di mesin yang tidak bisa Anda sentuh. Kami menjalankan FileVault dalam keadaan mati, dan mengandalkan jaringan privat sebagai batas pengamannya.

Flag kunci layar

Ada preferensi yang mengunci ulang layar bahkan setelah auto-login, untuk mesin yang terkunci saat layar tidur. Jika aktif, sesinya menyala tapi layarnya terkunci, dan penonton jarak jauh melihatnya sebagai hitam. Kami menghapus autoLoginUserScreenLocked setiap kali mengaktifkan auto-login.

Pengunci panic, yang menghabiskan sehari kami

Yang paling halus. Saat sesi login gagal, macOS mencatat lastLoginPanic di preferensi jendela login. Lalu ia sengaja melewatkan auto-login di boot berikutnya dan menampilkan layar login. Ini fitur keamanan, supaya mesin yang crash saat login tidak berputar terus.

Di Mac yang baru didaftarkan, boot pertamanya sibuk mengindeks salinan Xcode yang besar dengan load average di atas 160. Login tidak selesai tepat waktu dan pengunci itu terpasang. Setiap boot setelahnya melewatkan auto-login, di mesin yang konfigurasinya benar sepenuhnya.

sudo defaults delete /Library/Preferences/com.apple.loginwindow lastLoginPanic
sudo shutdown -r now

Setelah dihapus di mesin yang sudah tenang, auto-login langsung berjalan. Password dan pengaturannya sama dengan yang sudah ada sejak awal. Kami hampir menuliskannya sebagai bug di rilis macOS baru. Kali itu bukan. Buktinya adalah pembanding: gejala yang sama hilang begitu mesinnya tidak kelebihan beban, dan konfigurasinya tidak pernah salah. Cerita itu ada bersama cerita lainnya di cek yang tidak bisa gagal.

macOS 27: pengunci di setiap boot

Lalu kami mendaftarkan mini M6 pertama kami di macOS 27, dan pengunci itu kembali. Kali ini mesinnya menganggur dan tenang. Tapi tetap berhenti di jendela login setelah setiap reboot, dengan lastLoginPanic terpasang lagi setiap kali.

Image kami membawa satu LaunchAgent di /Library/LaunchAgents. LaunchAgent itu menjaga coding agent AI tetap berjalan di sesi pelanggan. Script di dalamnya memang tidak melakukan apa pun kecuali desktop sudah menyala. Jadi kami mencurigai file-nya, bukan script-nya.

Ujinya memakai pembanding. Kami mengambil dua unit M6 identik dalam kondisi yang sama. Satu punya plist itu, satu tidak. Kami me-reboot keduanya dengan selisih tiga detik. Yang tanpa plist berhasil login. Yang punya plist mengalami panic dan berhenti di jendela login. Memasang lagi plist itu di unit yang tadinya login dengan baik membuat unit itu tertahan lagi di boot berikutnya. Jadi ini terjadi di setiap boot, bukan hanya yang pertama.

Di macOS 27, jendela login memuat LaunchAgent dari /Library/LaunchAgents saat proses auto-login. Di mesin kami, pemuatan itu cukup untuk menggagalkan login dan memasang pengunci. Menghapus key itu tidak membantu, karena boot berikutnya memasangnya lagi.

# the fix: keep the plist out of the auto-load path
sudo mv /Library/LaunchAgents/dev.example.agent.plist /opt/example/launchd/

# then load it into the user's session after login, from a root daemon
launchctl bootstrap gui/$(id -u runner) /opt/example/launchd/dev.example.agent.plist

Kami memindahkan plist keluar dari /Library/LaunchAgents. Sebuah LaunchDaemon root kecil kini menunggu sampai sesi pengguna ada dan Dock sudah berjalan. Lalu ia memuat agent ke sesi itu. Auto-login berjalan di setiap boot, dan agent mulai sekitar satu menit kemudian.

Dua detail macOS 27 lainnya juga menjebak kami. Pertama, macOS 27 mengunci layar beberapa detik setelah auto-login. Saat terkunci, /dev/console dimiliki root, jadi jangan memakainya untuk mengecek apakah ada yang login. Cek domain gui/UID milik pengguna dan Dock yang berjalan. Kedua, Setup Assistant saat pertama kali jalan masih terikat ke sesi. Mematikannya membuat seluruh sesi jatuh ke jendela login dan memasang pengunci lagi. Nonaktifkan lewat key preferensinya, dan jangan pernah mematikannya.

Resep yang berhasil

Pertanyaan

Bagaimana auto-login macOS menyimpan password?
Di /etc/kcpassword, disamarkan dengan key XOR yang tetap, ditambah autoLoginUser di preferensi loginwindow. Ini penyamaran, bukan enkripsi. Karena itu mesinnya hanya boleh bisa dijangkau lewat jaringan privat.
Apakah FileVault merusak auto-login?
Ya. Dengan FileVault menyala, disk harus dibuka sebelum macOS bisa auto-login. Jadi mesin headless tidak bisa melewati layar pre-boot sendiri. Auto-login butuh FileVault dimatikan.
Kenapa auto-login berhasil sekali lalu berhenti?
Login yang gagal mengatur lastLoginPanic di preferensi loginwindow. Setelah itu macOS melewatkan auto-login di boot berikutnya. Hapus key itu dan reboot di mesin yang sudah tenang.
Kenapa auto-login gagal di macOS 27 padahal jalan di macOS 26?
Di macOS 27, plist LaunchAgent di /Library/LaunchAgents dimuat saat proses auto-login. Di mesin kami, pemuatan itu memasang lastLoginPanic di setiap boot, dan Mac berhenti di jendela login. Memindahkan plist keluar dari /Library/LaunchAgents dan memuatnya setelah login memperbaikinya.

Hitung angka Anda sendiri dengan kalkulator atau sewa runner.