5

Я хочу запустить скрипт, когда я выключаю или перезагружаю свой iMac под управлением Snow Leopard.

Я где-то читал, что для этого можно использовать /etc/rc.shutdown.local, но он не работает для меня.

Например, я поставил следующие строки:

#!/bin/sh
/usr/bin/osascript -e "set volume with output muted"

Если я бегу:

source /etc/rc.shutdown.local

это действительно отключает звук. Однако, если я включу звук и перезапущу ОС, звук все равно будет включен. Что, я думаю, означает, что сценарий не был вызван.

Есть идеи?

ОБНОВЛЕНИЕ: Это на самом деле работает сейчас. Я думаю, это только потому, что правильное имя - rc.local.shutdown, а не rc.shutdown.local.

4 ответа4

2

Это на самом деле работает сейчас. Я думаю, это только потому, что правильное имя - rc.local.shutdown, а не rc.shutdown.local.

1

Другой вариант - использовать хук выхода из системы:

sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/usr/bin/osascript\nset volume with output muted' > ~/.logouthook
chmod +x ~/.logouthook

Значением ключа LogoutHook может быть только путь к исполняемому файлу, но не команда оболочки. Хук выхода из системы запускается с привилегиями суперпользователя, поэтому вам не нужен sudo.

Команда defaults изменяет /var/root/Library/Preferences/com.apple.loginwindow.plist. Добавление ключа LogoutHook в /Library/Preferences/com.apple.loginwindow.plist не работает.

Если хук выхода из системы занимает достаточно много времени, отображается серый экран до тех пор, пока хук выхода из системы не завершится. Похоже, не существует какого-либо временного ограничения, после которого хуки выхода из системы вынуждены завершаться.

Хуки выхода из системы устарели в 10.4, но я не нашел способа надежно запускать программы при выходе из системы с помощью launchd. Я не знаю, как запустить выход из системы до выключения или перезапуска, но не до выхода из системы.

0

Используйте следующий скрипт:

#!/usr/bin/env bash
trap 'osascript -e "say \"hello\""' TERM
while true; do
    sleep 10
done

Запустите его с помощью cron или launchd , в зависимости от того, что вы предпочитаете.

Попробуйте убить его, используя kill pid , pid - это идентификатор процесса, который вы узнали из ps ax .


Я не хочу закрываться прямо сейчас, чтобы проверить это правильно, но это должно работать.

0

Начну с того, что я нуб с AppleScript. Так что для блага других людей, начинающих также - я публикую следующее, которое является небольшим изменением того, что автор вставил.

#!/bin/sh
/usr/bin/osascript -e "set volume 0.5"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .