Как бороться с автоматическим восстановлением запущенных программ при включении компьютера?

Пожалуй, самой заметной новой функцией OS X Lion является Resume — ещё бы, трудно не заметить, как после включения компьютера все запущенные до выключения программы по очереди запускаются и вновь загружают в себя документы, которые вы редактировали ранее (особенно если это вам совсем не нужно). В Apple настолько гордятся инновацией, что даже не потрудились предусмотреть возможность её полного отключения — при выключении, перезагрузке и выходе из аккаунта нужно каждый раз вручную снимать галочку «Снова открывать окна при повторном входе в систему». Как многих наших читателей, так и нас самих это порядком достало, так что давайте разбираться, как можно обойтись без назойливой функции Resume.

Увы, бесполезно искать соответствующую опцию в Системных настройках. Там есть другая, не слишком нужная — «Восстанавливать окна при закрытии и повторном открытии программ» (см. пульт «Основные»):

Эта опция отвечает лишь за восстановление содержимого окон программ после перезагрузки (ну или после перезапуска самих программ). Проще говоря, если вы снимете эту галочку, то после перезагрузки у вас снова запустятся Safari, TextEdit, Pages и пр., но запустятся они пустыми, без загруженных в них файлов. Смысла в этом ещё меньше, чем в полном восстановлении состояния программ и документов.

Если в настройках нет нужной опции, то на помощь традиционно приходит Терминал. На помощь он приходит в 99% случаев, но наш случай относится к тому злосчастному 1%, когда даже от Терминала нет проку. Галочке «Снова открывать окна при повторном входе в систему» соответствует вполне определённая опция TALLogoutSavesState, но работающая в большинстве других случаев команда типа:

[php]defaults write com.apple.loginwindow TALLogoutSavesState 0[/php]

… вам ничем не поможет :( Системный процесс loginwindow постоянно следит за состоянием этой опции и регулярно норовит восстановить её значение по умолчанию (1).

Судя по тщательному расследованию обсуждения проблемы на форумах Apple, более-менее нормального решения никто так и не нашёл. От себя можем предложить два способа.

Первый способ состоит в выключении/перезагрузке компьютера скриптом типа:

[php]do shell script "defaults write com.apple.loginwindow TALLogoutSavesState 0"
tell application "Finder"
restart
end tell[/php]

— для перезагрузки, и

[php]do shell script "defaults write com.apple.loginwindow TALLogoutSavesState 0"
tell application "Finder"
halt
end tell[/php]

— для выключения.

Если вам лень возиться с Утилитой AppleScript, то в Интернете есть готовые утилиты, реализующие данные скрипты — CleanShutDownCleanReboot и даже CleanLogOut (для выхода из системы). Но замусоривать Док или LaunchPad этим софтом — явно не лучший вариант.

Способ #2 (хотя язык не поворачивается называть это способом :) — приучиться в окне выключения или перезагрузки компьютера не просто жать Enter, а перед этим успевать нажать пробел. Тогда злополучная галочка снимется без прикосновения к мыши или трекпаду.

P.S. В Интернете мы наткнулись на отзывы о том, что в данной ситуации могут пригодиться системные клавиатурные комбинации:

  • Ctrl+Cmd+Eject без лишних вопросов перезагружает ваш Мак
  • Ctrl+Alt(Option)+Cmd+Eject не менее тихо его выключает

Некоторые пользователи утверждают, что действие функции Resume на данные комбинации не распространяется. Мы сами попробовали и сильно удивились, потому что в первый раз это действительно сработало… а потом работать перестало. Чудеса да и только, что тут сказать.