Предотвращение повторного открытия всех приложений при сбое OS X

Иногда мой компьютер дает сбой и перезагружается из-за неизвестных ошибок. Обычно это происходит, когда я работаю над чем-то, поэтому открыто несколько приложений. В OS X есть эта раздражающая функция, когда она пытается снова открыть все приложения при перезапуске. Вы можете отключить его при ручном перезапуске, но он все равно делает это, если компьютер перезагружается после сбоя.

Я думаю, что эта функция была создана для экономии времени, но все, что она делает, это тратит больше времени, чем оно того стоит, потому что всякий раз, когда компьютер перезагружается после сбоя, я обычно просто перезагружаю его еще раз (на этот раз с отключенным «Повторное открытие приложений») просто чтобы получить до работоспособного состояния. Проблема в том, что он будет продолжать создавать приложения и предотвращать перезапуск.

Отключение этой функции избавило бы меня от необходимости перезапускать после сбоя. Есть ли способ остановить OS X от этого?

Вы действительно хотите, чтобы мы помогли вам избавиться от ошибок?
Сбои @Ruskes могут происходить по многим причинам. Вопрос актуален сам по себе

Ответы (4)

Навсегда запретить повторное открытие приложений в macOS High Sierra после перезагрузки.

Работает в macOS El Capitan, Yosemite, Sierra, High Sierra.

Решение: запретите OS X доступ к файлу, который он использует для хранения вашего состояния сеанса. Это предотвращает повторное открытие приложений даже после перезагрузки/выключения из терминала , из AppleScript и сбоя системы.

Метод графического интерфейса

  1. Открыть Finder
  2. Cmd+Shift+G(Перейти в папку)
  3. Скопируйте ~/Library/Preferences/ByHost/и подтвердите
  4. Найдите файл, начинающийся сcom.apple.loginwindow
  5. Двойной щелчок (открывается в TextEdit)
  6. Удалите все содержимое и сохраните пустой файл. Может появиться дополнительный диалог подтверждения.
  7. Щелкните правой кнопкой мыши, получить информацию
  8. Заблокировать файл (установить флажок)

Метод GUI (отмена)

Если вы хотите отменить это изменение позже и снова включить функцию, просто удалите этот файл, и ОС создаст его заново.

  1. Открыть Finder
  2. Cmd+Shift+G(Перейти в папку)
  3. Скопируйте ~/Library/Preferences/ByHost/и подтвердите
  4. Найдите файл, начинающийся сcom.apple.loginwindow
  5. Просто удалите его

Метод командной строки

  1. Откройте Terminal.app
  2. Сделайте файл владельцем root (иначе ОС просто заменит его)

    sudo chown root ~/Library/Preferences/ByHost/com.apple.loginwindow*
    
  3. Удалите все разрешения, чтобы он не мог быть прочитан или записан в

    sudo chmod 000 ~/Library/Preferences/ByHost/com.apple.loginwindow*
    

Метод CLI (отмена)

  1. Включите повторное открытие всех приложений после входа в систему.

    sudo rm -f ~/Library/Preferences/ByHost/com.apple.loginwindow*
    
Спасибо за этот отличный ответ! Он работает хорошо и не требует вмешательства пользователя, например удержания клавиши [Shift] при перезапуске системы, и идеально подходит для автоматических систем, таких как те, которые используются для поддержки киосков или информационных дисплеев, которым может потребоваться собственный запуск. предопределенная последовательность запуска, которая может быть усложнена перезапуском системой приложений в другом порядке во время автоматического входа в систему после отключения электроэнергии.
@babca: для метода cli вы можете добавить очистку содержимого файла в качестве первого шага, например:echo > ~/Library/Preferences/ByHost/com.apple.loginwindow*
Это сработало для меня в биг сюр

Я обнаружил, что подход @babca работает хорошо, но в macOS Catalina для меня он немного отличался. У меня было два com.apple.loginwindow.*.plistфайла, ~/Library/Preferences/ByHost/и они не были обычным текстом — com.apple.loginwindow.AB6XXXXX-XXXX-XXXX-XXXX-XXXXXXX5291.plistи com.apple.loginwindow.111XXXXX-XXXX-XXXX-XXXX-XXXXXXXXAC43.plist.

Поэтому я сделал следующие два шага для каждого файла:

Открыл ( ⌘-O) каждый Finder в XCode (я думаю, что по умолчанию в Catalina), удалил все записи в разделе TALAppsToRelaunchAtLoginи сохранил файл.

введите описание изображения здесь

Получил информацию ( ⌘-I) для каждого в Finder, затем установите Lockedфлажок. Обратите внимание, что окно предварительного просмотра показывает пустой <array/>внутри файл TALAppsToRelaunchAtLogin.

введите описание изображения здесь

Чтобы отменить это изменение, повторите только последний шаг для каждого файла, но снимите Lockedфлажок.

Я представляю другое решение, чтобы удовлетворить несколько собственных дополнительных требований, делающих его более универсальным. Требования:

  1. Это должно быть из командной строки, чтобы я мог копировать и вставлять, а не неуклюже щелкать через пользовательский интерфейс.
  2. Это должно быть что-то, что можно поместить в цикл for, чтобы я мог изменить каждого пользователя на машине. (Кто-нибудь из DevOps?) Кроме того, код по-прежнему должен быть автономным, не требующим цикла for, чтобы конечный пользователь мог запустить его самостоятельно.
  3. Он должен иметь возможность обрабатывать домашний каталог, находящийся в нестандартном месте.

С помощью кода, расположенного здесь , я придумал следующее, которое работает как минимум в sh и bash на Catalina и Big Sur...

# set user name, machine uuid, and home dir
someUser=$(stat -f%Su /dev/console)
machineUUID=$(ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}')
homeDir=$(dscacheutil -q user -a name ${someUser} | grep 'dir:' | awk '{print $2}')

# delete the plist array
/usr/libexec/PlistBuddy -c 'Delete :TALAppsToRelaunchAtLogin' ${homeDir}/Library/Preferences/ByHost/com.apple.loginwindow.${machineUUID}.plist

# make the file readonly
chflags uimmutable ${homeDir}/Library/Preferences/ByHost/com.apple.loginwindow.${machineUUID}.plist
Отлично работает на старом музыкальном макмини High Sierra. Теперь это как проигрыватель компакт-дисков, готовый за считанные секунды. Большое спасибо.

Попробуйте удерживать нажатой, Shiftкогда увидите окно входа в систему, и отпустите ее, когда появится док-станция.

Это предотвращает запуск элементов в ваших элементах входа при входе в систему, но не предотвращает возобновление работы приложений.

Я понятия не имею, почему за безопасный вход здесь проголосовали. Это быстрое и элегантное решение, позволяющее вернуться и внести постоянные изменения.
Возможно, за него проголосовали, потому что он не работает надежно. Это никогда не работает для меня.
@bmike, потому что, как в ответе, даже говорится: это не предотвращает повторное открытие приложений. Это именно то, о чем спрашивал ОП, и это именно то, к чему этот ответ не относится.