2016年9月16日金曜日

ThinkPad X1 CarbonをmacOS Sierra (GM RC)にした(夢)

インストール自体はすんなり行くけど、(RehabMan's) VoodooPS2Controllerの最新版を使うことでTrackPointが動かなくなるのと(DSDTの改変とkextのInfo.plistを書き換えていくことで対応可能)、

まだKaravinerが動かないので(これは時間が解決してくれることでしょう)、基本入力周りに割と支障がある。……ので対処しましょうというお話。

TrackPointのための改変

前述のTrackPoint問題に関しては、DSDT.amlの〝Device (KBD)〟を PS2K にリネームして以下のように改変することで対処。これ、今まで対応kextみたいなのを騙し騙し使っていたけど、本来は最初からこうやるべきだったんだと思う。

DSDT.aml
                Device (PS2K)
                {
                    Method (_HID, 0, NotSerialized)  // _HID: Hardware ID
                    {
                        If (WIN8)
                        {
                            Return (0x7100AE30)
                        }

                        Return (0x0303D041)
                    }

                    Name (_CID, EisaId ("PNP0303"))  // _CID: Compatible ID
                    Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings
                    {
                        IO (Decode16,
                            0x0060,             // Range Minimum
                            0x0060,             // Range Maximum
                            0x01,               // Alignment
                            0x01,               // Length
                            )
                        IO (Decode16,
                            0x0064,             // Range Minimum
                            0x0064,             // Range Maximum
                            0x01,               // Alignment
                            0x01,               // Length
                            )
                        IRQNoFlags ()
                            {1}
                    })
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        Store (Package (0x06)
                            {
                                "RM,oem-id",
                                "LENOVO",
                                "RM,oem-table-id",
                                "X1C",
                                "AAPL,has-embedded-fn-keys",
                                Buffer (0x04)
                                {
                                     0x01, 0x00, 0x00, 0x00
                                }
                            }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                }

この後、 VoodooPS2Controller.kext の Info.plist 、PlugInsの中の VoodooPS2Mouse.kext と VoodooPS2Trackpad.kextの Info.plist のそれぞれに上で追加した X1C というテーブル用の定義を書き加えると、TrackPointが動くようになります。

VoodooPS2Controller.kext/Contents/Info.plist

HPQOEM の定義の下あたりに……

    <key>LENOVO</key>
    <dict>
     <key>X1C</key>
     <string>ThinkPad</string>
     <key>ThinkPad</key>
     <dict>
      <key>MouseWakeFirst</key>
      <true/>
      <key>WakeDelay</key>
      <integer>0</integer>
     </dict>
    </dict>

……と追加。

VoodooPS2Controller.kext/Contents/PlugIns/VoodooPS2Mouse.kext/Contents/Info.plist

HPQOEM の定義の下あたりに……

    <key>LENOVO</key>
    <dict>
     <key>X1C</key>
     <string>ThinkPad</string>
     <key>ThinkPad</key>
     <dict>
      <key>ActLikeTrackpad</key>
      <true/>
      <key>DisableDevice</key>
      <false/>
     </dict>
    </dict>

……と追加。

VoodooPS2Controller.kext/Contents/PlugIns/VoodooPS2TrackPad.kext/Contents/Info.plist

ALPS GlidePoint/HPQOEM の定義の下あたりに……

    <key>LENOVO</key>
    <dict>
     <key>X1C</key>
     <string>ThinkPad</string>
     <key>ThinkPad</key>
     <dict>
      <key>DisableDevice</key>
      <true/>
     </dict>
    </dict>

……と追加、 Sentelic FSP/HPQOEM の定義の下あたりに……

    <key>LENOVO</key>
    <dict>
     <key>X1C</key>
     <string>ThinkPad</string>
     <key>ThinkPad</key>
     <dict>
      <key>DisableDevice</key>
      <true/>
     </dict>
    </dict>

……と追加、 Synaptics TouchPad/HPQOEM の定義の下あたりに……

    <key>LENOVO</key>
    <dict>
     <key>X1C</key>
     <string>ThinkPad</string>
     <key>ThinkPad</key>
     <dict>
      <key>BogusDeltaThreshX</key>
      <integer>400</integer>
      <key>BogusDeltaThreshY</key>
      <integer>350</integer>
      <key>DivisorX</key>
      <integer>1</integer>
      <key>DivisorY</key>
      <integer>1</integer>
      <key>DragLockTempMask</key>
      <integer>262148</integer>
      <key>FakeMiddleButton</key>
      <false/>
      <key>FingerZ</key>
      <integer>47</integer>
      <key>MomentumScrollThreshY</key>
      <integer>16</integer>
      <key>MouseMultiplierX</key>
      <integer>6</integer>
      <key>MouseMultiplierY</key>
      <integer>6</integer>
      <key>MultiFingerHorizontalDivisor</key>
      <integer>2</integer>
      <key>MultiFingerVerticalDivisor</key>
      <integer>2</integer>
      <key>Resolution</key>
      <integer>2800</integer>
      <key>ScrollDeltaThreshX</key>
      <integer>10</integer>
      <key>ScrollDeltaThreshY</key>
      <integer>10</integer>
      <key>ScrollResolution</key>
      <integer>2800</integer>
     </dict>
    </dict>

……と追加。動作が渋いなと思ったら Resolution や ScrollResolution の値を小さく、軽いと思ったらその逆で。

/Library/Extensions や /System/Library/Extensions に入れている場合は、Kext Utilityなどでキャッシュの更新をお忘れなく。

// EFI/CLOVER/kexts/10.12/ に入れておけばいいように思う。

システム環境設定でトラックパッドの設定が表示されない

この問題にはpatchが存在するみたい。

http://www.mediafire.com/download/8r6ew57721w5r82/

設定がちゃんと保存されないので、再起動すると設定が戻ってしまったりするのは今のところご愛敬。

Karavinerの代替について

Karaviner-Elementsという後継アプリが開発途上なので、それを使います。設定ファイルが今までと違っていてそのままでは使えないので、新たに書く必要があります。

また、くどいけどまだ開発途上なので、右commandを[かな/英数]のトグルにするとかそういうことはできません。しばらくは運用で乗り切りましょう。

~/.karaviner.d/configuration/karaviner.json
{
    "profiles": [
        {
            "name": "Default profile",
            "selected": true,
            "simple_modifications": {
                "right_command": "japanese_eisuu",
                "right_control": "japanese_kana"
            }
        }
    ]
}

こんな感じで書くと、右commandで[英数]・右controlで[かな]になります。ThinkPadのOSX86だとスペースの右側がそういうキーで埋まっているので、これらを使わないならこんな感じの設定でいいと思います。

// 今までは右commandをトグルにしてたんだけど、右commandを押して英数を入力しようとしてかなオンリーになって死亡みたいなことが何度か続いたので、かな入力を明示的に行いたいときに右controlを押す運用にしました。

最近のClover EFIとEFI設定

Clover EFIの最近のバージョンでブート時(1st. stage)の画面が表示されなくなって、調べてみたらEFIのBIOS互換周りの設定が悪いっぽかったので、UEFI onlyにしてCSM supportも切ったらうまく表示されるようになった。これで完全にレガシーを捨て去った。

この設定にしたら、起動時に今までデカデカと(拡大されてガタガタの) ThinkPadロゴが表示されてたんだけど、シンプルでジャギーのないきれいなLenovoロゴだけになってびっくりした。