夜フクロウがMacのdGPUを叩き起こす問題とユーザー側での対応方法

電池がモリモリ減るよ

前述の通り、初めてdGPU(ディスクリートGPU)つきのMacを買った。

今まではiGPUしかなかったから何も考える必要はなかったのだけれど、dGPU搭載ということで 必要のない時にはiGPUを使用することで電力消費を抑えることを考える必要が出てきた。

特に何も考えず数時間使っていたのだけれども、明らかに電池の消費が早すぎる。

で、現在使用しているグラフィックスの種類を表示するアプリであるgfxCardStatusを入れてみた。

GitHub - steveschow/gfxCardStatus: This is a fork of gfxCardStatus, this fork will handle integrated-only mode a little better

(正確にはフォーク版だけど)

すると、やっぱりというか、案の定というか、バッテリ駆動時だろうとなんだろうと常にdGPUが使われてることがわかった。

原因

gfxCardStatusには何が原因でiGPUに切り替えられないのかを表示してくれる便利な機能がある。 というわけで何が原因か調べてみると、どうやらNight Owlというアプリが原因でdGPUが叩き起こされているらしい。

Night Owl => 夜フクロウ

Night Owlはその名の通り夜フクロウのことで、非常に使いやすいTwitterクライアント。ほんとに使いやすい。Windowsにもこういうのほしいなと切実に思う。

sites.google.com

が、これが原因で常にdGPUが叩き起こされている。どうやらTwitterをするためにはクアッドコアCPUだけではなくディスクリートグラフィックスも必要らしい。TwitterのためにXeonのPCを組む人の気持ちが... わかるわけがない。

原因を探ってみると、どうやら夜フクロウ側でGPUの自動切り替えに対応している旨の宣言をしていないのが原因のようだった。

無理やり改造して対応させる

対応してないならさせればいい。

Mac App Storeから落とした場合はそれ関係の情報が付加されるので、うまくいじれない可能性やアップデートで崩壊する可能性を考慮して公式サイトで配布されているバージョンを落としてきて改造した。

夜フクロウオープンソースじゃない。けれどもWindowsと同じようにマニフェストファイルは自由に書き換えられる。

しかもMacのアプリケーションは.appというディレクトリ名を持つ単純なディレクトリなので、以下のようにして簡単にマニフェストファイルにアクセスできる。

$ cd Night\ Owl.app/
$ open Contents/Info.plist

で、GPU自動切り替えに対応していると嘘をつくために、マニフェストファイル(Info.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>BuildMachineOSBuild</key>
    <string>15G31</string>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>NSSupportsAutomaticGraphicsSwitching</key>
    <true/>
〜以下省略〜

あとは起動するだけ。成功した。

その他

本当に宣言するだけでなんの問題もなく使えてしまっているので、公式に対応していただければ...