先日開催されたICPC 2024 横浜大会 に、私はスタッフとして参加していました。この記事では、私が主に担当していた放送サポートについて詳しく説明します。

コンテスト会場は例年、横浜産貿ホール マリネリアというイベントスペースを使用しています。ここに机、椅子、PC、ディスプレイなどをチームごとに配置しています。

コンテスト会場ではプログラムコンテストを行うだけでなく、一日目の開会式やチーム紹介なども行われます。またコンテスト後にはその後の案内などもします。海外からの選手を含めた全選手に情報を伝えるために、各選手席のディスプレイに情報を表示する放送システムを組んでいます。スタッフの操作で、プレゼンテーション資料やビデオ映像などを配信できるようになっています。既存の機器を使って、大掛かりなスクリーンなどを配置することなく、効率的な情報伝達を実現しています。

技術的詳細

プレゼンテーション資料の投影は発表者のPCの画面を VNC という技術で共有することで放送しています。VNC は画面共有システムなので、プレゼンテーション以外のものも投影できます。例えばコンテストシステムの解説として、実際に操作の状況を VNC で共有して解説しています。一方で、ビデオ映像は、 VNC では帯域幅や再生の同期に問題が生じる可能性があるため、事前に各選手席のPCにコピーしておき、同時に再生する方法を採用しています。

VNC ソフトウェアやビデオ再生ソフトウェアは、各選手席のディスプレイマネージャの上に重ねて表示しています。放送時には、選手はまだPCにログインしていない状態で、各選手席のPCの画面はログイン待ちの状態です。この表示はディスプレイマネージャがコントロールしています。ここで、ディスプレイマネージャの .Xauthority をコピーしてソフトウェアを起動することで、ログイン待ち表示の上に重ねてソフトウェアを起動しています。

この仕組みは、以前の Ubuntu のデフォルトディスプレイマネージャである lightdm では動きましたが、現在の Ubuntu のデフォルトである gdm3 では同様の操作を実現できませんでした。以前の記事で、lightdm を導入している 理由はこれです。また、ソフト次第では画面の一部にしか出なかったりするので、事前にどのソフトが正しく動くかの確認が必要です。さらに、 .Xauthority を使っているので Wayland でも動きません。

lightdm はもう何年もデフォルトではないので、理想的には gdm3 に移行して同じようなことをしたいです。同じ方法ではうまく行かなかったので、試行錯誤しています。