2019年6月1日土曜日

macbook で特定のディスプレイで4K出力できなくなった

なにかきっかけがあったのかどうかはわからないのだけど、macbook pro から、職場で愛用しているシャープの4Kテレビに出力できなくなった。 1080p のディスプレイとして認識されてしまい、それ以上の解像度に設定することができない。
  • もう一台のmacbookからは、問題のTVに4K出力できる。
  • 問題のmacbookから別の4Kテレビには出力できる。
  • Display menu のようなツールをつかっても同じ ということで、なにがおこっているのかさっぱりわからない。テレビの型番としては正しく認識できているので、 想像するに、
  • TVから送られてくる情報がなにか腐っている
  • TVから送られてくる情報をどこかでキャッシュしていて、それが腐っている のどちらかのような感じ。

    SMCリセットとPRAMリセットも当然試してみたが、無駄。 ということで諦めかけたのだけど、40インチの1080ディスプレイというのは壮烈に使いにくくて、悲しすぎるので もう少し頑張ってみた。

    いろいろ調べてみたところ こんな記事を見つけた

  • EDID という規格がある。 これはVESAが決めているもので、ディスプレイが受け付けることのできる解像度などを コンピュータ側に送信する規格らしい。
  • Mac OSには
    /System/Library/Displays/Contents/Resources/Overrides
    というディレクトリ があり、ここにEDIDのファイルを適切においておくと、ディスプレイから送ってくる情報をオーバライドできる。 ということがわかった。 とはいえ、ただしいEDIDファイルの作り方もわからないし、ファイル名(ディスプレイの名乗り上の型式名)もわからない。 ということで、先の記事からリンクされているrubyのスクリプトを使ってみた。このスクリプトは色空間のおかしなディスプレイの 色空間を強制的にRGBに戻したEDIDファイルを作ってくれるものなのだけど、その際に接続されているディスプレイの 型番をちゃんと調べてくれる。 もう一つ面倒なのはEDIDファイルのディレクトリは、システムインテグレーションの対象なので普通にはsudo をしても いじることができない。なので、まずシステムインテグレーションを切る必要がある。
    • まずリカバリーモードに入り、システムインテグレーションを切る
      • Command-R を押しながら起動
      • Utility から端末を開く
      • csrutil disable とタイプ
    • 次にrubyのスクリプトを実行するとファイルができる。これであるべきファイル名がわかる。 DisplayVendorID-4d10/DisplayProductID-1100。
    • 同じベンダとのところに別のディスプレイのファイルが置いてあったので、これを複製して、ファイル名を変更
    • リカバリーモードからシステムインテグレーションを復活
    これでなんとか、ちゃんと繋がるようになった。おそらく本当の正解は、ちゃんと動作している別のmacbookのほうで、 EDIDファイルをみつけて、コピーする方法だろうと思うが。。 まあ、とりあえずまた使えるようになってよかった。。
  •