itoutline.me

 

No power, no bluetooth

W sumie nigdy nie podłączałem Air-a do większego ekranu tak, żeby na nim pracować. Aż sam się dziwie, spokojnie wystarczało mi 13”. W końcu wpadłem na pomysł korzystania z niego jak ze stacjonarnego kompa. Zakupiłem cały zestaw klawiatura, mysz, gładzik i pracuje się naprawdę świetnie na 24” (oczywiście teraz chodzi mi po głowie Cinema Display). Nigdy nie miałem zaufania do bluetooth i obsługi przez niego urządzeń wskazujących, okazuje się, że nie ma z tym problemu. Oczywiście trochę męczy konieczność podłączenia dwóch kabelków ale te minusy nie przesłaniają plusów.

Tak naprawdę bluetooth jest mi potrzebny tylko kiedy jestem przy biurku, kiedy od niego odchodzę jest zbędny i tylko niepotrzebnie zużywa baterię. Można go wyłączać ręcznie ale udało mi się znaleźć lepszy sposób. Byłaby to chyba całkiem fajna opcja w systemie. Chodzi o wyłączenie bluetooth w momencie odłączenia kabla zasilacza. Naturalnie musi być możliwość włączenia ręcznego również na baterii. Okazuje się, że tym prostym skryptem coś takiego można załatwić:

bluetooth_mon.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
PREVIOUS_SOURCE=$(pmset -g ps | perl -ne "/(w+) Power/ && print $1");
while [ 1 ]; do
  CURRENT_SOURCE=$(pmset -g ps | perl -ne "/(w+) Power/ && print $1");
  if [ $CURRENT_SOURCE != $PREVIOUS_SOURCE ]; then
    PREVIOUS_SOURCE=$CURRENT_SOURCE
    if [ $CURRENT_SOURCE = "AC" ]; then
      /usr/local/bin/blueutil power 1
    else
      /usr/local/bin/blueutil power 0
    fi
  fi
sleep 5

Potrzebny jest tylko blueutil, który można zainstalować z repozytoriów Homebrew. Pozwala na podejrzenie i zmianę stanu bluetooth, włączone/wyłączone/tryb wykrywania. Działa bardzo sprawnie.

brew install blueutil

Dodatkowo dobrze by było gdyby skrypt działał cały czas w tle od uruchomienia komputera. Znalazłem bardzo fajny skrót na coś takiego bez zabawy z launchd. Wystarczy do crontab-a dodać taką linię:

@reboot /Users/norbert/Scripts/blue_pow_sav.sh

Jak widać skrypt nazywa się blue_pow_sav.sh i jest umieszczony w katalogu /Users/norbert/Scripts/

Edycja crontab-a to crontab -e, wylistowanie zadań crontab -l. Usunięcie crontab-a użytkownika crontab -r. Mam wrażenie, że trochę za blisko jest klawisz edycji od tego który powoduje usunięcie crontab-a bez pytania.

Dodanie jakiegoś zadania z poziomu shell-a, dotychczasowe jeśli były są zachowywane:

crontab -l | { cat; echo "@reboot /Users/norbert/Scripts/blue_pow_sav.sh"; } | crontab -

Można też inaczej, zapisanie obecnych zadań do tmp_cron:

crontab -l > tmp_cron

Dodanie nowego:

echo "@reboot /Users/norbert/Scripts/blue_pow_sav.sh" >> tmp_cron

Instalacja:

crontab tmp_cron

Comments