2026/10/04

MX Linux(Xfce)のデュアルディスプレイ環境で、一時的にサブモニターのみに切り替える

MX Linux(Xfce)のデュアルディスプレイ環境で、メインモニターを Google TV Streamer などの外部機器に切り替えた際、PC側をサブモニター単体のシングル画面として運用し、ボタン一つで元のデュアルディスプレイ環境へ復帰させるスクリプトを作成しました。さらに、解像度の異なるサブモニターへ切り替えた際、開いているウィンドウが画面外にはみ出る問題も wmctrl を活用して自動フィッティング解決しました。

✏️ Note: 本記事の手順・スクリプトおよび記事内容は、Geminiとのやりとりを通じて作成・整理したものです。

1. 課題と実現したい動作

  • メインモニターで動画試聴: メインモニターの入力を Google TV Streamer へ切り替え。
  • サブモニター単体運用: Linux側でメイン出力をオフにし、サブモニターをプライマリ化。
  • ウィンドウの自動フィッティング: メイン(1920x1080)からサブ(1280x1024)へ切り替わった際、画面からはみ出るウィンドウを自動で収める。
  • ワンクリック復帰: パネルのボタンを押すだけで、元のデュアルディスプレイ(メインがプライマリ)へ切り替え。

2. 必要なツールのインストール

画面切り替え用の xrandr は標準で入っていますが、ウィンドウ位置やサイズを制御するために wmctrl を追加インストールします。

sudo apt update && sudo apt install -y wmctrl

3. 切り替えスクリプトの作成

モニターの出力名を確認し、画面切替とウィンドウ自動調整を行うトグルスクリプトを作成します。

モニター出力名の確認

xrandr | grep " connected"

実行結果(例):

  • メインモニター:DisplayPort-0(1920x1080)
  • サブモニター:DVI-D-0(1280x1024・メインの右側に配置)

トグルスクリプト(~/scripts/toggle-display.sh)

# 保存用ディレクトリを作成
mkdir -p ~/scripts

# トグルスクリプトを作成
cat << 'EOF' > ~/scripts/toggle-display.sh
#!/bin/bash
MAIN="DisplayPort-0"
SUB="DVI-D-0"

# ウィンドウを1280x1024の画面内に自動収める関数
adjust_windows() {
    # ディスプレイ変更の反映を待機
    sleep 1
    
    # 開いている全ウィンドウのIDを取得して処理
    wmctrl -lG | while read -r id desktop x y w h host title; do
        # 通常の作業ウィンドウ(デスクトップやパネル以外)のみ対象
        if [ "$desktop" -ge 0 ]; then
            # 1. ウィンドウの位置が画面外にある、または解像度(1280x1024)を超えている場合
            if [ "$x" -ge 1280 ] || [ "$y" -ge 1024 ] || [ "$w" -gt 1280 ] || [ "$h" -gt 1024 ]; then
                # 最大化を解除してサイズを強制リサイズ
                wmctrl -i -r "$id" -b remove,maximized_vert,maximized_horz
                wmctrl -i -r "$id" -e 0,0,0,1200,900
            fi
            
            # 2. もともと最大化されていたウィンドウは再最大化してフィットさせる
            if wmctrl -l -x | grep -q "$id"; then
                wmctrl -i -r "$id" -b remove,maximized_vert,maximized_horz
                wmctrl -i -r "$id" -b add,maximized_vert,maximized_horz
            fi
        fi
    done
}

# メインモニターが有効か判定して切り替え
if xrandr | grep "$MAIN connected" | grep -q "[0-9]x[0-9]"; then
    # メインOFF & サブON(シングル化)
    xrandr --output "$MAIN" --off --output "$SUB" --auto --primary
    adjust_windows
else
    # デュアル復帰(メインをプライマリ)
    xrandr --output "$MAIN" --auto --primary --output "$SUB" --auto --right-of "$MAIN"
    adjust_windows
fi
EOF

# 実行権限を付与
chmod +x ~/scripts/toggle-display.sh

4. Xfceパネルへ「ワンクリックボタン」を追加

  1. パネルの空きスペースを右クリック → パネル → 新しいアイテムの追加... を選択。
  2. ランチャー を追加。
  3. 追加されたランチャーを右クリック → プロパティ を開く。
  4. +(新しいアイテムの作成) をクリックし、以下を設定:
    • 名前: 画面切り替え
    • コマンド: /home/ユーザー名/scripts/toggle-display.sh
    • アイコン: お好みのモニターアイコン(display等で検索)

5. まとめ・ポイント

  • xrandr でメインモニターをオフ(--off)にすることで、OS側で裏にウィンドウやカーソルが行ってしまう問題を防げます。
  • wmctrl でウィンドウ座標とサイズを取得・再設定することで、解像度が異なるモニター間での切り替え時もウィンドウが画面外にはみ出さず、サブモニター内に自動フィットします。
  • パネルにスクリプトを登録すれば、マウス1クリックで自由に行き来できる快適なマルチメディア環境が構築できます。