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

add 2020-06-05

該当しそうなBug

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

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

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

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

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

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

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

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

てことでメモがてら.

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

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

LibreOffice WebCast01

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

LibreOffice WebCast02

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

LibreOffice WebCast03

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

LibreOffice WebCast04

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

LibreOffice WebCast05

書き出したディレクトリを見ると,スライドの画像といくつかの.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なはずです.

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

仕組みとしてはプレゼンターがページめくり操作をすると,ページ番号の保存されている 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

鹿児島Linux User Groupの鹿児島Linux勉強会 2020.05(オンライン)に参加

05/23(Sat)に鹿児島Linux User Groupの「鹿児島Linux勉強会 2020.05(オンライン)」が開催されました.

以前は参加者が少ない場合オンラインとしていましたが,最近ははじめからオンライン前提での開催です.
先月10人位今月は少ないなと思っていたけど残り数日で倍くらいになってまた10人位の参加になりました.

オンラインはいろいろなやり方がありますが,今回はDiscordを利用して主にボイスチャットとテキストチャット.発表は画面共有でスライド等を共有という感じです.それと今回はEtherpadで発表者管理などを行いました.
ツールが増えて参加者には分かりづらかったかもしれません.

今回Discordの調子が悪く特に前半音がおかしくなることが多かったです.ビデオをOnにすると良く駄目になる感じでした.自分の回線が細いせいかとも思いましたが他の方も同様だったので恐らくDiscord側の問題だったのかなと.先月は問題なかったのでサーバの利用率が上がっているのかもしれません.

発表についてはこんな感じでした.

自分の発表は最後のこれですが,発表時点で17:00で終了時間過ぎてました.

そしてこれからのイベントの確認.次回は06/28かな?でもOSC北海道で疲れてそう.

オンラインになって参加者が増えたおかげで以前のように一人でネタを何個も用意しなくていいのは楽ですね.むしろ時間が足りない.今回は結局30分ほどオーバーしました.

この後先月失敗した Jisti Meet を設定を低スペック向けに変更して Contabo のVPS でも立ててみたのでこれを試してもらいました.7人位で叩いてサーバのCPUは20%程,RAMは2GBという感じで安定していました.RAM 4GBのサーバなのでもっと増えても大丈夫そう.でもこのサーバは帯域無制限の代わりに回線細いのでそっちのほうが心配かもしれません.
ということでここでも勉強会できそうな感じです.

オンラインだとサービスが落ちたり調子悪かったりとかもあるのでこんな感じでいくつか代替用意しておきたいところです.

そしてそのまま繋ぎっぱなしで秋葉原の村役場と繋いで村役場の最後くらいの飲み会に参加したりして深夜まで.村役場これまでありがとう…….

Raspberry Pi Model Bの8GB RAM版の発売とRaspberry Pi OS

Raspberry Pi 4 Model Bの8GB RAM版が発表.同時に発売され,日本も同時発売になったようです.

日本だと今はこのあたりでしょうか.

RAM が8GB あるとデスクトップ用途がRAM を気にせず使えるようになりそうですね.後は例えばビデオミーティングアプリのJitsi Meet をRaspberry Pi でホストしている人がいたりしますが,現在は設定を少し変えて省エネ設定で動かしていますが規定値の設定で動きそうです.
そして8GBもあると気になるのが標準OSのRaspbianがarmhf(32bit)にしか対応していないところ.
別のディストリビューションを使えばarm64(b4bit)は利用できますが標準OSが非対応なのはちょっと悲しいです.

私はDebian をよく使います.

これも今回発表がありました.64bit版のベータがリリースされました.

Not to be left out, today we’ve released an early beta of our own 64-bit operating system image.

Raspbianの名前も変わり,Raspberry Pi OS と改められるようです.

Both our 32-bit and 64-bit operating system images have a new name: Raspberry Pi OS.

新しい64bitの Raspberry Pi OS は以下から入手できます.

ダウンロードサイトのディレクトリもraspiosが出来ています.これまでの32bitは raspios_armhf になるようです.

$ w3m -dump https://downloads.raspberrypi.org/ | grep -E 'raspbian|raspios'
[DIR] raspbian/                         2020-02-25 16:50    -
[DIR] raspbian_full/                    2020-02-14 13:52    -
[DIR] raspbian_lite/                    2020-02-14 13:49    -
[DIR] raspios_arm64/                    2020-05-28 04:38    -
[DIR] raspios_armhf/                    2020-05-28 05:27    -
[DIR] raspios_full_armhf/               2020-05-28 05:28    -
[DIR] raspios_lite_armhf/               2020-05-28 05:27    -
[ ]   wp-slice-raspbian                 2020-05-28 07:46 1.0K

armhfのリリースノートを観るとこれまでのものに今回のバージョンが追記されていました.(64biには未だ存在しない)

