🐥

Ubuntuでサスペンドから復帰した際にモニター設定が保持されない問題への対応

2024/12/17に公開

はじめに

Ubuntuを使っていて、3つのモニターを使用したデスク構成としている。
サスペンドから復帰した際にモニター設定が保持されないことがあり(※保持されて復帰できることある)、その対応案を考える。

xrandrを使用したモニター設定

xrandr

上記のコマンドで、今のディスプレイ設定が確認できる。解像度や回転の他、配置のxy情報も出力される。

それを以下のようなシェルファイルとして設定する。

#!/bin/bash
# DISPLAY環境変数の設定
export DISPLAY=:1
export XAUTHORITY=/run/user/$(id -u)/.Xauthority

# DP-1: Primary display (3840x2160 at +0+1080 position)
xrandr --output DP-1 --primary --mode 3840x2160 --rate 59.94 --pos 0x1080 --rotate normal
# DP-3: Secondary display (1920x1080 at +932+3240 position)
xrandr --output DP-3 --mode 1920x1080 --rate 60.00 --pos 932x3240 --rotate normal

# DP-4: Tertiary display (1920x1080 inverted at +972+0 position)
xrandr --output DP-4 --mode 1920x1080 --rate 60.00 --pos 971x0 --rotate inverted

# Disable all other disconnected outputs
xrandr --output HDMI-0 --off
xrandr --output DP-0 --off
xrandr --output DP-2 --off
xrandr --output DP-5 --off

次に、サービスとして起動できるように作成する。

まずはターミナルにて、以下の環境変数を確認する。

echo $XAUTHORITY
echo $DISPLAY

ファイルの作成。

mkdir -p ~/.config/systemd/user
vim ~/.config/systemd/user/estore-display.service

確認した環境変数をもとに、以下のように設定する。your-usernameは実際のユーザーネームにする。

[Unit]
Description=Restore Display Settings
After=suspend.target

[Service]
Environment=DISPLAY=:0
Environment=XAUTHORITY=/run/user/%U/.Xauthority
ExecStart=/bin/bash /home/your-username/scripts/restore_display.sh

[Install]
WantedBy=default.target

以下でユーザーサービスとして有効化する。

systemctl --user daemon-reload
systemctl --user enable restore-display.service
systemctl --user start restore-display.service

以上。サービスの起動は少し怪しいので、失敗したら修正するか、手動でシェルスクリプトを起動すればOK

Discussion