へっぽこ社会人4年生がプログラミングを頑張る

へっぽこ社会人4年目がプログラミング系統を中心に書きたいことをつらつらと書きます

Ubuntuでディスプレイのリフレッシュレートを変更する方法

自宅のモニタが寿命を迎え始めていたので、約5年使ってきたLGのモニタを買い替えることにしました。幸いにも、モニタを譲り受けることが出来たので、購入することなくモニタを交換出来ました。

モニタが4K対応なので、画面を広々使えるようになったと感じられるようになりました。今まで1920x1080のサイズで慣れていたので、しばらくは解像度4Kは多少文字が小さいと感じながら、徐々に慣れていくことかと思います(笑)

職場のモニタはリフレッシュレートを60Hzに設定して作業していて、目が肥えてしまい、30Hzでは少しマウスの動きがカクついているに見えました。Windowsではディスプレイのプロパティからリフレッシュレートを変更できましたが、Ubuntuのモニタ設定にはリフレッシュレートの設定項目が見当たりませんでした。Ubuntuでは、 xrandr コマンドを用いることでリフレッシュレートを変更できます。

ディスプレイ情報の取得

ディスプレイの設定情報を取得するためには、 xrandr コマンドにオプションを指定せずに利用します。HDMIなどの出力に関する情報や、解像度とリフレッシュレートの情報が取得できます。また、 xrandr の実行結果には、現在の設定のみだけではなく、設定可能な解像度とリフレッシュレートの一覧が表示されます。

以下は、私の環境で xrandr コマンドによって取得したディスプレイの情報です。ディスプレイには HDMI-1 のポートに接続されています。解像度は 3840x2160 で、リフレッシュレートが 30.00 に設定されています。

$ xrandr
Screen 0: minimum 8 x 8, current 3840 x 2160, maximum 32767 x 32767
DVI-D-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 disconnected (normal left inverted right x axis y axis)
HDMI-1 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 880mm x 510mm
   3840x2160     30.00*+  59.94    50.00    29.97    25.00    23.98  
   2560x1440     59.95  
   1920x1200     59.88  
   1920x1080     60.00    60.00    59.94    50.00    50.00    23.97    60.00    50.04  
   1680x1050     59.95  
   1600x900      60.00  
   1440x900      59.89  
   1280x1024     75.02    61.00  
   1280x800      59.81  
   1280x720      59.94    50.00  
   1152x864      60.00  
   1024x768      75.03    70.07    60.00  
   800x600       75.00    72.19    60.32    56.25  
   720x576       50.00  
   720x480       59.94  
   640x480       75.00    72.81    59.94    59.93  
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 disconnected (normal left inverted right x axis y axis)
$ 

解像度とリフレッシュレートの設定変更

解像度を変更するためには --mode オプションを、 リフレッシュレートを変更するためには --rate オプションを利用します。接続されているモニタを指定するために、 --output オプションを利用します。

リフレッシュレートは指定された値が設定できない場合、最も近い値の設定値に変更します。例えば、上記の出力例では、リフレッシュレートは解像度が3840x2160の時に最大で59.94Hzなので、 xrandr のオプションに --rate 60 と指定した場合、最も近い59.94に設定されます。

モニタ出力がHDMI-1のディスプレイの解像度を3840x2160, リフレッシュレートを60Hzに指定する場合のコマンドは次の通りです。

xrandr --output HDMI-1 --mode 3840x2160 --rate 60

解像度やリフレッシュレートを変更した後に xrandr コマンドでディスプレイの情報を取得すると、変更内容が反映されていることが分かります。

$ xrandr
Screen 0: minimum 8 x 8, current 3840 x 2160, maximum 32767 x 32767
DVI-D-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 disconnected (normal left inverted right x axis y axis)
HDMI-1 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 700mm x 400mm
   3840x2160     30.00 +  59.94*   50.00    29.97    25.00    23.98  
   2560x1440     59.95  
   1920x1200     59.88  
   1920x1080     60.00    60.00    59.94    50.00    50.00    23.97    60.00    50.04  
   1680x1050     59.95  
   1600x900      60.00  
   1440x900      59.89  
   1280x1024     75.02    61.00  
   1280x800      59.81  
   1280x720      59.94    50.00  
   1152x864      60.00  
   1024x768      75.03    70.07    60.00  
   800x600       75.00    72.19    60.32    56.25  
   720x576       50.00  
   720x480       59.94  
   640x480       75.00    72.81    59.94    59.93  
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 disconnected (normal left inverted right x axis y axis)
$ 

設定の永続化

シェルから xrandr コマンドで解像度やリフレッシュレートの変更を実行しても、シャットダウンすると設定が消えてしまいます。毎回コマンドを叩くのも面倒なので、保存させる方法がないか調べてみると、X Window Systemの設定ファイルに xrandr コマンドを記述すれば良いようです。ユーザ単位で設定する場合、 .xprofile に解像度やリフレッシュレートを指定する xrandr コマンドを記述します。

ハマった点

解像度は特に何も設定することなく4Kになっていたのですが、リフレッシュレートだけ上げたいと思い、 --mode オプションを指定せずに実行しましたが、画面に変化はなく、 xrandr コマンドの実行結果も変化がありませんでした。

xrandr --output HDMI-1 --rate 60    # 設定が反映されない

リフレッシュレートを指定する際には、 --mode オプションを用いて、どの解像度に対してリフレッシュレートを変更するか明示する必要があるみたいです。

まとめ

Ubuntuでディスプレイのリフレッシュレートを変更するには、 xrandr コマンドを利用して変更します。リフレッシュレートの設定だけでなく、ディスプレイの設定可能な解像度やリフレッシュレートを取得することもできます。

リフレッシュレートを xrandr で設定する際には、 --rate オプションを用いるだけでなく、 --mode オプションで解像度も指定する必要があります。オプションで指定されたリフレッシュレートの値が、指定の解像度で設定可能なリフレッシュレートに存在しない場合、最も近い値を設定します。

シェルから変更された解像度やリフレッシュレートは永続化されないので、Ubuntuの起動時に解像度やリフレッシュレートを自動的に設定させる必要があります。ユーザごとに設定を指定する場合は、 .xprofile に解像度やリフレッシュレートを指定する xrandr コマンドを記述します。 より詳しい xrandr コマンドの使い方は、 xrandr(1) を参照してください。

参考文献