$ w3m -dump https://downloads.raspberrypi.org/raspios_armhf/release_notes.txt | grep ^2020-05-27:$ -A 33
2020-05-27:
  * Added Bookshelf application
  * Added Raspberry Pi Diagnostics application
  * Added magnifier plugin to taskbar - needs magnifier application installed from Recommended Software to enable
  * Added Magnifier application to Recommended Software
  * Added marketing questionnaire as initial Chromium tab
  * Version 0.25 of Scratch 2 included - uses external application to access IMU on SenseHAT
  * Version 1.0.5 of Scratch 3 included - uses external application to access IMU on SenseHAT
  * Version 32.0.0.371 of Flash player included
  * Version 1.0.6 of Node-RED included
  * Version 6.7.1 of VNC Server included
  * Version 6.20.113 of VNC Client included
  * Internal audio outputs enabled as separate ALSA devices
  * MagPi preinstall removed and replaced with Beginner’s Guide
  * MagPi weblink removed from main menu
  * Chromium made default application for PDF files
  * Common icon loading code for lxpanel plugins used
  * Italian translations added
  * Initial move of mouse pointer to menu button disabled
  * Padding at left of menu button removed
  * Focus behaviour changed so that focus moves to desktop if no windows are opened - improves reliability of Orca screen reader
  * Bug fix - focus bug in volume plugin
  * Bug fix - keyboard repeat interval bug in Mouse & Keyboard Settings
  * Bug fix - battery detection bug in battery plugin
  * Bug fix - spurious active areas on taskbar when plugins are hidden
  * Bug fix - occasional crash in file manager on file selection
  * Disk ID is now regenerated on first boot
  * Updated udev rules
    - Remove unused argon rule
    - Add vcsm-cma to video group
    - Add pwm to gpio group
  * i2cprobe: More flexible I2C/SPI alias mapping
  * Raspberry Pi firmware 21e1fe3477ffb708a5736ed61a924fd650031136
  * Linux kernel 4.19.118

Raspberry Pi の Download ページを観るとここもアップデートされていました.

Raspberry Pi OS (previously called Raspbian) is our official operating system for all models of the Raspberry Pi.

この64bit beta版はRaspberry Pi 3 と 4 で動作するようです.(2 v1.2でも多分動く)

Note, the 64bit OS is only install-able on the Pi 3 and Pi 4 devices

ということでRaspberry Pi 3 なら持ってる!ということでダウンロードしてみました.

$ wget https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2020-05-28/2020-05-27-raspios-buster-arm64.zip https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2020-05-28/2020-05-27-raspios-buster-arm64.zip.sha256 https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2020-05-28/2020-05-27-raspios-buster-arm64.zip.sig
$ sha256sum -c 2020-05-27-raspios-buster-arm64.zip.sha256
2020-05-27-raspios-buster-arm64.zip: OK
$ gpg --verify ./2020-05-27-raspios-buster-arm64.zip.sig
gpg: assuming signed data in './2020-05-27-raspios-buster-arm64.zip'
gpg: Signature made Thu 28 May 2020 01:05:10 PM JST
gpg:                using RSA key 54C3DD610D9D1B4AF82A37758738CD6B956F460C
gpg: Good signature from "Raspberry Pi Downloads Signing Key" [expired]
gpg: Note: This key has expired!
Primary key fingerprint: 54C3 DD61 0D9D 1B4A F82A  3775 8738 CD6B 956F 460C

署名の確認をすると期限切れのようです.新しい鍵を貰ってきてインポートして再度署名確認します.(ダウンロードページあたりにリンクして欲しい)

$ wget https://www.raspberrypi.org/raspberrypi_downloads.gpg.key
$ gpg ./raspberrypi_downloads.gpg.key
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
pub   rsa2048 2017-04-10 [SC] [expires: 2021-04-21]
      54C3DD610D9D1B4AF82A37758738CD6B956F460C
uid           Raspberry Pi Downloads Signing Key
sub   rsa2048 2017-04-10 [E] [expires: 2021-04-21]
$ gpg --import ./raspberrypi_downloads.gpg.key
gpg: key 8738CD6B956F460C: 1 signature not checked due to a missing key
gpg: key 8738CD6B956F460C: "Raspberry Pi Downloads Signing Key" 3 new signatures
gpg: Total number processed: 1
gpg:         new signatures: 3
  :
$ gpg --verify ./2020-05-27-raspios-buster-arm64.zip.sig
gpg: assuming signed data in './2020-05-27-raspios-buster-arm64.zip'
gpg: Signature made Thu 28 May 2020 01:05:10 PM JST
gpg:                using RSA key 54C3DD610D9D1B4AF82A37758738CD6B956F460C
gpg: Good signature from "Raspberry Pi Downloads Signing Key" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.

とりあえず良さそうです.

sd card等に書き込みます.今回dd で書きましたが,公式のRaspberry Pi Imager を使ったほうがいいかもですね.

$ time zcat ./2020-05-27-raspios-buster-arm64.zip | pv | sudo dd of=/dev/sdz bs=16M conv=fdatasync
3.46GiB 0:02:34 [22.9MiB/s] [                                                                                                                                 <=>               ]
0+92723 records in
0+92723 records out
3711959040 bytes (3.7 GB, 3.5 GiB) copied, 212.594 s, 17.5 MB/s

real    3m32.613s
user    0m30.584s
sys     2m12.420s
$ sync

これを使って起動してみると普通に起動します.

