Skip to content

Instantly share code, notes, and snippets.

@aont
Last active June 26, 2025 05:12
Show Gist options
  • Save aont/ff752668f48afbddc19fadc146316347 to your computer and use it in GitHub Desktop.
Save aont/ff752668f48afbddc19fadc146316347 to your computer and use it in GitHub Desktop.

Hyper-V Wayland

要点

  • Hyper-V の “接続(基本セッション)” で表示するだけなら Wayland セッションは起動可能 – Linux カーネル 6.2 以降に含まれる hyperv_drm ドライバーを使えば GNOME-Wayland が動くことが報告されています(gist.github.com)。
  • しかし Hyper-V の「拡張セッション」(RDP over vsock)を使う場合は現状 Xorg 一択 – 拡張セッションは内部で xrdp + X11 を前提としており、Wayland 用 RDP サーバー(GNOME Remote Desktop など)は vsock を解さないため Hyper-V が検出できません(forum.level1techs.com, elevenforum.com)。
  • 遠隔操作を諦めずに Wayland を使う場合は手段を変える必要あり – TCP/RDP(3390 など) で GNOME Remote Desktop を直接叩く、VNC/SPICE を導入する、あるいは基本セッション+Windows の VMConnect を使う、といった選択肢がある。

Wayland セッションを有効にする手順(基本セッション向け)

手順 コマンド/操作 補足
1. カーネルを確認 uname -r 6.2 以降推奨 (hyperv_drm が標準組込)
2. hyperv_drm を有効化 ```bash
sudo mkdir -p /etc/modprobe.d
echo "blacklist hyperv_fb" sudo tee /etc/modprobe.d/blacklist-hyperv-fb.conf
sudo update-initramfs -u -k all
``` 旧式 hyperv_fb を外して Wayland 対応ドライバーに切替え(discourse.ubuntu.com)
3. Wayland を許可 /etc/gdm3/custom.conf#WaylandEnable=false をコメントアウト Ubuntu デフォルトは Wayland 有効だが念のため
4. 再起動してログイン VMConnect 画面で通常ログイン 歯車アイコンは不要、Wayland が既定になるはず

ポイント : lsmod | grep hyperv_drm でドライバーが読めているか確認。表示解像度変更が出来れば Wayland で動いているケースが多いです。


「拡張セッションで Wayland を使いたい」の壁

  1. Hyper-V 側の制約 拡張セッションは vsock チャネル 上で RDP を流し、ゲスト側では xrdp-vsock が待ち受ける仕組み。xrdp は Xorg バックエンドのみ対応。
  2. GNOME Remote Desktop (grdctl) は TCP/RDP を話すが vsock 非対応。そのため Hyper-V からは未検出(forum.level1techs.com)。
  3. Plasma/KDE の KRdp も同様 – Wayland-RDP 自体は実装済みだが vsock ブリッジが無い。

試せる回避策

方法 長所 短所
基本セッション + Wayland(VMConnect 直結) シンプル、vsock 不要 クリップボード共有・可変解像度などの機能が限定
TCP/RDP で接続 (grdctl rdp set-port 3390) Wayland のまま Windows の mstsc で操作可 Windows 側からは接続先 IP が必要、vsock 経由の利便性は失われる
VNC/Spice Wayland 互換実績あり 追加サービスの導入・ポート開放が必要
あきらめて Xorg+xrdp Hyper-V 標準機能が全部使える Wayland のセキュリティ/サンドボックス利点を享受できない

まとめ

  • ローカル (VMConnect) での表示が目的なら Wayland 化は十分可能hyperv_drm を使う設定だけ行えば OK。
  • リモート操作を Hyper-V 拡張セッションに頼る場合は、今のところ Xorg を残すしかない
  • どうしても Wayland + リモート が必要なら、vsock を迂回して TCP/RDP or VNC/SPICE を利用する構成を検討すると良いでしょう。

Mutter window size

概要

mutter --wayland --nested で起動するネスト版 GNOME/Mutter は、ダミー出力(dummy output) を 1 枚だけ作り、その解像度がそのままウィンドウサイズになります。 この解像度は 環境変数で起動前に指定 する方式が公式に用意されています。


代表的な指定方法(単一モニタ)

やりたいこと 例に挙げたコマンド 備考
1920×1080 のウィンドウで起動 bash<br>MUTTER_DEBUG_DUMMY_MODE_SPECS=1920x1080 \ <br>mutter --wayland --nested -- gnome-terminal -- 以降は最初に開くアプリ。省略可
2560×1440 120 Hz を要求 bash<br>[email protected] \ <br>mutter --wayland --nested リフレッシュレートも「@数値」で付けられる
古い Mutter (GNOME 3.32 以前) bash<br>MUTTER_DEBUG_DUMMY_MONITOR_SPECS=1920x1080 mutter … 変数名が MONITOR だった世代がある

MUTTER_DEBUG_DUMMY_MODE_SPECS=w×h[@rate] を与えてから起動すると、そのサイズでネストウィンドウが生成されることを BLFS の公式手順が示しています。(linuxfromscratch.org)


複数モニタを疑似的に作る場合

