Devuan Ascii から Beowulf にアップグレード

Devuan3

祝Devuan Beowulf 3.0.0 released.

ということで,Debian BusterベースのDevuan Beowulf がリリースされました.
Devuan はDebian ベースの脱Systemd なディストリビューションです.Debianでも今の所Systemd を避けることは出来ると思いますが既定値はSystemd です.

手元のi686マシンにDevuan 1 JessieからDevuan 2 Ascii にしたマシンがあるのでこれをBeowulf にアップグレードしてみました.
アップグレードにはDebianの以下の文章を参考にしました.以下はi386版の文章なので自分のArchtecture の文章を見るといいと思います.

先ずはパッケージを最新にします.
こんな感じで apt update で最新になったのを確認します. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

$ sudo apt update
$ sudo apt upgrade

あとで何をしたのか何が起こったのか確認出来るようログを撮っておきます.もし,sshなどのリモート経由で実行するのであればGNU screen やtmux などのターミナルマルチプレクサも起動してそこで作業を行うと回線が切断されてしまっても復帰できるのでおすすめです.

$ script -t 2>~/upgrade-beowulfstep.time -a ~/upgrade-beowulfstep.script

/etc/apt/sources.list を書き換えます.
/etc/apt/sources.list.d/* もある場合はそちらも書き換えます.

$ sudo apt edit-sources

パッケージ情報を更新します.

$ sudo apt update

アップグレードに必要な容量があるか確認します.2GB程容量が増えるようです.

$ sudo apt -o APT::Get::Trivial-Only=true full-upgrade
  :
1636 upgraded, 556 newly installed, 34 to remove and 3 not upgraded.
Need to get 1,613 MB of archives.
After this operation, 2,071 MB of additional disk space will be used.
E: Trivial Only specified but this is not a trivial operation.

最小アップグレードを行います.……しばらく掛かるので何か他のことでもして待ちます.
apt-listchanges をざっくり流し見してパッケージの展開に移ります.1.8インチHDDなのでこれも時間がかかります.

$ sudo apt-get upgrade

システムのアップグレードを行います.しばらく待ちます…….しばらく待ちます…….apt-listchanges が表示されて確認後展開.いくつかの確認メッセージが出たります.
Directory not empty な警告もいくつか.設定ファイルの修正も出てきますがダウンタイムが発生してよければ後回しにしても大丈夫.例えば既存の設定を残すよう指示すると, 設定ファイル名.ucf-dist というファイルが作成されるのであとでゆっくり比較しながら設定できます.本番環境だったら前もって新環境の設定を用意しておくといいですね.

$ sudo apt full-upgrade

どうにか終わったのですが,使われていないパッケージが大量に残っているのでこれを削除します.沢山あるのでこれも時間がかかりました.

$ sudo apt autoremove

ここで再起動.アイコンや壁紙が名前変わったらしくブランクになったりしています.それを置き換えたりしてとりあえずOKそうになりました.

標準壁紙は /usr/share/images/desktop-base/ にありました.赤い.

起動時のメモリ利用量が100MB程増えているようです.100MBだとそう大きく感じませんが1.5倍と考えるとかなりの増加量.プロセスをメモリ利用順に並べてみるとデスクトップに使っているLxQt 関連が消費しているようです.しばらく使って問題なようなら別のものに変えるかもしれません.

$ lsb_release -dr
Description:    Devuan GNU/Linux 3 (beowulf)
Release:        3
$ uname -m
i686

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

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

LibreOffice Hackfest Online #2 に参加して LibreOffice をbuildした

最近毎週水曜日に開催されている「LibreOffice Hackfest Online #2」に参加してみました.
今回は#2で#0から始まったので3回目.

Jitsi Meet で集まってYoutubeLive での配信も行っていました.配信された動画はアーカイブされていて以下で公開されています.

今回はLibreOffice のビルドをする回でした.自分は確か以前LOOLを試すためにbuildして以来で2,3年ぶりかな?デスクトップ版は初めてです.
いつも使っている環境はLinuxのDebian sid amd64 環境なのでここでbuildすることに.

当日だけだとsourceをとってくるだけで終わってしまうだろうと前日までに source の clone と build-dep でbuild に必要なパッケージを導入しておきました.

$ git clone git://anongit.freedesktop.org/libreoffice/core
$ sudo apt build-dep libreoffice

そして当日は autogen.sh を実行して依存関係に失敗,以下のあたりを追加で導入しました.

$ sudo apt install git ccache junit4 gstreamer1.0-libav libkrb5-dev nasm graphviz libpython3-dev

その後,再度 autogen.sh を実行.

$ ./autogen.sh

makeを掛けるとHackfest に利用しているJitsi Meets に影響が出そうです.てことで影響が出たら中断するつもりでこんな感じで優先度を下げて実行しました.問題なさそうなのでそのまま放置しておきました.

$ time nice -n 19 make -j1

Hackfest が終わってもまだ終わる気配はなかったのでそのままおいときます.
そして翌朝やっと終了していました.

make は20:06:23〜翌日の06:29:35 まで掛かっていました.優先度を下げていたとはいえかなり時間がかかりました.
時間がかかったのはCPUの温度が上がってCPUスロットリングが効いて0.8GHzとかにクロックが落ちていたのが大きそうです.

早速実行すると起動して利用できそうです.

$ instdir/program/soffice

LibOBuild1 20200507 12:05:26 2204368

しかしUI言語がUSAしか選べません.

LibOBuild2 20200507 19:05:56 2517755

恐らく autogen.sh の実行時にオプションがなかったせいだと思います.

$ ./autogen.sh --help|grep -i with-lang -A 13
  --with-lang="es sw tu cs sk"
                          Use this option to build LibreOffice with additional
                          UI language support. English (US) is always included
                          by default. Separate multiple languages with space.
                          For all languages, use --with-lang=ALL.
  --with-locales="en es pt fr zh kr ja"
                          Use this option to limit the locale information
                          built in. Separate multiple locales with space. Very
                          experimental and might well break stuff. Just a
                          desperate measure to shrink code and data size. By
                          default all the locales available is included. This
                          option is completely unrelated to --with-lang.

                          Affects also our character encoding conversion
                          tables for encodings mainly targeted for a
                          particular locale, like EUC-CN and EUC-TW for
                          zh, ISO-2022-JP for ja.

                          Affects also our add-on break iterator data for
                          some languages.

                          For the default, all locales, don't use this switch at all.
                          Specifying just the language part of a locale means all matching
                          locales will be included.

ということで --with-lang=ALL--with-locales="en es pt fr zh kr ja" で多国言語対応と,--with-package-format='deb' でDebian package 書き出し,それに依存して --enable-epm を付けてみました.

$ ./autogen.sh --with-package-format='deb' --enable-epm --with-lang=ALL --with-locales="en es pt fr zh kr ja"

そして make

今回は結果をTwitterに投稿するようにしてみました.

$ /bin/time -o /tmp/time -f "%E 位掛かりました" nice -n 19 make -j1 && echo "SAYAKAによる自動投稿: LibreOfficeのbuildが正常に 終わった みたいです.$(echo ;cat /tmp/time)" || echo "SAYAKAによる自動投稿: LibreOfficeのbuildが失敗したみたいです($?)$(echo ;cat /tmp/time)" | sayaka --post

しかし6時間46分程してから失敗><

SAYAKAによる自動投稿: LibreOfficeのbuildが失敗したみたいです(2)
Command exited with non-zero status 2
6:46:38 位掛かりました

logを見るとtranslationsのcloneをずっとやっていて回線が不安定になったかタイムアウトかそんな感じで途中でcloneに失敗して転けていました.

Cloning into '/home/matoken/src/core/translations'...
error: RPC failed; curl 56 GnuTLS recv error (-9): Error decoding the received TLS packet.

再度実行してみると正常終了しました.

SAYAKAによる自動投稿: LibreOfficeのbuildが正常に 終わったみたいです.
6:36:46 位掛かりました

起動してみると日本語も選べます :)

$ /instdir/program/soffice

libodevalpha0

せっかくbuildできたのでこのLibreOfficeDev 7.0.0.0.alpha0+ の Impress でスライドを作ってみました.60ページほどのスライドをざっと書いてみましたが特に問題なく普通にかけてしまい拍子抜けしてしまいました.

VPSサーバでもbuild

ローカルのDebian sid amd64環境ではうまく行ったけど回線やPCの問題で時間がかかります.VPSサーバでbuildしてからバイナリパッケージをダウンロードしたほうが早いのではと試してみました.
このサーバはドイツのニュルンベルクでホストされているContabo社のVPS300です.スペック(CPU 2Core/RAM 4GB/HDD 300GB)の割のとても安い(€3.99/月)けど回線が細い感じのサーバです.

OSはDebian 10(buster) amd64を導入してあります.依存関係が少し手間取りましたが後はスムーズに&手元のPCよりずっと速く終わりました.

必要なパッケージの導入
$ sudo apt build-dep libreoffice
$ sudo apt install libperl-dev libarchive-zip-perl javacc gperf python-dev bison flex ant doxygen ccache gstreamer1.0-libav libkrb5-dev nasm
sourceの入手
$ time git clone git://anongit.freedesktop.org/libreoffice/core
   :
real    35m26.954s
user    8m5.441s
sys     1m1.694s
autogen(--with-locales も`ALL` にしてみた)
$ time ./autogen.sh --with-package-format='deb' --enable-epm --with-lang=ALL --with-locales=ALL
make
$ time make -j$(nproc)
  :
real    137m3.246s
user    59m6.001s
sys     25m13.390s

その後も git pull && make とかして 7.0.0.0.alpha1+ にすることも出来ました.

buildしたDebianパッケージはいつまでかわからないけどここで公開しています.

てことでどうにかビルドできました.build後のsource ディレクトリ以下は20GB近く.build-depでも1GB以上消費しました.ディスクも結構食いますね.

相談しながら引っかかったら聞くという場があるのは助かりますね.今回の機会がなかったら自分でbuildしなかったと思います.

次回の「LibreOffice Hackfest Online #3」は05/13(Wed)に開催で以下のページから申し込みが出来ます.jitsi Meetでの開催で,YoutubeLiveでの配信も行われる予定です.

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

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")

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

Youtube-dlコマンドで字幕をダウンロードする

add 2020-06-12

以下の例では動画ファイルと字幕ファイルが別々に作成されます.動画に字幕ファイルを埋め込めないかなとオプションを確認したら --embed-subs というオプションがありました.これを利用したら1つの動画ファイルの中に字幕も埋め込めました :)

$ youtube-dl --help|grep -- --embed
    --embed-subs                     Embed subtitles in the video (only for mp4, webm and mkv videos)
    --embed-thumbnail                Embed thumbnail in the audio as cover art

ただし,Debian sid amd64環境では別途 atomicparsley パッケージも必要でした.

atomicparsley パッケージを入れる前のエラー
ERROR: AtomicParsley was not found. Please install.
atomicparsley パッケージの導入
$ sudo apt install atomicparsley
480pでダウンロードして日本語機械翻訳字幕を埋め込み
$ youtube-dl --write-auto-sub --sub-lang=ja --embed-subs -c -f 133 -o './%(title)s.%(ext)s' 'https://www.youtube.com/playlist?list=PLYUtdmpYPTTKgmkaIUFDiNvYPxQUzuY8y'
以下のあたりでも書いたのですが,回線が不安定で途中で止まったり解像度が低かったりするのでVODをローカルにダウンロードしてから視聴することが多いです.

日本語の動画の場合はこれで問題ないのですが, id:naruoga/@naru0gaさんがLibreOffice Asia Conference 2019 Tokyo 基調講演の動画に日本語字幕を付けてくれました.OSSが興味ある人なら気になる感じの内容のようなので視聴したいけど字幕ダウンロードしたこと無いなと試してみました.

導入していない人はインストールしましょう.バイナリを1つダウンロードして実行権を付けるだけです.以下は ~/bin に導入する例.

$ curl -L https://yt-dl.org/downloads/latest/youtube-dl -o ~/bin/youtube-dl
$ chmod +rx ~/bin/youtube-dl

先ずはhelpを確認します.

$ youtube-dl --help|grep 'Subtitle Options:' -A7
  Subtitle Options:
    --write-sub                      Write subtitle file
    --write-auto-sub                 Write automatically generated subtitle file (YouTube only)
    --all-subs                       Download all the available subtitles of the video
    --list-subs                      List all available subtitles for the video
    --sub-format FORMAT              Subtitle format, accepts formats preference, for example: "srt" or "ass/srt/best"
    --sub-lang LANGS                 Languages of the subtitles to download (optional) separated by commas, use --list-subs for available
                                     language tags

結構シンプルな感じですね.早速試してみます.

先ずは --list-subs で字幕の一覧を取得してみます.

$ youtube-dl --ignore-config --list-subs QS-Zz-2ovo0
[youtube] QS-Zz-2ovo0: Downloading webpage
[youtube] QS-Zz-2ovo0: Looking for automatic captions
[youtube] QS-Zz-2ovo0: Downloading MPD manifest
Available automatic captions for QS-Zz-2ovo0:
Language formats
gu       vtt, ttml, srv3, srv2, srv1
zh-Hans  vtt, ttml, srv3, srv2, srv1
zh-Hant  vtt, ttml, srv3, srv2, srv1
gd       vtt, ttml, srv3, srv2, srv1
ga       vtt, ttml, srv3, srv2, srv1
gl       vtt, ttml, srv3, srv2, srv1
lb       vtt, ttml, srv3, srv2, srv1
la       vtt, ttml, srv3, srv2, srv1
lo       vtt, ttml, srv3, srv2, srv1
tt       vtt, ttml, srv3, srv2, srv1
tr       vtt, ttml, srv3, srv2, srv1
lv       vtt, ttml, srv3, srv2, srv1
lt       vtt, ttml, srv3, srv2, srv1
tk       vtt, ttml, srv3, srv2, srv1
th       vtt, ttml, srv3, srv2, srv1
tg       vtt, ttml, srv3, srv2, srv1
te       vtt, ttml, srv3, srv2, srv1
fil      vtt, ttml, srv3, srv2, srv1
haw      vtt, ttml, srv3, srv2, srv1
yi       vtt, ttml, srv3, srv2, srv1
ceb      vtt, ttml, srv3, srv2, srv1
yo       vtt, ttml, srv3, srv2, srv1
de       vtt, ttml, srv3, srv2, srv1
da       vtt, ttml, srv3, srv2, srv1
el       vtt, ttml, srv3, srv2, srv1
eo       vtt, ttml, srv3, srv2, srv1
en       vtt, ttml, srv3, srv2, srv1
eu       vtt, ttml, srv3, srv2, srv1
et       vtt, ttml, srv3, srv2, srv1
es       vtt, ttml, srv3, srv2, srv1
ru       vtt, ttml, srv3, srv2, srv1
rw       vtt, ttml, srv3, srv2, srv1
ro       vtt, ttml, srv3, srv2, srv1
bn       vtt, ttml, srv3, srv2, srv1
be       vtt, ttml, srv3, srv2, srv1
bg       vtt, ttml, srv3, srv2, srv1
uk       vtt, ttml, srv3, srv2, srv1
jv       vtt, ttml, srv3, srv2, srv1
bs       vtt, ttml, srv3, srv2, srv1
ja       vtt, ttml, srv3, srv2, srv1
or       vtt, ttml, srv3, srv2, srv1
xh       vtt, ttml, srv3, srv2, srv1
co       vtt, ttml, srv3, srv2, srv1
ca       vtt, ttml, srv3, srv2, srv1
cy       vtt, ttml, srv3, srv2, srv1
cs       vtt, ttml, srv3, srv2, srv1
ps       vtt, ttml, srv3, srv2, srv1
pt       vtt, ttml, srv3, srv2, srv1
pa       vtt, ttml, srv3, srv2, srv1
vi       vtt, ttml, srv3, srv2, srv1
pl       vtt, ttml, srv3, srv2, srv1
hy       vtt, ttml, srv3, srv2, srv1
hr       vtt, ttml, srv3, srv2, srv1
ht       vtt, ttml, srv3, srv2, srv1
hu       vtt, ttml, srv3, srv2, srv1
hmn      vtt, ttml, srv3, srv2, srv1
hi       vtt, ttml, srv3, srv2, srv1
ha       vtt, ttml, srv3, srv2, srv1
mg       vtt, ttml, srv3, srv2, srv1
uz       vtt, ttml, srv3, srv2, srv1
ml       vtt, ttml, srv3, srv2, srv1
mn       vtt, ttml, srv3, srv2, srv1
mi       vtt, ttml, srv3, srv2, srv1
mk       vtt, ttml, srv3, srv2, srv1
ur       vtt, ttml, srv3, srv2, srv1
mt       vtt, ttml, srv3, srv2, srv1
ms       vtt, ttml, srv3, srv2, srv1
mr       vtt, ttml, srv3, srv2, srv1
ug       vtt, ttml, srv3, srv2, srv1
ta       vtt, ttml, srv3, srv2, srv1
my       vtt, ttml, srv3, srv2, srv1
af       vtt, ttml, srv3, srv2, srv1
sw       vtt, ttml, srv3, srv2, srv1
is       vtt, ttml, srv3, srv2, srv1
am       vtt, ttml, srv3, srv2, srv1
it       vtt, ttml, srv3, srv2, srv1
iw       vtt, ttml, srv3, srv2, srv1
sv       vtt, ttml, srv3, srv2, srv1
ar       vtt, ttml, srv3, srv2, srv1
su       vtt, ttml, srv3, srv2, srv1
zu       vtt, ttml, srv3, srv2, srv1
az       vtt, ttml, srv3, srv2, srv1
id       vtt, ttml, srv3, srv2, srv1
ig       vtt, ttml, srv3, srv2, srv1
nl       vtt, ttml, srv3, srv2, srv1
no       vtt, ttml, srv3, srv2, srv1
ne       vtt, ttml, srv3, srv2, srv1
ny       vtt, ttml, srv3, srv2, srv1
fr       vtt, ttml, srv3, srv2, srv1
ku       vtt, ttml, srv3, srv2, srv1
fy       vtt, ttml, srv3, srv2, srv1
fa       vtt, ttml, srv3, srv2, srv1
fi       vtt, ttml, srv3, srv2, srv1
ka       vtt, ttml, srv3, srv2, srv1
kk       vtt, ttml, srv3, srv2, srv1
sr       vtt, ttml, srv3, srv2, srv1
sq       vtt, ttml, srv3, srv2, srv1
ko       vtt, ttml, srv3, srv2, srv1
kn       vtt, ttml, srv3, srv2, srv1
km       vtt, ttml, srv3, srv2, srv1
st       vtt, ttml, srv3, srv2, srv1
sk       vtt, ttml, srv3, srv2, srv1
si       vtt, ttml, srv3, srv2, srv1
so       vtt, ttml, srv3, srv2, srv1
sn       vtt, ttml, srv3, srv2, srv1
sm       vtt, ttml, srv3, srv2, srv1
sl       vtt, ttml, srv3, srv2, srv1
ky       vtt, ttml, srv3, srv2, srv1
sd       vtt, ttml, srv3, srv2, srv1
Available subtitles for QS-Zz-2ovo0:
Language formats
en       vtt, ttml, srv3, srv2, srv1
ja       vtt, ttml, srv3, srv2, srv1

大量に出てきましたが,上の方の Available automatic captions の物はYoutubeの自動生成&自動翻訳されたもののようです.
Available subtitles 以下のものが人の手で翻訳されたものだと思います.今回の動画では en, ja があるようです.

--write-sub --sub-lang=ja で日本語の字幕を書き出すよう指定してみます.

$ youtube-dl --ignore-config --write-sub --sub-lang=ja QS-Zz-2ovo0

動画名.mp4動画名.ja.vtt というファイルが入手できました.動画名.言語.vtt というファイルが字幕ファイルのようです.この2ファイルが同じディレクトリにある状態で動画プレイヤーで .mp4 を再生すると字幕が表示されました :)

Totemでは表示されませんでしたが,メニューから字幕ファイルを指定すると表示されました.

$ ls LibreOffice\ Asia\ Conference\ 2019\ -\ LibreOffice\,\ the\ many\ different\ faces\ of\ a\ global\ community.*
'LibreOffice Asia Conference 2019 - LibreOffice, the many different faces of a global community.ja.vtt'
'LibreOffice Asia Conference 2019 - LibreOffice, the many different faces of a global community.mp4'
$ mpv ./LibreOffice\ Asia\ Conference\ 2019\ -\ LibreOffice\,\ the\ many\ different\ faces\ of\ a\ global\ community.mp4
$ cvlc ./LibreOffice\ Asia\ Conference\ 2019\ -\ LibreOffice\,\ the\ many\ different\ faces\ of\ a\ global\ community.mp4

youtu dl subtitle

これでとりあえず目的は果たせました.
でもYoutubeでのみですが,自動生成翻訳字幕のダウンロードが気になるのでこれも試してみます.
今度は日本語字幕の存在しないDebconf19のもので日本語の自動生成字幕 --sub-lang=ja --write-auto-sub オプション&解像度を240pにしておきます.

$ youtube-dl --sub-lang=ja --write-auto-sub -f 'bestvideo[height<=240]+bestaudio/best[height<=360]' U17DID4vdpc

自動生成&機械翻訳なのでおかしなところはありますがいけたようです.

youtube dl subtitle auto

後はライブ動画やライブ音声のリアルタイム翻訳ができるといいなーと思ったりも.DeepSpeechで文字起こししてみんなの翻訳とかDeeplに都賀具感じでリアルタイムで出来ないかなとか.

環境
$ youtube-dl --version
2020.05.03
$ dpkg-query -W mpv vlc totem firejail
firejail        0.9.62-3
mpv     0.32.0-1
totem   3.34.1-2+b1
vlc     3.0.10-1

9

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のウェブアプリでは利用できそうです.