Raspberry Pi 3 Model B Rev 1.2で試しました
$ cat /proc/device-tree/model ;echo
Raspberry Pi 3 Model B Rev 1.2
aarch64 kernelです
$ uname -a
Linux raspberrypi 5.4.42-v8+ #1319 SMP PREEMPT Wed May 20 14:18:56 BST 2020 aarch64 GNU/Linux
パッケージもarm64
$ LC_ALL=C dpkg-architecture --print-set
DEB_BUILD_ARCH=arm64; DEB_BUILD_ARCH_ABI=base; DEB_BUILD_ARCH_BITS=64; DEB_BUILD_ARCH_CPU=arm64; DEB_BUILD_ARCH_ENDIAN=little; DEB_BUILD_ARCH_LIBC=gnu; DEB_BUILD_ARCH_OS=linux;
DEB_BUILD_GNU_CPU=aarch64; DEB_BUILD_GNU_SYSTEM=linux-gnu; DEB_BUILD_GNU_TYPE=aarch64-linux-gnu; DEB_BUILD_MULTIARCH=aarch64-linux-gnu; DEB_HOST_ARCH=arm64; DEB_HOST_ARCH_ABI=ba
se; DEB_HOST_ARCH_BITS=64; DEB_HOST_ARCH_CPU=arm64; DEB_HOST_ARCH_ENDIAN=little; DEB_HOST_ARCH_LIBC=gnu; DEB_HOST_ARCH_OS=linux; DEB_HOST_GNU_CPU=aarch64; DEB_HOST_GNU_SYSTEM=li
nux-gnu; DEB_HOST_GNU_TYPE=aarch64-linux-gnu; DEB_HOST_MULTIARCH=aarch64-linux-gnu; DEB_TARGET_ARCH=arm64; DEB_TARGET_ARCH_ABI=base; DEB_TARGET_ARCH_BITS=64; DEB_TARGET_ARCH_CPU
=arm64; DEB_TARGET_ARCH_ENDIAN=little; DEB_TARGET_ARCH_LIBC=gnu; DEB_TARGET_ARCH_OS=linux; DEB_TARGET_GNU_CPU=aarch64; DEB_TARGET_GNU_SYSTEM=linux-gnu; DEB_TARGET_GNU_TYPE=aarch
64-linux-gnu; DEB_TARGET_MULTIARCH=aarch64-linux-gnu; export DEB_BUILD_ARCH DEB_BUILD_ARCH_ABI DEB_BUILD_ARCH_BITS DEB_BUILD_ARCH_CPU DEB_BUILD_ARCH_ENDIAN DEB_BUILD_ARCH_LIBC D
EB_BUILD_ARCH_OS DEB_BUILD_GNU_CPU DEB_BUILD_GNU_SYSTEM DEB_BUILD_GNU_TYPE DEB_BUILD_MULTIARCH DEB_HOST_ARCH DEB_HOST_ARCH_ABI DEB_HOST_ARCH_BITS DEB_HOST_ARCH_CPU DEB_HOST_ARCH
_ENDIAN DEB_HOST_ARCH_LIBC DEB_HOST_ARCH_OS DEB_HOST_GNU_CPU DEB_HOST_GNU_SYSTEM DEB_HOST_GNU_TYPE DEB_HOST_MULTIARCH DEB_TARGET_ARCH DEB_TARGET_ARCH_ABI DEB_TARGET_ARCH_BITS DE
B_TARGET_ARCH_CPU DEB_TARGET_ARCH_ENDIAN DEB_TARGET_ARCH_LIBC DEB_TARGET_ARCH_OS DEB_TARGET_GNU_CPU DEB_TARGET_GNU_SYSTEM DEB_TARGET_GNU_TYPE DEB_TARGET_MULTIARCH
導入パッケージ数(ヘッダ5行を除いて1303個)
$ dpkg-query -l|wc -l
1308
パッケージリスト(dpkg-query -l)

https://gist.github.com/6215f11e53ee668b04246ecd1d08f3db

ディスク利用量は3GB程
$ df -m
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/root          29938  2840     25832  10% /
devtmpfs             329     0       329   0% /dev
tmpfs                457     0       457   0% /dev/shm
tmpfs                457     1       457   1% /run
tmpfs                  5     1         5   1% /run/lock
tmpfs                457     0       457   0% /sys/fs/cgroup
/dev/mmcblk0p1       253    54       200  22% /boot
tmpfs                 92     0        92   0% /run/user/1000
有線/無線LAN認識
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:46:60:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.182/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
       valid_lft 258810sec preferred_lft 226410sec
    inet6 fe80::2979:45f7:e3bf:a4d9/64 scope link
       valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether b8:27:eb:13:35:46 brd ff:ff:ff:ff:ff:ff
Bluetooth
$ bluetoothctl
Agent registered
[bluetooth]# list
Controller B8:27:EB:EC:CA:B9 raspberrypi [default]
[bluetooth]# quit
raspi-config等もある
Raspberry Pi 3 Model B Rev 1.2


┌─────────┤ Raspberry Pi Software Configuration Tool (raspi-config) ├──────────┐
│                                                                              │
│  1 Change User Password Change password for the 'pi' user                    │
│  2 Network Options      Configure network settings                           │
│  3 Boot Options         Configure options for start-up                       │
│  4 Localisation Options Set up language and regional settings to match your  │
│  5 Interfacing Options  Configure connections to peripherals                 │
│  6 Overclock            Configure overclocking for your Pi                   │
│  7 Advanced Options     Configure advanced settings                          │
│  8 Update               Update this tool to the latest version               │
│  9 About raspi-config   Information about this configuration tool            │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                     <Select>                     <Finish>                    │
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘
screenfetch(Raspbian logoじゃなくDebian logoになった)

