Зробіть сценарій / додаток запущеним під час виходу


13

Ми всі знаємо, що Mac OS X має дуже корисну функцію елементів входу, яка дозволяє, крім іншого, налаштувати програми / сценарії для запуску під час входу.

Я шукаю спосіб налаштувати список скриптів / додатків, які запускаються під час виходу . Список "Елементи виходу", якщо ви хочете.
В основному, я хочу написати кілька невеликих сценаріїв очищення для себе, які запускатимуться автоматично, коли я вийду або вимкнуться.

Отже, я шукаю спосіб автоматичного запуску сценарію (або, в ідеалі, їх списку), коли я виходжу з системи. Вихід буде чекати, коли сценарії завершаться (точно так само, як очікування виходу очікує, що ви натиснете кнопку "Зберегти", якщо програма вимагає цього).

Чи є спосіб автоматично запустити (а) сценарій (і), коли я вийду з Mac OS X?


Відповіді:


7

Гачки виходу з ладу відхилено в 10,4 , але вони все ще працюють станом на 10,9.

sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/bin/bash\nsay a' > ~/.logouthook
chmod +x ~/.logouthook

Значення ключа LogoutHook може бути лише шляхом до виконуваної, а не команди оболонки. Гак виходу запускається як root.

Команда за замовчуванням змінює /var/root/Library/Preferences/com.apple.loginwindow.plist. Додавання ключа LogoutHook до /Library/Preferences/com.apple.loginwindow.plist не працює.

Якщо гак виходу запускається досить довго, на екрані відображається сірий екран, поки гак виходу не припиниться. Здається, не існує жодного часового обмеження, після якого гачки виходу змушені припиняти.

Я не з'ясував жодного способу надійного запуску програм при виході з запуску. Коли я намагався захоплювати сигнали типу EXIT, код у пастці запускався лише тоді, коли я вийшов у вікно входу, а не тоді, коли я закрив або перезапустив.

<?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>test</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-c</string>
    <string>trap 'echo a>/Users/username/Desktop/a;say a' EXIT;while :;do sleep 10;done</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Хм, жоден із них не працював на мене. У мене є цей скрипт , який працює, якщо запускати його sh(він створює цей .txt файл). Я зберег скрипт як /etc/rc.shutdown.local, і додав його, defaultsяк ви сказали. Жодного файлу вже не було. Я щось роблю не так? Спасибі!
Натан Грінштейн

Я не впевнений, чи роблю щось не так, чи ні. Я на 10.6.8, і LogoutHook не працює. Буду вдячний, якщо ви можете поглянути на цей скріншот, і дайте мені знати, якщо щось виглядає не так. Спасибі!
Натан Грінштейн

1
Ах! Цей останній зробив трюк 10.6.8. Спасибі! Хоча одна примітка: вона не працює з Левом :(
Натан Грінштейн

2
Обидва способи відмінно працюють на моїй машині Mountain Lion (10.8.2), навіть при вимкненні або перезавантаженні. Зауважте, що гачки LoginHook / LogoutHook запускаються в контексті кореневого користувача, і що вони є одинарними, загальносистемними гачками, і що гачок для входу працює синхронно - набагато раніше, ніж агенти запуску кожного користувача; аналогічно, гак виходу працює раніше, ніж агент запуску користувача, який використовує метод EXIT-пастка. Бувають випадки, коли працюють лише гачки; Наприклад, якщо ви хочете вимкнути звук при відключенні, щоб придушити звук запуску Mac, надійно працює тільки LogoutHook.
mklement0

1

Насправді є спосіб:

  1. Відкрийте додаток "Редактор сценаріїв"
  2. Вставити

do shell script "PUT YOUR START SCRIPT PATH HERE"

on quit
    do shell script "PUT YOUR STOP SCRIPT PATH HERE"
    continue quit
end quit
  1. Файл> Зберегти, Виберіть програму та залишайтеся відкритими після запуску обробника та Зберегти
  2. Налаштування системи> Користувачі та групи> вкладка Елементи входу> + кнопка
  3. Додайте додаток і позначте його як прихований

Щоб сховати його з док-станції:

  1. Клацніть на програмі правою кнопкою миші та виберіть Показати вміст пакета
  2. Відкрийте Info.plist та додайте

<key>NSUIElement</key>
<string>1</string>

Люблю це. Простий і адекватний для моїх потреб. І не застаріло.
Іван X

0

Таймер сценаріїв - хороший вибір для цього. Він може працювати при виході, вході та багато іншого. Я б пішов з цим для простого і простого у використанні рішення. Він має простий графічний інтерфейс:

Запущена дія

Про Таймер скриптів потрібно зауважити дві речі. Один, це не безкоштовно. Коштує 12 доларів, але я особисто думаю, що воно того варте. По-друге, це не повністю сумісно з Lion, але вони пообіцяли безкоштовне оновлення, як тільки зробили це сумісним.


1
Зараз це застаріло
Кіртікумар А.

0

Ви також можете створити додаток Mac зі свого сценарію, використовуючи щось на зразок Platypus, а потім додати його до елементів входу, як і будь-який інший додаток.


0

Power Manager може запускати сценарій, коли користувач виходить із системи. Це комерційний продукт, який підтримує найновіші macOS.

Power Manager запустить сценарій для виходу із завдання Assistant Schedule Assistant

Раніші версії, необхідні за допомогою редактора подій , але тепер додається завдання Assistant Schedule Assistant для запуску сценаріїв при вході та виході.

Я написав Power Manager, тому не соромтесь задавати технічні питання щодо його впровадження. У випадку подій, які викликали вихід із системи, Power Manager не опитується щодо змін у стані користувача, а натомість повідомляє про зміни користувача через macOS. Цей підхід є більш ефективним, ніж циклічний цикл / опитування сценарію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.