(2020.05.13初稿)
使用環境
- Mac mini
- Mac OS Mojave(10.14.6)
- スクリーン:プリンストン製 HTBNE-24W
問題発生
スクリーンの解像度などの設定を変えようと、「システム環境設定」から「ディスプレイ」を開き、もともと60ヘルツ(Hz)のリフレッシュレートを24Hzに変更してしまった。
(リフレッシュレートの意味も知らなかったための愚行、、、)
すると、画面が一度消えてから、ディスプレイ側からの出力で「範囲外」という画面が出てきてしまいMacからの出力を見ることができない状態に。
当然だが、ディスプレイが映っていないだけなので、キーボード、マウス等からの操作は可能である。
まず、最初の解決策としては
こちらにあるように、対応していないリフレッシュレートに変更してしまった直後、何も操作しないまま15秒ほど待つと自動的にリフレッシュレートが戻る、というもの。
ただサイト内の情報が最新ではないため、最新のOSで解決できるかは未検証。
加えて、今このページを見てくださっている方はそのタイミングを逃してしまった方だと思うので(もちろん僕も)、それ以外の解決策を考える。
また、ネットを調べて様々情報が出てくる中、少なくとも僕と同じ環境ではどれがうまくいかないのか、という情報も有益だと思うので、失敗した方法についても説明する。
以下の方法は、見れなくなってしまったモニター(以下では"元モニター"と呼ぶ)と別に、奇跡的に自分の持っていたHDMI接続が可能なプロジェクター(以下では"替モニター"と呼ぶ)に接続して画面を見ながら操作を行った。
そのため、替のモニター、あるいは出力できる機器(AirDisplay対応機器など?)が無いと厳しいかもしれない。
解決策?(NVRAMのリセット等)
一度変えてしまったモニターごとの設定は当然ながらMac側に保存されてしまっているので、これを削除してしまえばいいのでは無いかという方法。
まず元モニターにつないでシステムを終了する。
画面が見えないが、control + eject (ノートでは 電源ボタン)
を押すと以下のポップが出てきているはずなので、続けてEnter
を押せばシステムを終了できる。
続けて再度起動する際に、困った時のNVRAM(またはPRAM)のリセット(方法は以下)
とセーフモードでの起動(方法は以下)
を行った。
するとセーフモードで起動すると(数十秒から数分?かかるが根気よく続ける)、なんとモニターが表示される!
ただ、これはセーフモード(右上に赤字でセーフブートと表示されているはず)で起動していることによる一時的なものであるので、さらに環境設定からリフレッシュレートを設定し直す必要がある。
僕が調べた中では一番多く出てくるのがこの方法で、このあとパスワードを入力してログインを行い、「システム環境設定」から「ディスプレイ」を開き元のリフレッシュレートに戻す、という手順になっている。
のだが、僕の場合ログインを行った瞬間にまた元の「範囲外」の画面が出てきてしまいモニターが表示されなくなってしまう。
そのため、これでもダメだった。
また、モニターごとの設定が保存されているという
/Library/Preferences/mac.apple.windowserver.plist
を削除するという方法も行ったが、これも効果はなかった。
成功した解決策(cscreenを使用)
「Mac リフレッシュレート 変更」
などで検索していても、設定を間違えて画面が見れなくなった僕のような愚か者用の情報はあまり多くない。
そのため、コマンドライン上でリフレッシュレートを変更できれば、替モニターでターミナル等を開いておき、元モニターにつなぎ直してコマンドを実行すれば元に戻せるのでは、という発想で調べ直すと、実際に以下の参考になるページが見つかった。
画面共有を使用していて、物理画面が接続されていないときに解像度を変更するにはどうすればよいですか?
なお、もともと英語のページが自動で翻訳されており、あまりよろしくない日本語で書いてあるので、英語が壊滅的に苦手ではない人は英語に表示を戻すのをオススメする。
ここで分かった方法を以下で説明する。
cscreen
Macではコマンドライン上で解像度やリフレッシュレートの設定を確認・変更を行えるcscreen
が用意されている。
これはHomebrewを使って簡単に導入できるので、替モニターにつないでコマンドライン上で、
$ brew cast install cscreen
を実行しcscreenのインストールを行う。
成功したら、
$ cscreen -v
を実行することで今接続されているモニターの、設定可能な解像度やリフレッシュレートの情報が一覧で表示される。
$ cscreen -v
DisplayID Index Depth Width Height Refresh
27c00902 1 32 1920 1080 60
27c00902 2 32 1920 1080 60
27c00902 3 32 1280 720 60
27c00902 4 32 720 480 60
27c00902 5 32 640 480 60
27c00902 6 32 1920 1080 50
27c00902 7 32 720 576 50
27c00902 8 32 1280 720 50
27c00902 9 32 1920 1080 50
27c00902 10 32 1920 1080 24
27c00902 11 32 800 600 60
27c00902 12 32 1024 768 60
27c00902 13 32 1024 576 60
27c00902 14 32 1280 960 60
27c00902 15 32 1344 1008 60
27c00902 16 32 1344 756 60
27c00902 17 32 1600 900 60
use -h to display all usage options
cscreenコマンドを使えばこの中の解像度やリフレッシュレートを指定して設定を変更できる。
使い方は、コマンドライン上で、
$ cscreen -d <彩度> -x <width> -y <height> -r <リフレッシュレート>
を実行することで、希望のリフレッシュレート等を指定し変更できる。
ただ、問題は上の図のような設定可能な解像度やリフレッシュレートの情報は、見れなくなってしまっている元モニターでは確認できない。
そのため、自分の使っているモニターの型番等を調べ、ネットでオンラインマニュアル・仕様書等を見つけて、設定可能な解像度やリフレッシュレートの情報を確認しよう。
確認ができたら、僕の場合は最高解像度が1920x1080、リフレッシュレートは60Hzだったので、替モニターでターミナルを開いてから元モニターに接続し、見えない画面の中で以下のように入力し実行した。
$ cscreen -d 32 -x 1920 -y 1080 -r 60
すると、一瞬の暗転の後、画面が元どおり映った!!
歓喜の瞬間、声を出してこの奇跡を喜びました。
特にcscreenの導入に障壁もないので、替のモニターさえあれば、大体のMacユーザーはこの方法で解決できるんじゃないかと思います。
注意点として、
※ 参考にしたサイトでは、
$ cscreen -i <screenID> 〜〜
のようにモニターのIDも指定していましたが、これは画面が映らない限り確認できない情報であり、僕は入力しなくても実行できました。
※ 彩度については、大抵の最近のスクリーンであれば-d 32
で指定しておけば問題ないはずです。
終わりに
いつもはqiitaは自分の作業メモ用に非公開で使用しているのですが、自分が何時間も無駄にしてなかなかに困ったので、同じトラブルにあっている人がすぐに解決できるように思わず記事にしてしまいました。
1人でもこのお粗末な記事で助かる方がいれば幸いです。