RasPiOS screenfetch 20200530 23:05:27 2909997

pfetch
$ pfetch/pfetch
  _____      pi@raspberrypi
 /  __ \     os     Debian GNU/Linux 10 (buster)
|  /    |    host   Raspberry Pi 3 Model B Rev 1.2
|  \___-     kernel 5.4.42-v8+
-_           uptime 52m
  --_        pkgs   1313
             memory 203M / 913M

て感じで試し始めました.
しばらく使ってみようかと思います.

あ,余ったRaspberry Pi があったらください :p

もし問題が見つかったら以下を確認して報告すると直るかもしれません.

Linuxマルチモニタ環境のウェブブラウザでスクリーン共有を行うとすべてのスクリーンが共有されてしまう問題がChromiumで解決

例えばモニタの設定がこうなっている状態で

Linux multimonitor 20200526 22:05:26 3278321

ウェブブラウザでJitsi MeetやZoomなどでスクリーン共有しようとすると複数のスクリーンがすべて一緒になって1つの画面として共有されてしまいます.

Chromium 81.0.4044.92 built on Debian bullseye/sid, running on Debian bullseye/sid

Linux multimonitor 20200526 22:05:20 3267188

Mozilla Firefox 76.0.1(Debian sid amd64 package版)

Linux multimonitor 20200526 22:05:47 3311507

例えばLibreOffice でプレゼンテーションモードでセカンダリモニタにスライドをフルスクリーン表示させてそれを共有したいといったことがスクリーン共有で出来ませんでした.フルスクリーン表示の後そのウィンドウを共有することは出来ますが,途中で別のウィンドウを見せたい場合ウィンドウ共有をやり直さなければいけないのでとても面倒です.

これについて調べてみるとChromium では最近修正されたようです :)

以下からChromium のsnapshots binary を入手して試してみました.

試したバージョンは Chromium 85.0.4157.0 でした.

$ wget 'https://download-chromium.appspot.com/dl/Linux_x64?type=snapshots' -O ./chrome-linux.zip
$ unzip -l ./chrome-linux.zip | lv
$ unzip ./chrome-linux.zip
$ $ ./chrome-linux/chrome --version
Chromium 85.0.4157.0
$ ./chrome-linux/chrome --temp-profile --user-data-dir=`mktemp -d`

この環境で Jitsi Meet に接続して画面共有を試してみると Screen 1, Screen 2 とスクリーンごとに共有できるようになっていました :)

Linux muitimonitor 20200526 22:05:57 3299122

Stable に降りてくるのは暫く先でしょうが便利になりそうです.

ちなみにFirefox も少し調べてみましたが,以下のあたりでしょうか?未だ直ってなさそう?古いbugなので他にも上がってそちらで議論されていそうです.

環境
$ dpkg-query -W chromium firefox
chromium        81.0.4044.92-1
firefox 76.0.1-2
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

Nextcloud とCollarora Demo Server で簡単にLibreOffice Online を試す

こちらの記事で知ったのですが,Nextcloud でCollabora Online のDemo Server が簡単に使えるようになったようです.試してみました.

この機能は Collabora Online 3.6.0 で入ったようです.

Add demo server selector and show hint about that when Collabora is not setup

なので,Collabora Online 3.6.0 の動作するNextcloud 15〜19 環境が必要です.今回は Nextcloud 18.0.4 環境で試しました.

Nextcloud にCollabora Online App を導入します.

導入は簡単で,管理者権限のあるユーザでWeb経由で導入したり,CLIで導入できます.

cliでの導入例
$ sudo -u www-data php $NEXTCLOUD/occ app:install richdocuments
richdocuments installed
richdocuments enabled

次にDemo Server を設定します.
管理者ユーザでログインした状態のNextcloud で「設定」→「Collabora Online」で設定します.

確認メッセージが表示されます.

lool demo04

「Use a demo server」にチェックするとDemo Serverが選択できます.いくつか選択肢があるので今回は「Tokyo, Japan」を選びました.

lool demo03

少し設定が出来ます.

lool demo05

この状態でファイル画面に遷移して,「新しいドキュメント」を作成してみます.

lool demo06

LibreOffice Onlineが起動してDemo Server のメッセージが表示されます.

lool demo07

後は普通に編集できます :)
Demo ServerなのでこまめにDemoのメッセージが表示されますがこれはDemoなのでしょうがないですね.テキスト編集は特にもたつく感じはなくネイティブとそう変わらない感じ.スライドで画像やシェイプ図形など使うとまた違うかもしれません.

lool demo08

LibreOffice Online を自分のサーバに導入するのも以下のあたりでバイナリが配布されているので案外お手軽なのでこのDemo Server で気に入ったらLibreOffice Online を導入するといいと思います.

環境
$ sudo -u www-data php /var/www/files.matoken.org/occ app:list | grep richdocuments
  - richdocuments: 3.6.0
$ sudo -u www-data php /var/www/files.matoken.org/occ --version
Nextcloud 18.0.4
$ dpkg-query -W php apache2 mariadb-server
apache2 2.4.38-3+deb10u3
mariadb-server  1:10.3.22-0+deb10u1
php     2:7.3+69
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ uname -m
x86_64

YoutubeLiveを音声のみで視聴する試み

Youtubeの動画には音声のみのストリームがあるのでこれをダウンロードしてpodcast的に聞いたりすることがあるのですが,YoutubeLiveには音声のみのストリームはないようです.

