sironekotoroの日記

Perl で楽をしたい

Macbook Airの環境整備 20160921

管理者権限が必要な AppleScript アプリをパスワード入力無しで動かす

AutoChargeInHabit

バッテリー制御ソフト - AutoInflowDisable

  • 実際に効果があるのかどうかは、比較対象となる MacBook Air が無いので不明
  • 分からないのだけど、「鰯の頭も信心から」的に使わせてもらっております

    • 信仰にはお布施が必要なんでちゃんと 1000円くらい donate したぜ
  • 時々バッテリの状態をメモってた

    • この Mac について -> 詳しい情報 -> システムレポート -> 電源 の 完全充電時の容量(mAh
      • 2014-08-24:6724
      • 2014-09-17:6967
      • 2014-10-12:6329
      • 2015-01-28:5665
      • 2015-05-24:6170
      • 2015-12-19:5934
      • 2016-01-17:5791
      • 2016-04-09:6178
      • 2016-09-19:5978
  • ちなみに、交換バッテリは 7150mAh らしい

  • MacBook Air 13" (Mid 2012 through Early 2015) Battery (661-7474) - iFixit

    Replacement 7150 mAh battery compatible

  • バッテリに神経質にはなっていないけど、長持ちするならその方がいいよねぇ、と思ってます

    • しかし、真に神経質でない人ならこのソフト入れないだろうから、ちょっとは神経質なのだろうか
  • なお、MacBook Air の充放電回数の上限は1000回との事

  • Mac ノートブックのバッテリーの充放電回数を確認する - Apple サポート
  • さっき自分の MacBook Air 確認したらちょうど500回だった

起動の都度のパスワード入力が鬱陶しい

  • このソフトを MacBook Air の起動時に立ち上がるようにしていたのだけど、都度管理者パスワードを聞かれるわけです

  • メンドイなぁ・・・と思いつつ、しかし解決法もわからずで2年間

  • 勉強の合間の気分転換で手を入れてみたところ、なんとかなったので備忘録もかね書いておきまする

    • なお、試行錯誤に3時間ほどかかった模様
  • 最初は、「自動でパスワードを入力しよう」と思い、 Automator などをいじってみたんですが、パスワードをテキストボックスに入力できず

  • 作者は 「 sudo で動かしている」との事ですが、当方では sudo で動かしてもパスワードを要求される

  • 結局、AppleScript で一部を書き換えることに

    • ところで、 AppleScript って情報めっちゃ少ない・・・うちのググラビリティが及ばない分野でした
  • 書き換えるのは権利者権限を要求する AutoChargeInhibit2RunRoot.app

  • これを AppleScript エディタで開き
  • オリジナル

    do shell script theAppPath & " &>/dev/null & " with administrator privileges

  • 変更後。******** の部分にMacの管理者パスワードを入れる

    do shell script theAppPath & " &>/dev/null & " password "********" with administrator privileges

  • これで管理者権限を求められる事がなくなりました

  • 起動、再起動の都度入力を求められていたパスワードを入れる事がなくなり、しかも自分でなんとかできたって事で、結構感動したのでした

追記

  • この記事を書きながら「時々バッテリの状態をメモってた」って何よ?と
  • プログラマの三大美徳を信条とするなら、これを自動化するべきではないだろうか?
    • まだまだ怠惰が足りない
# MacBattery.pl
# その時点のバッテリの再大容量ログを
# YYYY-MM-DD hh:mm:ss ????
# の形式でファイルに出力する

use 5.012;
use warnings;
use Time::Piece;
binmode STDOUT, ':encoding(UTF-8)';

my $command = 'ioreg -c AppleSmartBattery | grep MaxCapacity';
my $max_capacity = $1 if ( `$command` =~ /(\d+)/ );

my $t   = localtime(time);
my $date = $t->ymd .' '. $t->hms;

my $save_filename = 'Mac_MaxCapacity.txt';

open my $FH, '>>', "$save_filename"
    or die qq{Can't open file "$save_filename":$!};

say $FH $date , ' ' , $max_capacity;

undef $FH;
  • こいつを cron に登録して・・・え? MacOS X にcron ないの?
    • めんどくせぇ・・・ってなったが、真の怠惰目指して頑張る

Scheduling Timed Jobs
Note: Although it is still supported, cron is not a recommended solution. It has been deprecated in favor of launchd.

  • plist ファイルの書き方をググる
    • 起動時のみ設定
    • plistファイルに 755 の権限つけたけど、必要かどうか試してない・・・
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>pl.Mac_MaxCapacity.perl.plist</string>

    <key>ProgramArguments</key>
    <array>
      <string>perl</string>
      <string>/scriptdir/MacBattery.pl</string>
    </array>

    <key>RunAtLoad</key>
    <true/>

  </dict>
</plist>
  • 起動時に .pl で指定されたファイルに出力された事を確認