Chcę, aby było to oparte na systemie operacyjnym, więc nie potrzebuję połączenia z Internetem ani otwartej przeglądarki itp. Po prostu coś, co może się zdarzyć w tle
Najłatwiej to zrobić za pomocą aplikacji, ale oto jak to zrobić tylko za pomocą wbudowanych poleceń systemu operacyjnego. Wiem, że chcesz, aby był sterowany zdarzeniami, ale nie jestem pewien, jak to zrobić, więc oto jeden ze sposobów sprawdzania poziomu baterii, a następnie robienia czegoś innego, jeśli jest powyżej / poniżej progu.
Możesz rozważyć launchd
proces, jest to w zasadzie zaplanowane zadanie uruchamiane co x
minutę. Są często używane przez zaawansowanych użytkowników, ale nie są zbyt trudne do skonfigurowania. Konfigurowane uruchomione zaplanowane zadanie konfiguruje się za pomocą pliku .plist, który umieszcza się w tym katalogu: Macintosh HD\Library\LaunchDaemons
i w ten sposób tworzona jest struktura pliku .plist;
<?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>Debug</key>
<true/>
<key>ExitTimeOut</key>
<integer>120</integer>
<key>Label</key>
<string>com.me.BatteryInfo</string>
<key>ProgramArguments</key>
<array>
<string>/Users/yourusername/batt.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>
Jeśli miałbyś zapisać ten plik jak com.me.BatteryInfo
w LaunchDaemons
wyżej wspomnianym folderze, utworzyłoby to zaplanowane zadanie, które będzie uruchamiane co 30 minut. Liczba 1800
bezpośrednio powyżej </dict>
to czas w sekundach określający częstotliwość uruchamiania zadania. Tam, <string>/Users/yourusername/batt.sh</string>
gdzie jest napisane , określa się, który skrypt uruchamia się zgodnie z harmonogramem. Musisz wyjść <string>
i </sting>
nietknięty.
Linia <string>com.me.BatteryInfo</string>
to unikalna nazwa zaplanowanego zadania. Jeśli masz zamiar zrobić więcej niż jeden, upewnij się, że każdy .plist ma tutaj unikalną nazwę.
Następną rzeczą, którą musisz zrobić, to zmienić własność .plist na root
. Jest to wymagane jako funkcja bezpieczeństwa (zakładam, że oprogramowanie / użytkownicy nie mogą tworzyć zaplanowanych szkodliwych zadań). Aby zmienić własność pliku, wykonaj: sudo chown root \Library\LaunchDaemons\yourtask.plist
(zamień yourtask.plist na rzeczywistą nazwę pliku .plist, który utworzyłeś). To zadanie wyświetli monit o podanie hasła.
Teraz musisz utworzyć skrypt, który będzie działał okresowo. Musisz utworzyć plik .sh (skrypt bash), aby powiedzieć komputerowi, co ma robić. Aby utworzyć plik .sh, otwórz edytor tekstów dla programistów, taki jak Sublime Text lub Komodo Edit . NIE używaj edycji tekstu, ponieważ często dodaje on do plików tekst, który zakłócałby twój skrypt. Tak naprawdę nie należy używać edycji tekstu w kodzie.
Utwórz skrypt (plik .sh) z następującym kodem;
#!/bin/sh
percent=$(ioreg -l | awk '$3~/Capacity/{c[$3]=$5}END{OFMT="%.3f";max=c["\"MaxCapacity\""];print(max>0?100*c["\"CurrentCapacity\""]/max:"?")}')
if [ $percent > 95 ]
then
echo 'charged.'
fi
exit 0
Zamień echo 'charged.'
na komendę terminalową, którą chcesz uruchomić, gdy bateria jest naładowana. open /Applications/Notes.app
otworzy aplikację Notes; możesz zmienić katalog, aby otworzyć inną aplikację.
$percent > 95
Mówi to, że następny wiersz ma działać tylko wtedy, gdy akumulator jest więcej niż 95
naładowany. Możesz zmienić to na co tylko chcesz. Poziom naładowania baterii często będzie nieznacznie różnić się od tego, co wyświetla się na pasku menu u góry. Jeśli chcesz „uruchomić, gdy bateria jest w pełni naładowana”, zalecam pozostawienie tej wartości jako> 95 . Jeśli chcesz na przykład uruchomić zadanie, gdy poziom naładowania baterii spadnie poniżej 20%, zmień go na$percent < 20
UWAGA: Ponieważ jest to zaplanowane zadanie, skrypt będzie uruchamiany co x
kilka minut. Oznacza to, że jeśli umieścisz open \Applications\Notes.app
w skrypcie, aplikacja Notes uruchomi się co x
minutę (jeśli bateria jest naładowana)
To zadanie zostanie uruchomione, nawet jeśli nikt nie jest zalogowany.
Wiem, że zadałeś to pytanie jakiś czas temu, ale mam nadzieję, że to komuś pomoże.