Youtube動画
$ youtube-dl --ignore-config -F https://www.youtube.com/watch?v=PNWQvqUUHbQ
[youtube] PNWQvqUUHbQ: Downloading webpage
[youtube] PNWQvqUUHbQ: Downloading MPD manifest
[info] Available formats for PNWQvqUUHbQ:
format code  extension  resolution note
251          webm       audio only DASH audio    3k , webm_dash container, opus @160k (48000Hz)
139          m4a        audio only DASH audio   49k , m4a_dash container, mp4a.40.5@ 48k (22050Hz)
140          m4a        audio only DASH audio  130k , m4a_dash container, mp4a.40.2@128k (44100Hz)
278          webm       256x144    DASH video   95k , webm_dash container, vp9, 30fps, video only
160          mp4        256x144    DASH video  108k , mp4_dash container, avc1.4d400b, 30fps, video only
242          webm       426x240    DASH video  220k , webm_dash container, vp9, 30fps, video only
133          mp4        426x240    DASH video  242k , mp4_dash container, avc1.4d400c, 30fps, video only
243          webm       640x360    DASH video  405k , webm_dash container, vp9, 30fps, video only
134          mp4        640x360    DASH video  463k , mp4_dash container, avc1.4d401e, 30fps, video only
244          webm       854x480    DASH video  752k , webm_dash container, vp9, 30fps, video only
135          mp4        854x480    DASH video 1155k , mp4_dash container, avc1.4d4014, 30fps, video only
247          webm       1280x720   DASH video 1505k , webm_dash container, vp9, 30fps, video only
136          mp4        1280x720   DASH video 2007k , mp4_dash container, avc1.4d401f, 30fps, video only
18           mp4        640x360    360p  494k , avc1.42001E, 30fps, mp4a.40.2@ 96k (44100Hz), 1.34MiB
22           mp4        1280x720   720p 1788k , avc1.64001F, 30fps, mp4a.40.2@192k (44100Hz) (best)
YoutubeLive
$ youtube-dl --ignore-config -F https://www.youtube.com/watch?v=XXXX-XXXXXX 2>/dev/null
[youtube] XXXX-XXXXXX: Downloading webpage
[youtube] XXXX-XXXXXX: Downloading m3u8 information
[youtube] XXXX-XXXXXX: Downloading MPD manifest
[info] Available formats for XXXX-XXXXXX:
format code  extension  resolution note
91           mp4        256x144    HLS  197k , avc1.42c00b, 30.0fps, mp4a.40.5@ 48k
92           mp4        426x240    HLS  338k , avc1.4d4015, 30.0fps, mp4a.40.5@ 48k
93           mp4        640x360    HLS  829k , avc1.4d401e, 30.0fps, mp4a.40.2@128k
94           mp4        854x480    HLS 1380k , avc1.4d401f, 30.0fps, mp4a.40.2@128k
95           mp4        1280x720   HLS 2593k , avc1.4d401f, 30.0fps, mp4a.40.2@256k (best)

これをリモートサーバでaudioのみに変換してしまうと細い回線で音声だけ聞くことが出来るのではと試してみました.
(屋外移動中などに聞くのを想定)

YoutubeLiveのダウンロードには youtube-dl ,変換には ffmpeg を利用しました.

youtube-dl についてはこのあたりを参考にしてください.

以下ではyoutube-dlで最低画質の動画(フォーマットコード91)の144p/48kな動画をダウンロードして標準出力に渡して,パイプでffmpegで受け取って音声だけ切り出して udp:1234 に配信しています.音質をあげたい場合は360pで128k,720pで256kのようなので対応の動画を選ぶと良いですね.

$ youtube-dl -f 91 $YOUTUBELIVEURL -o - | ffmpeg -i - -c:a copy -vn -f adts udp://127.0.0.1:1234

この状態で ffplay で受信して再生できました :)

$ ffplay udp://127.0.0.1:1234

リモートのVPSサーバとかでこれをやると外出先でMVNOの低速モードでの受信も問題なさそうです.
自分だけで聞く分にはこれでいいのですが,自分の配信したYoutubeLiveを多人数に音声を配信して聞いてもらいたいなどの場合には使えません.(他の人のものを勝手に不特定配信は駄目)

そこで Icecast2 に流すのも試してみました.
ほほ同じようにして流せました.PCとAndroid端末でモバイル回線の低速モードでも試してみたところ同時に視聴できました :)

$ youtube-dl --ignore-config -f 91 $YOUTUBELIVEURL -o - | ffmpeg -i - -c:a copy -vn -f adts -content_type audio/aac iceca
st://source:password@icecast2.example.org:8000/youtubelivetest
peeでデータを2つに分けてモニタしながらとかも
$ youtube-dl --ignore-config -f 91 $YOUTUBELIVEURL -o - | pee "ffplay -" "ffmpeg -i - -c:a copy -vn -f adts -content_type audio/aac iceca
st://source:password@icecast2.example.org:8000/youtubelivetest"

youtubelive2icecast2

$ mpv http://icecast2.example.org:8000/youtubelivetest.m3u

Playing: http://icecast2.example.org:8000/youtubelivetest
 (+) Audio --aid=1 (aac 2ch 48000Hz)
AO: [pulse] 48000Hz stereo 2ch float
A: 00:00:02 / 00:00:10 (24%) Cache: 7.9s/139KB
File tags:
 icy-title:
A: 00:00:22 / 00:00:30 (75%) Cache: 7.1s/126KB

YoutbeLive,Icecast2と間にサービスを挟むと遅延はどんどん大きくなるので余裕があったらYoutubeLiveに流すのと同じマシンで直接icecast2に流したほうがいいでしょうね.

懸念点としてはYoutubeのシステム的にこの視聴方法で視聴者数や視聴時間に貢献できるのかというところ.とりあえずは家に帰ったらウェブブラウザ等で視聴し直したり,リモートサーバでウェブブラウザを起動してYoutubeLiveを再生してその音声を取り込んだりするか…….そうなってくるとOBS Studio等を使ったほうがわかりやすいかもしれないですね.

しかし,値段だけ考えると特定のサービスで容量を消費しないカウントフリー,エンタメフリーオプション等でYoutubeに対応したSIMを使うという手も使えそうです.
自分は意思が弱く利用サービスがカウントフリーのものに偏ったりしそうだし,通信を見られるのが嫌なので今のところ使う予定はないです.

クライアント環境
$ youtube-dl --version
2020.05.03
$ dpkg-query -W ffmpeg mpv
ffmpeg  7:4.2.2-1+b1
mpv     0.32.0-1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64
Icecast2環境
$ youtube-dl --version
2020.05.03
$ dpkg-query -W ffmpeg icecast2
ffmpeg  7:4.1.4-1~deb10u1
icecast2        2.4.4-1
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ uname -m
x86_64

最近参加したオンライン勉強会とか 〜2020.04

COVID-19で集まることができなくなりいろいろなイベントがオンライン化しています.
遠隔地とか関係なくネットワークがあれば参加できるようになりました.

いくつかのイベントに参加したメモです.
(鹿児島らぐ 2020.04で発表うしようと思って用意してたけどお蔵入りになったものを少し修正したもの)

小江戸らぐ 3月のオフな集まり(第212回)

東京エリアDebian勉強会

2020-03-21(Sat) Google Hangouts → Jitsi(GCPでセルフホスト)

Document Freedom Day 2020 Japan Online

Open Source UN-Conference 2020 Kawagoe Online

東京エリア・関西合同Debian勉強会 (2020/4/18(土))

第81回FreeBSD勉強会 Windowsユーザに捧ぐ、FreeBSDの使い方 – SNSも…​

2020-04-23(thu) Zoom + chatはslack

こちらはオンラインは初で私は初参加.COVID-19収束してオフラインで集まれるようになってもオンラインは続けたいねという話が出たり.

4/24-25 Open Source Conference 2020 Online/Spring

2020-04-24〜25 Zoom + Remo + YoutubeLive

LTが少なくて飛び入り発表したもの(評判の良かった小江戸らぐの再放送)

4/28 宮原徹のオープンソース放浪記オンライン

鹿児島Linux勉強会 2020.04

いろいろ参加してみて

  • 以前は基本集まってリモートはオプションだった
  • 何度か発表もしたけど無に話してる感が強かった
  • 今は全員がリモート
  • みんなが慣れてきていて反応もある程度帰ってくるようになっている
  • 終わりも見えないのでしばらくはこの状況は続きそう
  • 集まれるようになってもリモート続けたいねと言っている集まりも複数
  • 今のうちにあちこち参加して慣れたり顔つなぎしておこう

OSSで……

できればOSSなサービスで勉強会やりたい

  • Jitsi Meet
  • NextcloudTalk
  • BigBlueButton
  • Mumble
    :

Debian sidでサポートの終了したクリップボードマネージャーのClipItをDiodonに乗り換える

クリップボードマネージャーにClipItをXログイン時に自動起動して利用していました.

clipit trayicon

しかし,最近タスクバーの中に出てきません.プロセスもない.とりあえず手動で起動しても即正常終了します.

$ clipit;echo $?
0

設定ファイルが壊れたのかな?と設定ディレクトリを退避して試してみます.

$ mv ~/.config/clipit ~/.config/clipit-mv

するとこのようなウィンドウが表示されました.ClipItはDebianではもうサポートされずDiodonの導入をしてくれているようです.

ClipIt has been deprecated

ClipIt has been deprecated and is no longer supported in Debian.

Diodon, a supported replacement for ClipIt, has been automatically installed for your convenience.

Please note that the user settings have not been migrated. You can still access them in ~/.config/clipit/clipitrc.

packageの説明にも deprecated と書かれています.

$ apt-cache search clipit
clipit - lightweight GTK+ clipboard manager (deprecated)

ちなみにClipItを起動すると ~/.config/clipit/disabled が作られ,このファイルがあるとメッセージを表示せず終了するようです.(1度だけ表示)

$ ls -A ~/.config/clipit/
disabled
$ cat ~/.config/clipit/disabled
ClipIt has been disabled and replaced by Diodon.

diodon

Diodonを少し見てみます.

$ apt-cache search Diodon
clipit - lightweight GTK+ clipboard manager (deprecated)
diodon - GTK+ Clipboard manager
diodon-dev - GTK+ Clipboard manager (development files)
gir1.2-diodon-1.0 - GTK+ Clipboard manager (GObject introspection data)
libdiodon0 - GTK+ Clipboard manager (main library)
$ apt show diodon
$ dpkg -l diodon|tail -1
ii  diodon         1.9.0-1      amd64        GTK+ Clipboard manager
Package: diodon
Version: 1.9.0-1
Priority: optional
Section: utils
Maintainer: Oliver Sauder <os@esite.ch>
Installed-Size: 1,001 kB
Depends: libdiodon0 (= 1.9.0-1), zeitgeist-core (>= 0.9.14), dconf-gsettings-backend | gsettings-backend, libappindicator3-1 (>= 0.2.92), libc6 (
>= 2.4), libglib2.0-0 (>= 2.46), libgtk-3-0 (>= 3.10), libpeas-1.0-0 (>= 1.1.1)
Homepage: https://launchpad.net/diodon
Tag: uitoolkit::gtk
Download-Size: 60.6 kB
APT-Manual-Installed: yes
APT-Sources: http://ftp.jp.debian.org/debian sid/main amd64 Packages
Description: GTK+ Clipboard manager
 Diodon is a lightweight clipboard manager for Linux written in Vala which
 "aims to be the best integrated clipboard manager for the Gnome/Unity desktop".
 .
 Diodon features include Ubuntu indicator, clipboard sync (primary selection
 and Ctrl+C / Ctrl+V clipboard) and a zeitgeist integration for an infinite
 clipboard history.

Launchpadなんですね.もしかしてUbuntu由来なのかな?

起動すると使い勝手はClipItとあまり変わらなさそうです.自動起動に設定しておきました.

以下はawesome wm での例です.

$ grep diodon ~/.config/awesome/rc.lua
awful.util.spawn_with_shell("~/.config/awesome/bin/run_once.sh diodon")

アイコンが変わったのではじめのうちどのアイコンだっけ?とかなったくらいで問題なく使えています.

LinuxのPulseAudioのエコーキャンセルモジュールがいい感じ

皆さんオンラインミーティングとかやってますか?私は急にオンラインミーティングに参加する頻度が増えました.
これまでマイクはほとんど使っていなかったのでマイクは気にしていなかったのですが気になるようになりました.

Linuxで使えるリアルタイムノイズキャンセルソフトウェアはあるのだろうかと少し調べるとPulseAudioのモジュールで module-echo-cancel というものがあるのを知りました.

とりあえず規定値の設定は簡単で,/etc/pulse/default.pa`というファイルに`load-module module-echo-cancel`を書いてあげてPulseAudioの再起動でokです.
PulseAudioの再起動は手元の環境では `pulseaudio -k
で停止してすぐ自動起動してきました.

$ echo "load-module module-echo-cancel" | sudo tee -a /etc/pulse/default.pa
$ pulseaudio -k
$ ps ux | grep pulseaudio | grep -v grep || pulseaudio --daemonize=no
Note
追記)

/etc/pulse/default.pa はシステムワイドな設定でroot権限も必要なので自分しか使わないなら ~/.config/pulse/default.pa を使ったほうがいいですね.
そしてデーモンの再起動は上の方法だと乱暴なのでこんな感じかな

$ systemctl --user restart pulseaudio.service

これでマイクを利用したいアプリでオーディオデバイスをecho cancelのものに切り替えればOKです.

discord audio
zoom audio

という感じで簡単に設定できました.
この設定有効なのだろうか?とpavucontrolで見てみました.

以下は特に何も話していないときの様子です.上がマイク直のデバイス,下がecho cancel module のされたデバイスの状態です.

pulseaudio echo cancel

バーの動き的にはなにか効いてる感じです.

Discordで音声チャット中に切り替えて聴き比べてもらうと明らかに良くなってるとのこと.
てことでノイズ源が回りにある人は設定がお手軽なのでおすすめです.

ちなみにKrispというノイズキャンセルアプリケーションがあって評判がいいようです.しかし残念ながらLinuxは対応していません(◞‸◟)
でもChrome拡張機能があるのでChromeのウェブアプリでは利用できそうです.

HDDデータ復旧時にFAT32の制限に嵌ったメモ

2.5インチハードディスクをPCに接続しても認識しなくなったとのことで読めるようにならないか相談を受けました.

元々NotePCに内蔵されていたものをUSB接続の箱に入れて使っていたとのこと.
型番は TOSHIBA MK4058GSX で 約400GB のもの.
USB エンクロージャーは USB3.0 接続で USB A – micro B 3.0 久々に見ました.

復元したデータは一緒に渡された 3.5インチ外付けハードディスクに入れてほしいとのこと.
確認するとFAT32です.権限などは落ちてしまうよなーと確認するとファイルが救えさえすればいいとのこと.

まあディスク認識が出来れば吸い出してloopback mountしてコピーと言う感じかなと思っていたのですがFAT32のおかげで結構面倒でした.

今回は Debian sid amd64 環境でHDDから GNU ddrescue でイメージを吸い出してマウントしてからコピーすることにしました.

Linux環境がなければ SystemRescueCd とかをUSBメモリ起動したりするのがお手軽だと思います.

PCに接続するとキュルキュルカッコンといった異音がします.久々にこういう音をするハードディスクを触りました.

PCに接続して少し時間は掛かりましたが /dev/sdb として認識しました.

認識したところで GNU ddrescue でディスクイメージを吸い出してみます.rateがすごく変動して残り時間が数時間〜数十日で安定しません.幸い1日と少しで最後まで走りきって bad-sector/bad area も見つからなかったので恐らくデータの欠落もなかったようです.

ddrescue
$ time sudo ddrescue -n -v /dev/sdb ./disk.img ./disk.img.log
GNU ddrescue 1.23
About to copy 400088 MBytes from '/dev/sdb' to 'disk.img'
    Starting positions: infile = 0 B,  outfile = 0 B
    Copy block size: 128 sectors       Initial skip size: 7936 sectors
Sector size: 512 Bytes

Press Ctrl-C to interrupt
     ipos:  400088 MB, non-trimmed:        0 B,  current rate:  16015 kB/s
     opos:  400088 MB, non-scraped:        0 B,  average rate:   4225 kB/s
non-tried:        0 B,  bad-sector:        0 B,    error rate:       0 B/s
  rescued:  400088 MB,   bad areas:        0,        run time:  1d  2h 17m
pct rescued:  100.00%, read errors:        0,  remaining time:         n/a
                              time since last successful read:         n/a
Finished

real    1578m2.468s
user    0m35.744s
sys     10m24.384s

吸い出したディスクイメージのパーティションを見るとこんな感じで元PCのリカバリ領域なども残っているようです.

disk partition
$ fdisk -l ./disk.img
Disk ./disk.img: 372.63 GiB, 400088457216 bytes, 781422768 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xcd22cd22

Device      Boot     Start       End   Sectors   Size Id Type
./disk.img1           2048   3074047   3072000   1.5G 27 Hidden NTFS WinRE
./disk.img2 *      3074048 653834239 650760192 310.3G  7 HPFS/NTFS/exFAT
./disk.img3      653834240 758691839 104857600    50G  f W95 Ext'd (LBA)
./disk.img4      758691840 781422591  22730752  10.9G 17 Hidden HPFS/NTFS
./disk.img5      653836288 758691839 104855552    50G  7 HPFS/NTFS/exFAT

Partition table entries are not in disk order.

mount コマンドの offset option で mount することも出来ますが面倒なので kpartx コマンドでデバイスマッピングをしておきます.
これで出来たループバックデバイスを指定してマウントできます.

デバイスマッピング
$ sudo kpartx -av ./disk.img
add map loop8p1 (253:3): 0 3072000 linear 7:8 2048
add map loop8p2 (253:4): 0 650760192 linear 7:8 3074048
add map loop8p3 (253:5): 0 2 linear 7:8 653834240
add map loop8p4 (253:6): 0 22730752 linear 7:8 758691840
add map loop8p5 (253:7): 0 104855552 linear 7:8 653836288
1つ目のパーティションを読み込み専用で /mnt/p1 にマウント
$ sudo mkdir -p /mnt/p1
$ sudo mount -o ro,loop /dev/mapper/loop8p1 /mnt/p1

rsync を使ってコピー.(--modify-window=2 はFAT32対策)

$ rsync -avvc --modify-window=2 --log-file=rsync.log コピー元 コピー先

数時間後.ログが止まってるけど大きいファイル転送中なのかな?
半日後……未だ終わらない.ログ変わってないような?メモしておく.
1日後.画面に変化がないので固まってる!

Ctrl+Cで中断.
再度実行すると同じところで止まる.

なんでだろう?といろいろ試すと転送先の該当ディレクトリにファイルを作成しようとするとエラーとなることがわかりました.

FAT32の問題で1ディレクトリ内のファイル数制限に引っかかったよう.

短いファイル名長で沢山ファイルを作ると65535個まで
$ n=1;while :;do if ! touch ${n};then echo ${n} ;break;fi ;n=$(( n + 1 ));done
touch: cannot touch '65534': No space left on device
65534
$ ls -1A|wc -l
65533
$ ls -1a|wc -l
65535
255文字のファイル名長だと3123個まで
$ n=1;while :;do if ! touch `printf %0255d ${n}`;then echo ${n} ;break;fi ;n=$(( n + 1 ));done
touch: cannot touch '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003121': No space left on device
3121
$ ls -lA|wc -l
3121
$ ls -la|wc -l
3123

--exclude '除外' でとりあえずあとで対応.と --timeout=30 オプションを付けてエラー時に終了するようにして再度実行.

$ rsync -avvc --modify-window=2 --timeout=30 --log-file=rsync.log --exclude '除外' コピー元 コピー先

何度か同じエラーがでたので都度除外リストを伸ばしていく><

終わった後に該当ディレクトリはzipアーカイブ化した.4GBを超えるものについてはzipのSplit archives機能(zip 3.0以上)を利用.

$ zip -9rs 3800m /fat32/hoge.zip source_dir

同様にパーティーション2つ目以降もコピーしていく.

書き出しHDDの空き容量に余裕があったので吸い出したRAW Disk イメージもコピーしておく.
4GB制限があるのでsplitで分割してコピー.

$ split -b 4000000000 ./disk.img

これでとりあえず簡単なドキュメントと一緒に渡して終わりにしました.
その後返信ないけど返信がないってことは多分大丈夫なのかな?

てことでディスクはFAT32 は避けたほうがいいねという.デジカメなどでFAT32にしか対応していないものは仕方がないですが,PCに繋ぐ外付けHDDなどはNTFSやexFatなどにしたら今回のようなトラブルに会いにくいと思います.(Linuxでも読み書きできる)