Mutter のダミーバックエンドには追加で

export MUTTER_DEBUG_NUM_DUMMY_MONITORS=2        # 台数
export MUTTER_DEBUG_DUMMY_MONITOR_SCALES="1,1"  # スケール

といった変数もあり ます が、解像度を 1 枚ごとに変える/ホットプラグする といった高度な操作は実装されていません。開発者フォーラムでも “デバッグ用であり、本格利用は想定していない” と明言されています。(discourse.gnome.org)


注意点・その他の選択肢

  1. 起動後にリサイズは出来ない 現状は起動時の解像度が固定。変えたい場合は環境変数を調整して再起動するしかありません。

  2. タイトルバーを消したい/フルスクリーン化したい

    • 外側(ホスト)側の WM/Compositor の機能(wmctrl, xdotool, kwin rules など)でウィンドウを最大化・装飾非表示にする。
    • あるいは gamescope -F などフレームレス全画面化ツールでネストセッションをラップする。
  3. --virtual-monitor オプション こちらは ネイティブバックエンド で “本体側” GNOME Shell を起動するときの仮想モニタ機能です。--nested モードでは効きません。

  4. デバッグ用途に留めるのが無難 ネストバックエンドは X11 部分を流用した簡易実装のため、ホットプラグや色管理・リフレッシュレート切替などは不足しています。安定性・機能が必要な場合は wlroots 系の軽量コンポジタや headless + --virtual-monitor で別セッションを作る、あるいは普通の VM を検討してください。


まとめ

  • サイズ変更は 起動前に MUTTER_DEBUG_DUMMY_MODE_SPECS=w×h[@rate] を設定する。
  • それ以外の後からのリサイズや多様なディスプレイ構成はサポート外。
  • デバッグ以外の用途では別解(gamescope ラップ、wlroots 系 compositor、--virtual-monitor 付き headless 起動など)も検討すると良いでしょう。

Weston 内で Wayland アプリを起動する際に指定できる主な環境変数

1. 目的

Weston をすでに起動している状態で、外部のシェルやスクリプトから Wayland ネイティブアプリを接続したい場合、どのソケットに接続するかどのツールキットを Wayland モードで動かすか を環境変数で明示できます。本稿では代表的な変数を用途別に列挙します。


2. 必須レベル

変数 意味 典型値 / 設定方法 備考 出典
XDG_RUNTIME_DIR Wayland ソケットを置くランタイムディレクトリ /run/user/$(id -u)(systemd-login 使用時の既定) Weston 起動前に有効である必要がある。 (wayland.pages.freedesktop.org)
WAYLAND_DISPLAY 接続先ソケット名 wayland-0, weston-1 など。weston --socket=weston-1 で明示した場合は同名を指定 アプリがどの Weston に接続するかを決定 (superuser.com)

ポイント

  • Weston 端末(weston-terminal)から起動する場合は既に両方設定済みなので追加指定は不要。
  • 端末外(例: 既存 X11 セッションのシェル)から接続する場合のみ手動設定する。

3. ツールキット別に利用される主な変数

ツールキット / アプリ 変数 推奨値 効果 出典
GTK 3/4 GDK_BACKEND wayland (または x11) バックエンドを強制選択 (wiki.archlinux.org)
Qt 5/6 QT_QPA_PLATFORM wayland (fallback に xcb を付けるなら wayland;xcb) Qt の描画プラットフォーム切替 (forum.qt.io)
SDL2 SDL_VIDEODRIVER wayland (または wayland,x11) SDL2 アプリを Wayland ネイティブ実行 (wiki.archlinux.org)
Firefox / Gecko 系 MOZ_ENABLE_WAYLAND 1 Wayland レンダリングを有効化 (reddit.com)
winit(Rust 系 GUI) WINIT_UNIX_BACKEND(0.29 未満) wayland バックエンド指定(0.29 以降は WAYLAND_DISPLAY の有無で自動判別) (wiki.archlinux.org)
Clutter CLUTTER_BACKEND wayland Clutter ベースのアプリ向け (Clutter docs)

※ 近年のライブラリは 自動検出が標準 のため、まずは未設定で試し、動かない場合のみ適用するのが推奨です。


4. 具体的な起動例

# 例: 既存 X11 セッションから nested Weston に接続
#   - Weston は weston --socket=weston-1 で起動済みとする
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export WAYLAND_DISPLAY=weston-1

# 任意: ツールキット強制
export GDK_BACKEND=wayland
export QT_QPA_PLATFORM=wayland
export SDL_VIDEODRIVER=wayland
export MOZ_ENABLE_WAYLAND=1

# アプリ起動
gtk4-demo &
firefox &

5. まとめ

  1. 最低限必要なのは XDG_RUNTIME_DIRWAYLAND_DISPLAY。これでソケットを認識させる。
  2. ツールキット固有の変数は “動かなかったときの切り札” として段階的に指定する。
  3. Weston 端末内で起動する場合は既に環境が整っているため、原則追加設定不要。

これらを押さえておけば、Weston(あるいは他の Wayland コンポジタ)上でアプリを確実に Wayland ネイティブ動作させられます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment