Chromiumはプラットフォーム抽象化レイヤとしてOzoneを使っており、Chromiumの起動時フラグに--ozone-platform=waylandと入れるとChromiumをWayland上で動かせる

では、Chromiumはどのプロトコルを使うのか?

一覧

ui/ozone/platform/wayland/common/wayland_object.hBind() が定義されていて、これが wl_registry_bind() を呼ぶらしいので、wl::Bindで検索すると確認できる

1ab009629c655470da0b6c237dbd37c4bbb8ea9d で試した結果:

  • wl_compositor, wl_data_device_manager, wl_drm, wl_fixes, wl_output, wl_seat, wl_shm, wl_subcompositor, xdg_wm_base
    • それはそう
  • ExporterType
    • host/xdg_foreign_wrapper.cc で定義されているテンプレート
    • 実質的に zxdg_exporter_v[12] となっている
  • gtk_primary_selection_device_manager
  • org_kde_kwin_appmenu_manager
    • KDE Plasmaは、macOSのように、画面上部にFile, Edit…といったメニューを表示できるが、「この wl_surface が持つメニュー項目は DBus のこの ServiceName, ObjectPath にあるよ」というのを伝えるためのプロトコルらしい
  • org_kde_kwin_idle
    • deprecated だが指定した時間 idle が続いた時に通知を受けるためのものっぽい
  • overlay_prioritizer
    • なにこれ?(Chromium独自のプロトコルらしい)
  • struct zwp_pointer_constraints_v1
    • マウスカーソルの位置を固定したり、移動できる領域を制限したりする
  • struct zwp_pointer_gestures_v1
  • wp_color_manager_v1
  • wp_content_type_manager_v1
    • surface のタイプを photo, video, game から指定できる
  • wp_cursor_shape_manager_v1
  • ::wp_fractional_scale_manager_v1
  • wp_linux_drm_syncobj_manager_v1
  • wp_presentation
    • 動画や音声の再生のために時間をフィードバックするやつ?
  • wp_single_pixel_buffer_manager_v1
    • 1ピクセルのバッファを作るためのもの
  • wp_viewporter
    • surface の crop と scale をするやつ
  • ::xdg_activation_v1
  • ::xdg_toplevel_drag_manager_v1
    • 着脱可能なウィンドウのためのやつ?
  • ::xdg_toplevel_icon_manager_v1
    • xdg_toplevel のアイコンを wl_buffer としてもらえる
  • ::xx_session_manager_v1
    • いわゆる「セッション」の復帰とかに使うやつ?
  • zcr_alpha_compositing_v1
  • zcr_extended_drag_v1
  • zcr_keyboard_extension_v1
  • zwp_idle_inhibit_manager_v1
    • idleにしないで!と伝える
  • zwp_keyboard_shortcuts_inhibit_manager_v1
  • zwp_linux_dmabuf_v1
  • zwp_primary_selection_device_manager_v1
  • zwp_relative_pointer_manager_v1
    • マウスポインタの移動を、時間と移動量として取得できる
  • zwp_tablet_manager_v2
  • zwp_text_input_manager_v1
  • zwp_text_input_manager_v3
  • zxdg_decoration_manager_v1
  • zxdg_output_manager_v1
    • output の論理的な位置/サイズを取得

起動に必須なのは?

wl_output を実装しないと動かなかった記憶がある 未実装のプロトコルがあったらエラーを吐いてクラッシュする、というわけではなく、 output がないと wl_display.sync -> wl_callback.done を繰り返すから、という理由らしい(適当なコンポジタで wl_output を無効化して確認した)
ちなみに wl_compositor がないとセグフォ

というわけで、どれが必須なのかよくわかりません