LibreOffice Impress の HTML WebCast 書き出しで遠隔プレゼン機能を試す

add 2020-06-05

該当しそうなBug

105303 – Drop html export wizard

オンラインでプレゼンテーションをするとき一般的には画面共有すると思いますが，スライドファイルを前もって配布しておいてお互いそれを見ながらプレゼンも出来ます．
その間くらいの機能でスライドのページめくりをプレゼンターと視聴者で同期するサービスが欲しいなと思っています．
以下のようなサービスがあるようですが自分が何度か試した限りでは「ログイン／新規登録」が出来ず使えていません．

SlideLive | 登壇資料の画面をリアルタイムで共有できるアプリ

LibreOffice Impress のHTML 書き出し機能にWebCast 機能を見つけたので試してみました．
しかし紹介しておいてなんですがこの機能は長らくメンテされていないようなのであまり使わないほうがいいかもしれません．(Perl cgi環境も用意しにくいだろうし)

ヘルプもざっくりとした説明しかありません．

プレゼンテーションを HTML 形式で保存

HTML 形式で保存するプレゼンテーションを開きます。

ファイル → エクスポート を行ないます。

ファイル書式 を HTML ドキュメント (LibreOffice Impress) (.html;.htm) に設定します。

ファイル名 を入力して、エクスポート をクリックします。

HTML エクスポート ウィザードの指示に従います。

てことでメモがてら．

LibreOffice Impress で書き出したいスライドを開きます．

「ファイル」→「エクスポート」でエクスポートウィドウが開きます．

書き出し先のディレクトリ(複数のファイルが書き出されるので新しいディレクトリを用意したほうが良い)を指定し，任意のファイル名を指定します．
「ファイル形式」に「HTML ドキュメント (Impress) (.html;.htm)」を選択して「エクスポート」ボタンを押します．

「デザインの割り当て」は初回は「新規デザイン」しか選べません．「次へ」ボタンを押します．

「発表方法」に「WebCast」を選択し，右側の「WebCast」では「Perl」を選択します(ASPは未検証)．テキストボックスは規定値のままで構いません．「次へ」ボタンを押します．

「名前を付けて画像を保存」(原文は Save Image As なので訳が間違っていそう)で画像形式を，「モニターの解像度」でスライドの解像度を指定します．「作成」ボタンで書き出されます．
書き出し時にHTMLデザインの保存ウィンドウが表示されますがキャンセルも出来ます．

書き出したディレクトリを見ると，スライドの画像といくつかの.htmlファイルや.plなども出力されています．これらのファイルをcgiの動くsiteにコピーします．
今はcgiの動く場所がとても限られているのでこれが一番難しいかもしれないですね．

$ ls -w 80 ./slide_dir
common.pl img15.png img24.png img33.png img42.png img51.png img7.png
currpic.txt img16.png img25.png img34.png img43.png img52.png img8.png
editpic.pl img17.png img26.png img35.png img44.png img53.png img9.png
img0.png img18.png img27.png img36.png img45.png img54.png index.html
img1.png img19.png img28.png img37.png img46.png img55.png picture.txt
img10.png img2.png img29.png img38.png img47.png img56.png poll.pl
img11.png img20.png img3.png img39.png img48.png img57.png savepic.pl
img12.png img21.png img30.png img4.png img49.png img58.png show.pl
img13.png img22.png img31.png img40.png img5.png img59.png slide.html
img14.png img23.png img32.png img41.png img50.png img6.png webcast.pl

今回は自宅の適当なApache httpdの動いている環境にコピーしました．

$ scp -r ./slide_dir user@host:~/public_html/cgi-bin/

この環境は .cgi しかcgiとして動かないので，.htaccess を作成して .pl もcgiとして動くようにしました．

$ echo 'AddHandler cgi-script .pl' > ./.htaccess
$ cat ./.htaccess
AddHandler cgi-script .pl

次に *.pl ファイルに実行権を付与します．httpdのユーザが実行できる権限にします．

$ chmod o+x ./*.pl

次にページ管理ファイルの currpic.txt に読み書き権を付与します．httpdのユーザが読み書きできる権限にします．

$ chmod o+rw ./currpic.txt

これは恐らくサーバの環境依存でやらなくても動く環境のほうが多いと思うので一旦スキップして動かなかったら設定してください．editpic.pl, editpic.pl, savepic.pl, show.pl ファイルの require "common.pl"; 行を require "./common.pl"; に書き換えます．

- require "common.pl";
+ require "./common.pl";

この状態でウェブブラウザで視聴者は index.html を，プレゼンターは slide.html (html書き出し時のファイル名)を開けばOKなはずです．

以下今回試したサンプルです．多分すぐに消します．

視聴者URL: https://home.matoken.org/~mk/cgi-bin/slide/index.html

プレゼンターURL: https://home.matoken.org/~mk/cgi-bin/slide/slide.html

仕組みとしてはプレゼンターがページめくり操作をすると，ページ番号の保存されている currpic.txt ファイルにページ番号を格納．
視聴者側のブラウザでは1秒毎に cgi を呼び出していて，呼び出された cgi 側では現在のページ番号が保存されている currpic.txt の内容から該当のページを表示する．といったことをしているようです．
そのためプレゼンターが操作してから実際に視聴者のページが更新されるまで数秒掛かる感じです．

中を見ると解りますがライブラリも同梱の小さな独自ライブラリ1つだけで行数も少なくとてもプリミティブです．これは誰も使わず埋もれて何年も放置されていそうです．
出来ることなら最近のギジュとで書き直されてほしいけどこれまでの放置っぷりから難しそうですね．

とりあえずはWebに公開して口頭でページめくりを指示するのが現実的そうです．
(それか普通に画面共有)

LibreOffice環境

$ dpkg-query -W libreoffice
libreoffice 1:6.4.4-1
$ lsb_release -dr
Description: Debian GNU/Linux bullseye/sid
Release: unstable
$ uname -m
x86_64

WebServer環境

$ dpkg-query -W apache2 perl
apache2 2.4.41-4ubuntu3
perl 5.30.0-9build1
$ lsb_release -dr
Description: Ubuntu 20.04 LTS
Release: 20.04
$ uname -m
x86_64