ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2025年7月19日土曜日

Ubuntu 24.04 の gnome-text-editor

Ubuntu 24.04、リリースからだいぶ経った。
使っている人も増えているだろう。

私もVirtualBoxで試している。
gnome-text-editorで日本語入力をしていると、プリエディットに文字が残り、二重に入力されてしまう問題があった。

ネットで解決方法を探してみると、gnome-text-editor の代わりにgeditを使うとか、ibusの代わりにfcitxを使う方法が示されている。
過去のこの記事に書いているが、gnome-text-editorにはスペルチェック機能がある(geditには無い)。
また、数年前、Ubuntuはibusを日本語入力のデフォルトとするという話があったので、fcitxを使うのも躊躇する。

色々調べていくと、ibusのバージョン1.5.30で解決しているらしい。
ということで、1.5.30がリリースされるまでゆっくり待とう。めでたしめでたし。

と言われても、待てない人もいるだろう。
そういう人は、ソースからビルドしよう。
ソースパッケージをダウンロードすると解るのだが、ibusパッケージはgitで開発が進められており、新しいバージョンのソースをそこから入手できる。
https://salsa.debian.org/debian/ibus.gitをgit clone して、ソースを得る。
各バージョンにtagが付けられている。具体的なタグの名前を知るために、"git tag --list '*1.5.30*'"で確認する。
$ git clone https://salsa.debian.org/debian/ibus.git

$ cd ibus

$ git tag --list '*1.5.30*'
debian/1.5.30-1
upstream/1.5.30
UbuntuはDibian系なので"debian/1.5.30-1"が良さそうだ。
これを直接checkoutするのではなく、ブランチを作ってそのブランチで作業しよう。
$ git switch -c xxx

$ git reset --hard debian/1.5.30-1
これで、ブランチxxxが 'debian/1.5.30-1'が指しているところに移動する。

後は、ソースパッケージからバイナリパッケージをビルドするようにビルドする。
$ sudo apt build-dep ibus

$ dpkg-buildpackage -us -uc -b
正常に完了したら上位ディレクトリにバイナリパッケージができている。
それらをインストールする。
$ cd ..

$ sudo dpkg -i *.deb

インストールできたら、再起動する。
これでプリエディット残存問題は解決するだろう。

しかし、本来は待つべきなのだ。
自分でビルドするなら、自己責任で。

しばらくぶりに新しい記事を書いた。

2024年9月6日金曜日

NUCLEO の USB Storage 問題

STMicroelectronicsのNUCLEOボードを試作(または趣味)で使う。
開発環境は、Cross-gcc +Eclipse +OpenOCD で用意している。

NUCLEOボードは、ST-LinkというデバッグI/Fがあり便利だ。
しかし、JTAG I/Fのみならず、USB Storageデバイスが接続されたようになる。
害がないならそれも良いのだが、Linuxでは問題になる。

OpenOCD User's guide の USB ST-LINK based に/etc/modprobe.confを書き換えることが書いてある。この文書は少し古い。
最近のUbuntuなら、/etc/modprobe.dの下にそれぞれの設定ファイルを置く。
私は /etc/modprobe.d/stlink.conf を以下の内容で作った。
# Prevent ST-LINK from showing up as a USB disk
options usb-storage quirks=483:3744:i,483:374b:i,483:374e:i
これで、ST-Linkを接続しても、自動マウントされなくなる。

解決したと思っていたが、職場のPCではおかしなことになった。
上記、/etc/modprobe.d/stlink.conf を用意しても効かない。

起動時、initrdの段階で、usb-storage.ko が読まれているのでは?と、思った。

この設定は、モジュールロード時のパラメータだ。
initrdの段階では、/etc/modprobe.d/の設定は読めない。VAIO-C1で遊んでいるときに経験していた。
職場のPCにはUSBカードリーダが常時接続されている。
bootシーケンスのinitrdの段階でそれを検出すると、usb-storage.koがロードされる。
その時点では/etc/modprobe.d/の設定はアクセスできないので、結果的にパラメータなしでロードされる。

ルートファイルシステムマウント後(/etc/modprobe.dがアクセス可能になる)、ST-Linkを挿しても、すでにusb-storage.koが読み込まれているので、再ロードは行われない。
そのため、/etc/modprobe.d/stlink.conf が、無視されたように見える。
rmmodで、アンロード(uasを先にアンロード)してNUCLEOを挿すと、再ロードが行われる。
このとき、/etc/modprobe.d/stlink.conf が適用されるため、ST-LinkのUSB Storageがマウントされない。

わざわざrmmodするのは面倒だ。
何もせずとも、ST-Link の USB Storage はマウントしないでほしい。
initrdでのモジュールのパラメータを調整するには、VAIO-C1のときのように、/etc/initramfs-tools/modules を書き換える。以下のようになる。
# List of modules that you want to include in your initramfs.
# They will be loaded at boot time in the order below.
#
# Syntax:  module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod
usb-storage quirks=483:3744:i,483:374b:i,483:374e:i
最後の行が追加したもの。
コメントを読めばわかるが、書き換え後initrdを作り直す必要があり、update-initramfs を実行しなければならない。以下のように:
$ sudo update-initramfs -u
[sudo] <ユーザ名> のパスワード: 
パスワードを入力すれば、initrdが更新される。

これをやれば、/etc/modprobe.d/stlink.confが不要というわけではない。
起動時にUSBメモリやUSBカードリーダが接続されていない場合は、initrd内でusb-storage.koは読み込まれない。
Linuxの起動が完了した後は、/etc/modprobe.d/stlink.confが必要になるので、両方用意しておく必要がある。

最初にSTM32を使ったのは、雑誌(CQ出版 Design Wave 2008年5月号)の付録のSTM32F103VBだった。
(さっき発掘してきた)

開発環境は、cross-gcc + eclipse + OLIMEXのJTAG(千石で購入) で揃えた。

最初に開発環境を自力で揃えてしまったので、未だにSTM-STUDIOを使わない(Cubeは利用するけど)。
もしかしたら、STM-STUDIOを使っている場合はこんな問題に遭遇しないのかもしれない。

最近ではarm-none-eabi用のgccを自分でビルドしなくても良くなり、OpenOCDもUbuntuのもので十分だ。
多少楽になったが、それでも自前で揃えるには何気に大変だ。
バカバカしいかもしれないけど、何かを開発するのは苦労の連続だ。
苦労と考えず、楽しむつもりでやるのが「馬鹿の道」。ついでに、問題解決力が鍛えられる。

2024年7月26日金曜日

Google drive で git repositories

6月の頭にノートPCを入れ替えたので、前のPCで使っていたものが色々無くなっていた。
その一つがGoogleドライブ上にgitリポジトリを作って、そこにpush/pullする事だ。

Googleドライブは、Ubuntuからもnautilusやnemoで簡単にアクセスできるが、コマンドラインから普通にアクセスするには少し難しい。
普通にアクセスするには、rcloneを使う。
そこまでは覚えていたのだが、細かいことはすっかり忘れてしまった。
もう一度やり直して、メモとしてブログに書いておく。

rcloneはUbuntuのパッケージもあるが、rcloneのホームページから.deb形式もダウンロードできるので、最新のものをダウンロードして使っている。
セットアップはややこしいが、ネットで検索すれば色々出てくる。
このブログでは説明しないので、そちらを参照してほしい。

gitリポジトリを置いてpush/pullできるようにするには、mountする。

mountしてgitリポジトリとして使うには、キャッシュ機能を使う必要がある。
キャッシュOFFだと読み書き同時アクセスができないためだ。
--vfs-cache-mode writes 以上でマウントする。

キャッシュするということは、write backするまでの時間が気になる。
その時間の設定は、--vfs-write-back で行う。
デフォルトは5秒なので、そのままで使う。
改めて設定しても良い。

write back後、ローカルから捨ててもいい。それを捨てるタイミングが次に気になる。
その設定は、--vfs-cache-max-age で行う。
デフォルトは1hなので、3mぐらいに短縮する。

というわけで、コマンドラインはこんな感じになる。
rclone mount <remote>:<path> <マウントポイント> \
	--vfs-write-back 5 \
	--vfs-cache-max-age 3m \
	--vfs-cache-mode writes &
これでマウントできる。

アンマウントするには
fusermount -u <マウントポイント>

注意しなければいけないことがある。

気になるのはタイミングだ。
gitのremoteは、pushとpullで別々に指定できるが、書き込みしたら即時読み取りに変化が現れなければならない事になっていたと記憶している。
(何で読んだか忘れたし、詳細不明)
cacheを使ってもローカルではそれが達成できるが、リモート(Googleドライブ)側ではラグが生じることになる。
そのため複数人で、Googleドライブ上のgitリポジトリを使うのは危険かもしれない。

一人で使うなら、衝突するわけがないので問題ないだろう。

2024年1月12日金曜日

VirtualBox 7.0 on Ubuntu 22.04 + Linux 6.5.0

いつものようにVirtualBoxをUbuntu22.04上で動かそうとしたら動作しない。
コマンドラインから起動しようとすると以下のようなメッセージが表示される。
$ WARNING: The vboxdrv kernel module is not loaded. Either there is no module
         available for the current kernel (6.5.0-14-generic) or it failed to
         load. Please recompile the kernel module and install it by

           sudo /sbin/vboxconfig

         You will not be able to start VMs until this problem is fixed.
カーネルモジュールがロードできないようだ。
そういえば、先日カーネルの更新があった。それが関連しているのかな?
"sudo /sbin/vboxconfig"で、カーネルモジュールを再コンパイルしてインストールせよと書いてあるのでやってみたら、
$ sudo /sbin/vboxconfig 
[sudo] shin のパスワード: 
vboxdrv.sh: Stopping VirtualBox services.
depmod: WARNING: could not open modules.order at /lib/modules/6.2.0-37-generic: No such file or directory
depmod: WARNING: could not open modules.builtin at /lib/modules/6.2.0-37-generic: No such file or directory
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: Look at /var/log/vbox-setup.log to find out what went wrong.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.  If your system is using EFI Secure Boot you may need to sign the
kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load
them. Please see your Linux system's documentation for more information.
失敗した。
何が間違っているかを見つけるために、"/var/log/vbox-setup.log"を参照せよとある。
見てみると、
$ cat /var/log/vbox-setup.log
Building the main VirtualBox module.
Error building the module:
make V=1 CONFIG_MODULE_SIG= CONFIG_MODULE_SIG_ALL= -C /lib/modules/6.5.0-14-generic/build M=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -j8 modules
make[1]: 警告: 副次 make で -j8 を強制指定しました: jobserver モードをリセットします.
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
  You are using:           
make -f ./scripts/Makefile.build obj=/tmp/vbox.0 need-builtin=1 need-modorder=1 
# cmd_mod /tmp/vbox.0/vboxdrv.mod
  printf '%s
'   linux/SUPDrv-linux.o SUPDrv.o SUPDrvGip.o SUPDrvSem.o SUPDrvTracer.o SUPLibAll.o common/string/strformatrt.o combined-agnostic1.o combined-agnostic2.o combined-os-specific.o | awk '!x[$0]++ { print("/tmp/vbox.0/"$0) }' > /tmp/vbox.0/vboxdrv.mod
# CC [M]  /tmp/vbox.0/linux/SUPDrv-linux.o
  gcc-12 -Wp,-MMD,/tmp/vbox.0/linux/.SUPDrv-linux.o.d -nostdinc -I./arch/x86/include -I./arch/x86/include/generated  -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h -I./ubuntu/include -include ./include/linux/compiler_types.h -D__KERNEL__ -std=gnu11 -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -Wall -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -m64 -mno-80387 -mtune=generic -mno-red-zone -mcmodel=kernel -Wno-sign-compare -fno-asynchronous-unwind-tables -mfunction-return=thunk-extern -fno-jump-tables -mharden-sls=all -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -Wframe-larger-than=1024 -fstack-protector-strong -Wno-main -fno-omit-frame-pointer -fno-optimize-sibling-calls -ftrivial-auto-var-init=zero -fzero-call-used-regs=used-gpr -pg -mrecord-mcount -falign-functions=16 -Wvla -Wno-pointer-sign -Wno-maybe-uninitialized -Wno-array-bounds -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -g -gdwarf-5 -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -fno-omit-frame-pointer -fno-pie -Wno-declaration-after-statement -I./include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -D__KERNEL__ -DMODULE -DRT_WITHOUT_PRAGMA_ONCE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DSUPDRV_WITH_RELEASE_LOGGER -DVBOX_WITHOUT_EFLAGS_AC_SET_IN_VBOXDRV -DIPRT_WITHOUT_EFLAGS_AC_PRESERVING -DVBOX_WITH_64_BITS_GUESTS -DCONFIG_VBOXDRV_AS_MISC -DRT_ARCH_AMD64  -fsanitize=bounds-strict -fsanitize=shift -fsanitize=bool -fsanitize=enum  -DMODULE  -DKBUILD_BASENAME='"SUPDrv_linux"' -DKBUILD_MODNAME='"vboxdrv"' -D__KBUILD_MODNAME=kmod_vboxdrv -c -o /tmp/vbox.0/linux/SUPDrv-linux.o /tmp/vbox.0/linux/SUPDrv-linux.c   ; ./tools/objtool/objtool --hacks=jump_label --hacks=noinstr --hacks=skylake --retpoline --rethunk --sls --stackval --static-call --uaccess --prefix=16   --module /tmp/vbox.0/linux/SUPDrv-linux.o
/bin/sh: 1: gcc-12: not found
make[2]: *** [scripts/Makefile.build:251: /tmp/vbox.0/linux/SUPDrv-linux.o] エラー 127
make[2]: *** 未完了のジョブを待っています....
make[1]: *** [Makefile:2037: /tmp/vbox.0] エラー 2
make: *** [/tmp/vbox.0/Makefile-footer.gmk:133: vboxdrv] エラー 2
ビルドのために、gcc-12を呼び出している。
かなり新しいgccだ。

自分のUbuntu環境には、gcc-11は入っているが、gcc-12は入っていなかった。
Retpolineなどはコンパイラで対応するので、新しいコンパイラが推薦されているのかもしれない。
gcc-12系も、gcc-12.3まで進んでおり、そろそろ安定しているだろう。
"apt-cache search gcc-12"で探すと、Ubuntu 22.04用パッケージもある。
無理にgcc-11でビルドするのではなく、gcc-12を使うことにした。

以下のようにしてインストールした。
$ sudo apt-get install --install-suggests gcc-12
--install-suggestsは、「提案パッケージ」のインストールを要求するものだ。
不要かもしれないが、ロケールパッケージなども入るので指定しておいた。

これで、vboxconfigを実行すると、
$ sudo /sbin/vboxconfig 
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
$
再コンパイルとインストールに成功。
VirtualBox を起動できるようになった。

2023年5月21日日曜日

プレビューはできないのだ

先日、ブログにUbuntu22.04への入れ替えの記事を書くとき、画像を1つ間違えていた。

画像を添付する際のファイルオープンダイアログで、Ubuntu22.04では何故か画像データのプレビューが表示されない。
そのため、ファイル名で選んだのだが、ウインドウのスクリーンショットの画像ファイルであり、似たような名前(タイムスタンプだけが違う)だったので、選択を間違えていたのだ。

ファイル選択の際に、プレビューで確認できればすぐにミスに気づくだろう。
Ubuntu 18.04ではプレビュー表示できていたのだから、なにか設定が必要かな?と調べ始めた。

これとかこれを見ると、GTK4ではだめっぽい。
少なくとも現時点では。

残念。
Dolphinファイルマネージャに置き換えれば良いらしいが、nemoでできるようにならないかな…。

2023年5月4日木曜日

Ubuntu22.04へ#2

先日、Ubuntu 22.04 への移行について書いた。
GUIアプリを書く場合、GTK+(最近では末尾に'+'を付けないようだ)を使っている。
例えば、このcairo_arc_to()とか。
上記を実装した頃はGTK+2を使っていたが、Ubuntu18.04へ移行ついでに、作りためていたアプリをGTK+3へ移行していた。

開発環境の整理をしているとき、libgtk-3-devパッケージをinstallしようとしたら、依存関係の問題で入らない。
そんなはずはないはず。
ネットで調べてみても、そんなことを書いているページはなく、むしろ「最初から入っている」的なことが書かれている。

考えてみるとDVDからのUbuntu22.04の Install時に妙に時間がかかっていた。
見えないところで、エラーが生じていてリカバリ処理などで時間がかかっていたのかもしれない。
なんとかInstall作業は終り、起動したが、不完全だったのかもしれない。

再インストールすることにした。
DVDで失敗したので、USBメモリを使う。
最初にUSBでやろうとしたのに、起動しなかったのでDVDで行ったのだ。
元の木阿弥のようだが、考えてみると、このFolio13の USB3.0 ポートは調子が悪い
Installの速さを期待して、USB3.0のメモリを使っていたが、それが良くなかったかもしれない。
今度はUSBなので、オフィシャルの4.9GBのUbuntu 22.04.2 LTSのイメージを使った。
USBメモリを USB2.0ポートに挿入して起動したら、Installerの起動に成功した。
再インストールも数分で終わった。

Install後に確認すると、libgtk-3-devもバッチリ入っている。
build-essentialパッケージ等もinstallして、自家製アプリをビルドしてみた。
正常にビルドできた。これでよし。

何故かRabbitVCSがまともに動作しない。
VirtualBox内ではバッチリ動いていたのに。 gnome-session-flashback + nemoなので、UbuntuオフィシャルのRabbitVCSパッケージはない。
とにかく、こういうときは自力で解決しなければならない。

githubのrabbitvcsをインストールする前に、以下の依存物をinstallする。
git
ipython3
meld
nemo-python
python3-configobj
python3-dulwich
python3-nautilus
python3-setuptools
python3-simplejson
python3-svn
subversion
上記が依存するものも入るので、結構な量になるよ。
githubから、rabbitvcsをcloneする。
$ git clone https://github.com/rabbitvcs/rabbitvcs.git
ここまではいいだろう。

これのmasterブランチのHEADで、setup.pyしても全然動かない。
VirtualBoxでは動いていたのだから、古いバージョンをinstallすることで解決するのかもしれない。
VirtualBox上にUbuntu22.04をインストールした時期は、去年の8月。
"git log"を確認すると、
| |       
| |       Add missing cursor-changed callback for git revisions_table
| | 
| * commit 44c9ac79359d87eaae34047ab4a339557205bb61
|/  Author: Philipp Unger <philipp.unger.1988@gmail.com>
|   Date:   Sun Oct 2 16:41:24 2022 +0200
|   
|       Add missing cursor-changed callback for git revisions_table
| 
* commit a9b4922d1fb126184f6def7bf8c95084c9b8655a
| Author: notapirate <notapirate@users.noreply.github.com>
| Date:   Sun Aug 14 15:43:54 2022 +0200
| 
|     caja, nautilus, nemo, thunar clients: move __future__ import to the top (#357)
| 
* commit b88b384ebd78188dac21e9c063e036c866a119cf
| Author: Daniel O'Connor <daniel.oconnor@gmail.com>
| Date:   Sun Jun 26 19:05:57 2022 +0930
| 
|     Update main.yml
| 
"commit a9b4922d1fb126184f6def7bf8c95084c9b8655a"が8月に行われている。
1行表示で見ると、いろいろな変更が行われている。しかも入り組んでいる。なんかありそうだ。
* 3c8db72 (HEAD -> master, origin/master, origin/HEAD) add additional file info to property page
* d6b8011 fix nautilus property page
* ab30da8 move irrelevant code from contextmenu(items)4
*   51cd7a3 Merge pull request #372 from rabbitvcs/git-pull-push-local-branches-only
|\  
| * 94da987 (origin/git-pull-push-local-branches-only) show local branches only in push, pull dialog and select matching upstream by default
* |   09a8bb2 Merge pull request #363 from monnerat/setuptools
|\ \  
| |/  
|/|   
| * 76825dd setup: use setuptools
* | c34d29d add .vscode to .gitignore
* | e62b022 use actual git diff in GitRevert
* |   c424618 Merge pull request #361 from philippun1/nautilus43
|\ \  
| * | 0d54100 uncomment property page again
| * | 5b1396d removed icon factory code
| * | 2ce61e4 fixes for nautilus 43
| |/  
* |   a46efec Merge pull request #362 from philippun1/git-log-cursor-changed-callback-missing
|\ \  
| |/  
|/|   
| * 44c9ac7 Add missing cursor-changed callback for git revisions_table
|/  
* a9b4922 caja, nautilus, nemo, thunar clients: move __future__ import to the top (#357)
* b88b384 Update main.yml
厳密に8月のいつにinstallしたのか覚えていないので、まずはその前、6月コミットの"b88b384"をcheckoutして、setup.pyをする。
(setup.pyの実行は、このページを参照)
次に8月の"a9b4922"をcheckoutして...な感じで、コミットを追いかけならが順番にsetup.pyをやっていく。
checkoutで首チョンパ状態になるが、いちいち気にする必要はない。
最終的には"origin/HEAD"まで進めるのだから。

何が悪かったのか?何故良くなるのか?は解らない。
しかし、このやっつけ操作で動くようになった。

普通の開発環境は整ってきた。

マイコンが好きなので、クロス開発環境を用意しなければならない。
最近では、ARMのクロス開発環境は簡単に入手できるようになった。
MSP430もTIから入手できて、楽だ。
SuperHのクロス開発環境は今でも自分でビルドしないといけない。
これが大変だ。ついでなので新しいbinutilsやgccを試すかな。

2023年4月29日土曜日

Ubuntu22.04へ

この3万円ちょいで買ったPCを未だに使っている。
Ubuntu18.04をインストールして使っていたが、LTSの期間も終わった。
個人使用なのでUbuntu Proの延長サポートを使うこともできる。
しかし、Ubuntu1804では、ShotCutが動かないし、Gimpの縦書きもない
だんだんと無理が出てきている。
そろそろ潮時だ。新しいUbuntuに入れ替えることにした。

LTS(長期サポート)版の最新、すなわち22.04(2022年04月版)にする。
18.04=(2018年04月版)から4年が経過している。
技術的にも色々変わっており、移行は一筋縄では行かないだろうことは、想像に難くない。

倍容量の新しい mSATA SSD に入れ替え、今まで使っていたSSDをまるまる保存することにした。
mSATA-USB I/Fを用意すれば、データの移行もできる。

インストール用のDVDイメージをダウンロードして、「ブータブルUSBの作成」機能でインストールイメージのブータブルUSBを作成した。
起動を試みたが、なぜか起動しない。
一応、UEFIなのだが切り替わって間もない時期のPCなので、現在の技術との互換性が低いのかもしれない。
結局またDVDにイメージを焼こうとした。今度は容量が足りない。
なんと、Ubuntu22.04.2のイメージは、4.9GBもある。
うちのDVDは4.7GBなので、入りきらない。
USBでもだめ。DVDもだめ。どうしたものか…
ダウンロードフォルダを見ていると、Ubuntu22.04日本語Rimixのイメージがあった。
VirtualBoxで試しに使っていたときのやつだ。
そのサイズは4.3GBだった。
これならDVDに焼ける。

DVDを焼いて、起動を試みる。
DVDでの起動は30分ぐらいかかった。起動することを確認してから、SSDの入れ替えを行った。
SSD入れ替え後に、BIOSが正しく認識することを確認して、ついでにBIOSにあったHDDテスト機能でテストした。
インストールDVDで起動に30分、インストールに25分。
インストール後に、aptでパッケージの更新をする。
なんだかんだで作業を初めて数時間かかった。

VirtualBoxで試していたので、ここから先は簡単だろうと思っていたけど、色々引っかかった。

まずRabbitVCS。
これが全然動かない。そもそも Gnome-session-flashback + nemo という主流ではない環境を使っているのが悪いのだが。
nemoをコマンドラインから起動して、エラーメッセージを確認する。
configspec.iniがないのが悪いようだった。
無いのかといえば、”/usr/lib/python3/dist-packages/rabbitvcs-0.18-py3.10.egg/share/rabbitvcs/configspec.ini”にインストールされている。
どこを期待しているのだろう?
Ubuntu2204には、nemo用のRabbitVCSが無いので、RabbitVCS本家のgitのものを使っている。
しかし、Ubuntu2204には Nautilus用のRabbitVCSパッケージは存在し、rabbitvcs-coreパッケージもある。
これらパッケージがconfigspec.iniをどこに保存しているか見てみた。
"/usr/share/rabbitvcs/configspec.ini"となっていた。
そこに”/usr/lib/python3/dist-packages/rabbitvcs-0.18-py3.10.egg/share/rabbitvcs/configspec.ini”へのシンボリックリンクを配置したら、一応動くようになった。
(他にも色々やったんだけど、細かいことは忘れてしまった)

sshで母艦への接続を確認しているときに、PulseAudioのPreferencesアプリの"Network Server"タブ内がすべてグレーアウトして操作できない。
そもそも、paprefsはデフォルトでは入っていないので、"apt-get install paprefs"でインストールする。
ネットで調べると、DLLへのパスがpaprefsが期待している場所ではないらしい。
strace paprefs 2>&1 |grep /lib/pulse
で見ると、"/usr/lib/pulse-15.99/"以下を参照しているが、そんなディレクトリはない。
代りに"pulse-15.99.1+dfsg1/"以下に色々入っている。
ということで、これもシンボリックリンクを作る。
そうするとpaprefsが動作する。
自家製シンセサイザとか作るんなら、リモートの音もならないと面白くない。
ここは、こだわりたい部分だ。

例のプリンタ+スキャナ複合機のドライバも入れ直し。
プリンタドライバは、以前と同様の方法で入った。
スキャナのAll in Oneも簡単に入ったが、機械のアドレスを設定する方法が変更になった。
以前は”/etc/imagescan/imagescan.conf”を書き換えていたのだが、そのファイルが無い。
ダウンロードページの”epsonscan2_j.pdf”内の「8.1. ネットワーク接続デバイス」のあたりを読むと、初回起動時にアドレスを設定するらしい。
起動すると、以下のような小さなダイアログボックス的なウインドウが表示される。
この真ん中のドロップダウンを何回かクリックすると、「ネットワークスキャナの追加」ダイアログが表示される。
ここで、アドレスの欄にプリンタのIPアドレスを設定する。
うちはルータで固定IPを割り当てており、/etc/hostsで"ewm752t"の名前で参照できるようにしているので上記のようになる。
設定後、「追加」ボタンを押して、「OK」ボタンをクリックすると、スキャナアプリEPSON SCAN2が起動する。
以前はImageScan2という普通すぎる名前で、しばらく使わないとこれはEPSONのだっけ?って感じでわからなくなっていた。
わかりやすい名前になってよかった。
しかし、U/Iが全然違う。
使い方が変わったので少し困惑したが、新しいU/Iのほうが機能的で使いやすい。
また以前の設定を覚えておいてくれるので助かる。

入れ替えは、とにかく手間がかかる。
何かをやろうとすると、問題にぶち当たる。
もうしばらくかかりそうだ。
2023/05/20 プリンタのIPアドレス設定の画像を間違えていた。入れ替えた。

2023年3月26日日曜日

医療用の画像データ

年末に録画していたヒューマニエンスの「退化」を見ていたら、足の小指の数が2つの人と、3つの人がいるという話をしていた。
より進化して(必要ないので退化して)、2つの骨の人がいるらしい。
自分はどっちだろう?
手でつまんでグリグリ動かしてみたけど、足の小指は短いので、解りにくい。

そういえば、数年前に足のMR画像を撮影してCD-ROMをもらっていたことを思い出した。
CD-ROM自体はどこにしまったかわからないが、NASのBackupが見つかった。

Ubuntuでiso9660イメージをマウントして見たら、ファイルが見えた。
$ ls dvd
autorun.inf  dicom  dicomdir  other  readme.txt
Windowsアプリもあるようだが、うちは基本的にUbuntuなので、Windowsアプリは動作しない。

Ubuntu用のアプリを探したら、Aeskulap viewerというのが見つかった。
以下のようにしてインストールする。
sudo apt install aeskulap
インストールが終わると、メニューの「グラフィックス」の下に"Aeskulap Viewer"のアイテムができている。
(gnome-session-flashbackなら)

Installはできたけど、どうやって使うんだ?
とりあえず起動した。
Fileメニューを開くと、DicomDirの文字がある。

そういえばマウントしたCD-ROMイメージ内にも、dicomdirというファイル名があった。
これで開くのかな?
CD-ROM内の dicomdir を開いてみたが、画像が見れない。

上記モザイクの部分に名前が書いてあるのだが、その部分をダブルクリックすると、マウスカーソルが読み取り中のぐるぐるマークになるが、それが終わらない。

コマンドラインから実行して、標準エラー出力の内容を確認した。
ファイルオープンでエラーになっているが、そのファイル名がすべて大文字になっていた。
本来のISO9660ファイルシステムのファイル名は全て大文字8.3形式だ。
しかしながら、扱いやすさのために、ファイルシステムドライバが小文字に変換してくれている。
dicomdir内で、大文字で指定されているのに、ファイル名が小文字なのが問題なのだろう。

一旦、イメージをunmountして、check=relaxedオプションをつけてマウントし直す。
以下のような感じ。
sudo mount -t iso9660 xxxx/MRI-cdrom.img ~/dvd -o ro,check=relaxed
この check=relaxed は、大文字小文字を区別させなくするオプションだ。
'ls'コマンド等の表示は小文字のままだが、読み取り時にファイル名に大文字が指定されても、オープンできるようになる。
この状態で、同じ操作をしたら今度は普通に画像を見ることができた。

ちなみに、私の足の小指の骨は、3つだった。

足の指が他の人よりも長いので、子供の頃に友達から「サルの足みたい」と言われたことがある。
進化してないようだ。残念。

2023年1月20日金曜日

Ubuntu22.04で電子辞書

数年前に発掘された壊れた辞書CD-ROMを無理矢理使っている
ネットが無くても使えるというのが良い。
使っていると、だんだん手放せなくなる。
Ubuntu22.04でも使えるのか、virtualbox上のjammyで試してみた。

辞書CDを見るには、当然ながらアプリが必要だ。
GUIのアプリなら、ebviewがいい。これは以前も少しふれていた
インストールは、普通にaptで行えばいい。
$ sudo apt install ebview libeb16-dev eb-utils eb-doc
最初はebviewだけを指定したが、おすすめが表示されたので、それらも入れた。
さらにコマンドラインから起動しようとしたら、以下のようなメッセージが表示された。
Gtk-Message: 09:12:40.509: Failed to load module "canberra-gtk-module"
canberra-gtk-moduleが無いようだ。GTK+2だからしょうがないか。
以下のようにして、libcanberra-gtk-moduleをインストールする。
$ sudo apt install libcanberra-gtk-module 
これで正常に起動できるようになる。

起動したら、辞書を登録しないといけない。
辞書CD-ROMをマウントして、メニューから、「ツール」→「オプション…」でダイアログを表示させて、右のツリー表示の「辞書検索」→「辞書グループ」をクリックする。
以下のような画面になる。
一番下の「パス」のエディットボックスにマウントポイント(上記例では'/home/shin/dict')を入力し、「ディスクを検索」ボタンをクリックする。
上の「名称」欄に、見つかった辞書の名称が表示される。それをクリックして、「追加」ボタンをクリックすると、登録が行われる。

辞書を表示する前にフォント設定を直したほうがいい。
ebviewデフォルトでは東風(Kochi)フォントが指定されているが、Ubuntuのデフォルトでは入っていない。
試した限りでは、IPAフォントでもいい感じだったので、IPAフォントにする。
「外観」→「フォント」に移動して、以下の例を参考に設定する。
ついでに、発音がわかるように、音を鳴らしたい。
これは以前の記事でも少し書いていたがaplayを使う。
「外部プログラム」の音声再生プログラムの欄に、"aplay %f"を入力する。
これで、使えるようになった。
検索語に適当な単語を入力して、Enterで検索される。
緑のスピーカマークをクリックすると、音声も聞ける。
頑張ってね。

2022年11月18日金曜日

Ubuntu22.04のいいところ

関連記事:
VirtualBoxで、Ubuntu22.04を試しに使っている。
過去に何度かその記事を書いている。

まだ本格的な使用ではないので、細かい部分に気が付かない。
特に困らないなら、気づくチャンスもない。

先日、Meldに文字コード選択機能が付いていることに気がついた。
コメントを日本語で書く時もある。
さらに、例えば自家製iTRONやFATファイルシステムは、当初Shift_JISで書いていた。
そのため、古いソースコードと比較する時、Shift_JIS, EUC-JP, UTF-8がごちゃまぜになることがある。
全部文字コードを変換してから比較すれば良いのだが、急いでいる時はそのちょっとの手間が「イライラ」につながる。

また、文字コードの自動認識に失敗することもあり、その場合、認識ミスしている部分を、二分岐探索で絞り込んで特定する。
これはかなり手間がかかる。

イライラが少しでも減るのなら、価値があるだろう。
だんだんと、22.04が良いと感じるようになってきた。

番外編:
パッケージを見ると、Meldは'Architecture: all'で、Python3で書かれている。
高級言語で書かれているなら、抽象化度も高そうだ。
「18.04でもうごくんじゃね?」と思って、Ubuntu packagesから、22.04のmeldのバイナリパッケージをダウンロードして、"dpkg -i <package-file.deb>"でインストールしたら、あっさり動いた。
ただし、この方法はめちゃくちゃで、全く保証できない。やるなら、自己責任で。

2022年10月28日金曜日

Ubuntu 22.04 Gnome flash back session で、むりやりNemo RabbitVCS

少し前に、Ubuntu 22.04で「RabbitVCSが動かなかったりするので…」なんて書いていた。

少し前は、アイコンにエンブレムは表示されるが、ポップアップメニューによる操作はできなかったのでそのように書いた。
RabbitCVSが新しくなっていたので、試してみたら動くようになっていた。

昔ながらの使い方を続けているので、Ubuntu22.04といえども、Gnome Flashback session を使っている。
さらに、Compact Viewを使いたいので、ファイルマネージャをNemoに入れ替えている。

やや変な使い方なので、あまり役に立たないかもしれないけど、動かすまでを書いておく。
まず、Ubuntu22.04でも、Nemo用のRabbitVCSのパッケージはない。
このThe new home of rabbitvcsからソースを得て使うことになる。
そのため、UbuntuパッケージのRabbitVCSを入れてはいけない。「ませるな危険」の考えだ。

RabbitVCSをインストールする前に、必要なパッケージをinstallする。
installしたのはだいぶ前のことなので、細かい事は忘れてしまった。
こういう時に、必要なことをパッと示せればカッチョいいのだが…。
Ubuntuのrabbitvcs-coreパッケージのdependsや、aptのヒストリをしらべたところ、以下のものを入れていたようだ。
gedit
hicolor-icon-theme
ipython3
meld
python3-configobj
python3-dbus
python3-dulwich
python3-nautilus
python3-simplejson
python3-svn
python3-tk
subversion
nemo-python
上記をインストールすると、依存パッケージも色々入る。
最初に開発パッケージその他も色々入れていたので、事前に入れていたものもが上記には含まれていない。
そのため、たりないものもあるかもしれない。
また、あなたの環境ではすでに入っているものもあるかもしれない。
それらをわざわざインストールし直す必要はない。
インストールしても動作には問題ないが、手動でインストールされたと表示されるようになる。

依存物を入れたら、RabbitVCSを入れる。
以下のようにして、gitで取得する。
$ git clone https://github.com/rabbitvcs/rabbitvcs.git
rabbitvcsというサブディレクトリができるので、その中に入ってsetup.pyを使ってインストールする。
$ cd rabbitvcs

$ sudo python3 setup.py install --install-layout=deb

これでRabbitVCSの基本的なものは入った。
それが済んだら、Nemoのクライアントを入れる。
$ sudo mkdir -p /usr/share/nemo-python/extensions

$ sudo cp clients/nemo/RabbitVCS.py /usr/share/nemo-python/extensions/

後は、再起動すれば、Ubuntu 22.04 で Nemo RabbitVCSが動く。

まだ動かないなんて書いてしまった後で動くようになっていたので、あわてて記事を書いた。
Ubuntu 22.04 も良いかもしれない。
とはいえ、個人的には18.04をギリギリまで使うつもりだ。

関連記事: Ubuntu 18.04 で無理やりNemo RabbitVCS #2
2022/10/29 文書を少し直した。

2022年9月16日金曜日

Ubuntu 22.04

未だにUbuntu 18.04を使い続けている。
とはいえ、だんだん使えなくなっていくので、そろそろ新しいバージョンへの更新を考えている。
22.04も、8月にポイントリリース#1(すなわち、22.04.1)が出たので、VirtualBoxで評価をしている。

10.04の頃からGnome-classicなデスクトップを使っている(時々その他のフレーバも見るけど)ので、22.04といえどもgnome-session-flashbackとnemoをインストールして、昔ながらの使い方を続けている。

先日、LibreOfficeを試している時に、メニューバーの内容が画面上端のパネルに表示されるようになった。
Macを使ったことのある人なら、Macのような感じになったと言ったほうが解りやすいかな?
しかも、時々メニューが消えてしまうため、使い物にならない。

元々は普通に表示されていたはずなのに、なんで?
しばらく、理由がわからず、困っていた。
バージョンアップが行われれば、直るかな?と期待していたが、先日LibreOfficeの更新があったが直らない。

本気で調べ始めた。
パネルに「インジケータアプレット・アプリメニュー」を追加したのが原因だった。

ibusの状態をパネルに表示する方法がいつもわからなくなる。
一度設定したら、数年間変更しないので、忘れてしまうのだ。
「通知領域」アプレットを追加するべきなのだが、22.04ではインジケータアプレットが数種類あるので、「これかな?」みたいに追加したのが失敗だった。
パネルから「インジケータアプレット・アプリメニュー」を削除すれば、アプリ内にメニューバーが現れる。
ちなみに、パネルを操作するポップアップの表示方法が18.04とは違う。
18.04では、[ALT] + 右クリック だが、
22.04では、[ALT] + [Super] + 右クリック になる。

※ [Super]は、Windowsロゴマークの刻印されたキー。
2022/9/16 Superキーの写真を追加。
写真でみると汚いな。老眼が進み、肉眼では見えていなかった。

22.04では、RabbitVCSが動かなかったりするので、移行するには時期尚早と考える。
18.04のサポートが終わるまでにまだ半年あるし、拡張セキュリティメンテナンス (Extended Security Maintenance; ESM)を考えれば、2028年まで使えなくはない(注意が必要)。

何度も更新作業をするのは手間だし、オープンソースとはいえある程度寄付をするので、支出を抑えたい。
22.04に一気に移行したいのだが、やむを得ない場合は、EMSを使うか、20.04を一時的につかうか...。
半年、見ていこう。

2022年7月31日日曜日

縦書き

昨日のこの記事で、縦書きを使った。
私は、手書きを除いて、縦書きをほとんど使わない。
(手紙は手書きで、縦書きが多い)

海外のアプリは、基本的に縦書きに対応していない。
Windows95のころ、MS-Wordでの縦書きがどんなだったか思い出してほしい。
若い人は知らないだろうから、あえて書くと縦書き文字が横になって表示されていた。
そんな感じで、使い難い事が多い。
縦書きだけ見れば、90年代初頭の一太郎の方が良かった。さすが国産。

Ubuntu18.04 の GIMP 2.8.22 ではどうしてもできなかった。
このUbuntu Budgie 20.04の GIMP は 2.10.18 であり、昨日はこれを使って縦書きした。
上記、左側赤◯の「A」のアイコンをクリックして、まずテキストボックスを作る。 そのテキストボックス内で右クリックをして、ポップアップメニューを表示させる。 ポップアップ内から「縦書き・右から左へ(向きの混在)」(左の赤◯)をクリックすると、そのテキストボックスが縦書きになる。
一応縦書きになるのだが、長音がどうしても中心に来ない。
そのため、「ファーファ」だけは横書きにした。

LibreOffice WriterやDrawでも縦書きができる。これらではIPAフォントやTakaoフォントを使うと長音記号も中心に来る。
そのため、GIMPで絵を書いて、Drawで縦書き文字列を入れることもやってみた。
できたが、管理が面倒だし、2行目以降の変換前入力や変換候補が表示されないため、きわめて使いにくく諦めた。

NOTOフォントが縦書きに対応しないかな…。
何かやり方があるのかな?

2022/08/01: 一部加筆修正。言葉がメチャクチャで日本語になっていなかった。
また書きたいことが書けていなかった。
さらに、IPAフォントでは縦書きもきちんと表示されるのに、何か勘違いしていた(多分、間違えて「西洋言語用フォント」の方を切り替えてた?)。
昨日、文書化する時に、再度確認すればよかったのに、暑さのせいか、ボーっとしていて、そのまま書いてしまった。

2022年7月1日金曜日

Shotcutが動かない

ビデオ編集にShotcutを使っている(たとえば、こんな感じ)。
先週使おうとしたら動かなくなっていた。

コマンドラインから起動すると、以下のようなエラーがでて起動しない。
$ shotcut
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by bin/shotcut)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Multimedia.so.5)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Widgets.so.5)
bin/shotcut: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Widgets.so.5)
bin/shotcut: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.28' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Widgets.so.5)
bin/shotcut: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.28' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Xml.so.5)
bin/shotcut: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Xml.so.5)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libfftw3.so.3)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Quick.so.5)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Gui.so.5)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Qml.so.5)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Core.so.5)
bin/shotcut: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Core.so.5)
bin/shotcut: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Core.so.5)
bin/shotcut: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.28' not found (required by /snap/shotcut/749/Shotcut.app/lib/libQt5Core.so.5)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libpulse.so.0)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libicui18n.so.66)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libicuuc.so.66)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libpulsecommon-13.99.so)
bin/shotcut: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /snap/shotcut/749/Shotcut.app/lib/libsystemd.so.0)
bin/shotcut: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.30' not found (required by /snap/shotcut/749/Shotcut.app/lib/libsystemd.so.0)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libsndfile.so.1)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libpng16.so.16)
bin/shotcut: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /snap/shotcut/749/Shotcut.app/lib/libFLAC.so.8)
glibcのバージョンの問題。
snapでもこんなことがあるのか。
shotcutは、classicという分類になっており、snap監獄の中に完全に封じ込められているわけではないようだ。

色々調べると、このページにたどり着いた
中ぐらいに、「以降、古いUbuntuのバージョンと互換性がなくなり、ウエブサイトを更新する以外の対処をしません。OSをアップグレードできるまでは前のバージョンを使ってください。」的なことが英語で書かれている。
ウチでは、まだ Ubuntu 18.04 を使い続けているため、そのせいで動かなくなったのだろう。

また、(動いていた)前のリビジョン 692 (v22.04.25) に戻す方法も書かれている。
以下のようにするらしい。
sudo snap revert --revision=692 shotcut
実際にやってみたら、また動くようになった。

しかしながら、revertは、任意のバージョンに戻せるわけではない事も、その2つ下のリンク先に書かれている。
この方法は、前のリビジョンのShotcutをsnapでインストールしていた場合のみ、使える。

snapじゃないポータブル版もあるが、依存関係の解決を自力で行わねばならず、難しいかもしれない。
そのため、過去にsnap版shotcutをインストールしていないのなら、Ubuntuを新しいもの(20.04や、22.04)にするか、VirtualBox等で新しいUbuntuを動かして、その中でshotcutを使うほうが簡単かもしれない。

実は、先週のBIOS Flash Updateのビデオ編集のとき、shotcutが動かなくなっていることに気が付き、このVirtualBox内のBudgieのshotcutで編集した。

そろそろUbuntuを新しくすることを検討する時期かな…

2022年6月26日日曜日

DELL Optiplex BIOS update w/o Windows

自宅では、Linuxを使っている。
Turbo Linux や Vine Linux を経て、10年ぐらい前からは Ubuntuを使うようになった。

Linuxを使っていて困るのは、BIOS(UEFI)の更新だ。
多くのPCはBIOSの更新にWindowsを必要としている。
そのため、デュアルブートにして残しておいたりしている。

先日、Ubuntuパッケージの更新をしているとき、intel-microcodeの更新があった。
また同時期、職場のPCでもWindows Update があり、BIOSの更新があった。

Ubuntuのintel-microcodeと、BIOSの関係は良くわからない。 WindowsでもBIOSの更新を必要とするなら(必要ないならWindowsの更新だけでいいはず)、Linuxでも必要だろう。

実は、手間がかかるが、LinuxでもBIOSの更新ができる。
今回、自宅のLinux機 DELL Optiplex 7050 のBIOS更新に挑戦してみた。
最近は、だいぶ簡単になった。それについて書く。

検索すると、"OptiPlex 7050 Micro Owner's Manual"のUpdating the BIOS in Linux and Ubuntuが見つかった。
LinuxやUbuntuを用いたコンピュータ上で、システムBIOSを更新するなら、ナレッジベースの記事 000131486を参照せよと書かれている。

このリンクをクリックすると、Update the Dell BIOS in a Linux or Ubuntu environmentが表示される。

UEFI Capsule updatesという方法で、アップデートを行うようだ。
対応するPCは、このページに書かれている。DELL製以外のPCも多く書かれている。
OptiPlexなら、4桁番号のやつは対応しているようだ。6〜7年前よりも新しいPCなら対応してそうだ。
我が OptiPlex 7050 も対応している。

丁寧に長々と書かれているが、基本的には、
  • FATフォーマットされたUSBメモリを用意する。
  • DELLのドライバダウンロードページで、自分のPCにあったBIOSアップデートをダウンロードする。
  • ダウンロードしたBIOSアップデートを、USBメモリにコピーする。
  • PCを再起動し、F12を連打して "One-time Boot menu" (いわばBIOS設定画面)に入る。
  • カーソルキーで "BIOS Flash Update" を選んで、Enterキー。
  • "BIOS Flash Update"画面に従って、操作する。
サポートページに行くと、サービスタグやプロダクトID等の入力が求められるが、Optiplex や 7050 を入力すると、候補が表示されるので、その中から適切なものを選ぶと良い。
OptiPlex 7050 では、"Dell OptiPlex 7050システムBIOS" というものをダウンロードした。

ファイルサイズは20MBそこそこなので、USBメモリの容量を意識する必要もない。

ファイルは、Windowsの実行形式だった。これで良いのかとも思うが、Update the Dell BIOS in a Linux or Ubuntu environmentの真ん中ぐらいに、
Note: the BIOS flash ends in an .exe extension. Even though Linux cannot open it natively, the BIOS will deal with it properly.
と書かれている。BIOSはこの実行形式ファイルを適切に扱えるようだ。
UEFIには、COFFローダがあるのかな?なんか怖くなるな。

とはいえ、そういうことならUSBメモリさえ用意できれば、Linuxに限らずBIOS更新ができることになる。
以前は、FreeDOSを用意する必要があった。便利になったものだ。

実際にUEFI(BIOS)で、BIOS Flash Upadte を行う様子を撮影した。

UEFIのBIOS Flash Updateの操作方法の詳細は、上記ページにも書かれておらず、試行錯誤が必要だった。
製品毎に微妙に違うので、詳細が書けないのだろう。

Windows11難民の中には、Ubuntuに避難してきた人もいるだろう。
Windowsに慣れている人は、Linuxは難しいというが、実際にはどちらも充分に複雑だ。
英語に不慣れな人が英語は難しいと言うのと同じだ。英語ネイティブな環境なら、子供でも英語で話せる。

Linuxではできないことも多かったが、BIOSの更新も簡単にできるようになって、徐々に改善してきている。
古いPCを捨てずに、Linux機として使ってみるのも良いよ。

2022年5月15日日曜日

ダイビングのログ帳用紙

ダイビングをする人なら、ダイビングログを付けているだろう。

PADIのダイブマスタになったとき、ログ帳がもらえた。
しかし、そのログ帳のログ用紙は少ししか付いていなかった。

どっかに売っているわけでもない。
ということで、十数年前にMS-Visioで書いた。

Visioは2003版だったので、その当時でも古かった。
Windowsを最新版にするのも大変だが、MS-OfficeやVisioも更新していると、やたらとお金がかかる。
特にVisioは高かった。
忙しいと自宅にいる時間は少ないので、MS-OfficeやVisioをほとんど使わない。それなのに更新に数万円かかる。
その当時はサブスクも無かったし従量制もなかったので、バカバカしくなってUbuntuへ移行した。

忙しかったので、自宅の整理がないがしろになり、いつの間にやらログ用紙のVisioファイルを紛失した。
しかし、.pdfを人にあげたりしていたので、それは残っていた。

LibreOfficeは、.pdfを読み取ることができる(完璧ではないが)。
Drawで読んでみたら、一応読み取ることができた。
色々調整して、また.pdfを作り直した。
Googleドライブに置いた。両面用ダイビングログ2
両面印刷する時、「A4用紙」「短辺とじ」で印刷する必要がある。

ほぼ完コピなので、3つ穴だし、点線で用紙も切り抜かなければならない。
しかし、日本国内では3つ穴ファイルはほぼ売っていないし、3つ穴を開ける道具は皆無だ。ついでに紙を切り抜くのが面倒だ。
というわけで、最近ではただ2つ折りにして、2つ穴を空け、ダイソーのトレーディングカード帳に挟んで使用している。

そうなると、完コピよりも、2つ穴用に作り直したほうがいいかな…。
ちょいちょい直していこう。

2022年4月22日金曜日

Ubuntu 22.04 LTS がリリースされたようだが...

Ubuntuは2年周期で、4月に長期サポート(LTS="Long Term Support")版がリリースされる。
Ubuntu 22.04 LTS がリリースされた

私は、18.04を未だに使い続けている。
ずっとmeditを使っているが、20.04にはmeditが無いので、18.04を使い続けている。
他にも良いエディタはあるだろうし、meditがすごく良いと思っているわけではないのだが、新しいテキストエディタを選び直すのがただ面倒なのだ。
22.04ではGTK4ベースだが、meditはGTK+2だ。18.04の頃でもGTK+3はあるが移植されていなかった。
私も、このpseudo_arc_to()は、GTK+2で開発していたので、文句が言える立場にはない(とはいえ、GTK+3でもそのまま動く。今はGTK+3でも使っている)。

何よりも心配なのは、waylandだ。
未だにこのFolio-13 2000 を使っており、Hi-Vision動画を編集するには非力なので、去年買ったディスクトップPCにSSHログインして、XをSSHでforwardingして、shotcutなどを使っている。
もちろんデスクトップPCを直接使うこともあるが、ダラダラしないように、仕事空間と遊び空間を明確に分けているので、動画編集はノートPCから操作している。

さらにGnome4もまだ完全に移植されていない。
中途半端な状態だ。

22.04はやめておこうかな…。

2022年4月9日土曜日

カーミット

Kermit(カーミット)といえば、Sesame street のキャラクタを思い出す人も多いだろう。
やたらと早口で喋るカエル(びっき)のKermit だ。時々リポーターの仕事をする。
かく言う私も、Kermitは大好きなキャラクタだ。

プログラマ、特に組み込み系の人にとって、Kermitと言えば、もう一つある。
通信ソフトウエアパッケージの Kermit だ。
私はLinux上での組み込みマイコン開発時、シリアルポートの操作のために使っている。
Kermitは膨大な機能があるため、man-pageを見ても、便利なヘルプ機能を使っても、どこに何が書いてあるかわからない。私も全てを使ったことがあるわけではない。
そのせいで敷居が高いと感じる人も少なくはないだろう。
しかし、シリアルポートでの最低限の使用に限れば、けっして難しくはない。
今回は、UbuntuでのKermitでのシリアルポートの操作について書く。

インストールしよう

UbuntuでKermitを使うなら、aptでckermitパッケージをインストールするのが手っ取り早い。
こんな感じ:
$ apt-get install ckermit

起動しよう

インストールができたら、起動しよう。
シリアルポート使うなら、起動オプションでポートのスペシャルファイルを指定して起動するのが良い。
$ kermit -l /dev/ttyUSB0
上記は、USBシリアルデバイスの0番を指定している。レガシーポートのあるPCなら、COM1は"/dev/ttyS0"、COM2は"/dev/ttyS1"を指定する。
起動後のコマンドモードでも指定できるのだが、コマンドオプションの方が短く済むし、後で示す.kermrcを使った設定のためにも、起動時に指定したほうが良い。

通信設定しよう

Kermitは起動直後、インタラクティブコマンドモードになる。
起動時に、ポートを指定していないなら、"set line"コマンドで指定する。
(/home/foo/) C-Kermit>set line /dev/ttyUSB0
起動時に入力したほうが多少短い。起動時に'-l'で指定したほうが、楽だろう。

起動時にポートを指定していれば、必要な設定は、
  • フォーマット(キャラクタ長、パリティ、ストップビット長)
  • ボーレート
  • フロー制御
  • キャリア監視
キャラクチャ長、パリティ、ストップビット長をまとめて、フォーマットと書いているが、これらをまとめてセットするのが便利なためだ。
これらは、"set serial"でまとめてセットする。
たとえば、よく使われる(であろう)「キャラクタ8bit, パリティなし、1ストップビット」なら、以下のように指定する。
(/home/foo/) C-Kermit>set serial 8n1
"8n1"の3文字のそれぞれが、キャラクタ長('8'=8bit)、パリティビット('n'=none parity)、ストップビット長('1'=1stop)を示している。
使える組み合わせは、"set serial"と入力後に'?'を打つとダダっと表示される。
このコマンドに限らず、いろいろな場面で'?'を打つと、インタラクティブなヘルプが表示される。憶えておくといい。
キャラクタ長は 7, 8 が使える。
パリティは、キャラクタ長が8bitの場合、'n'=なし、'e'=偶数パリティ、'o'=奇数パリティから選べる。7bitの場合、それに加えて、'm'=マーク、's'=スペースも選べる。
ストップビット長は、1, 2 が使える。
それぞれ個別に指定もできるのだが、この1発入力表現がとにかく便利だ。

ボーレートは、"set speed"で指定する。
115.2Kbpsなら、
(/home/foo/) C-Kermit>set speed 115200
原因不明ながら、フォーマット指定後にボーレートを指定しないと、フォーマットが無視されることがある。
そのため、後からボーレートをセットしたほうが良い。

フロー制御は、"set flow-control"で指定する。
フロー制御無しなら、
(/home/foo/) C-Kermit>set flow-control none
俗に言うハードウエアフロー制御(RTS/CTS)なら"rts/cts"を、ソフトウエアフロー制御(XON/XOFF)なら"xon/xoff"を指定する。
ここでも忘れてしまった時は'?'だ。

最後の「キャリア監視」は、ピンとこないだろう。
KermitはシリアルポートのCD(Carrier Detect)をデフォルトで監視しており、これが落ちていると接続状態にならない。
使用するクロスケーブルや、開発機のハードウエア構成にもよるのだが、CDがオープンの場合も多いだろう。
そういう時は、"set carrier-watch"を使って、
(/home/foo/) C-Kermit>set carrier-watch off
として、監視を止める。

接続・切断しよう

これで設定ができたので、接続してみよう。
接続には、"connect"コマンドを使うのだが、これは短縮形の"c"でいい。
(/home/foo/) C-Kermit>c
接続すると、以下のようになる。
(/home/foo/) C-Kermit>c
Connecting to /dev/ttyUSB0, speed 57600
 Escape character: Ctrl-\ (ASCII 28, FS): enabled
Type the escape character followed by C to get back,
or followed by ? to see other options.
----------------------------------------------------

英語が読める人はもうおわかりと思うが、インタラクティブコマンドモードに戻るには、CTRL-\押下後、'C'を入力する。
'C'の代わりに'?'を入力すると、ヘルプが表示される。
'C'の他によく使うものは、'U'と'Q'かな。
'U'は接続を切断し、コマンドモードに戻る。
'Q'は切断して、Kermitも終了する。

CTRL-\ + 'C'で戻っても、シリアルデバイスはopen状態にある。
設定を変えて接続し直す場合、'U'で終えるか、'C'で戻った後で明示的に'close'コマンドを引数無しで使う。

ファイルを垂れ流し送信しよう

マイコンでの開発をしていると、まとまったデータをマイコン側へ送りたいときがある。
Motorola-SやIntel-hex形式のファイルをROMライタへ送りたい時(いつの時代だよ!)などだ。
ROMライタに限らず、マイコン内蔵Flashの内容を書き換えるコード(ローダ)をマイコンに用意しておいて、JTAGなしでプログラムを書き換える機能を用意することもあるだろう(最近は無いのかな…)。
その場合は、インタラクティブコマンドモードで、"transmit"コマンドを使う。
(/home/foo/) C-Kermit>transmit ファイル名
これで送信できるのだが…。やってみればわかるけど、とても遅い。
実は、kermitは、行毎に待ちを挟む。
受信側に配慮したやさしい動作であるが、大量のデータをやり取りすることを目的としている場合、受信側もバリバリにチューンしているだろう。最近のRISCマイコンなら、十数MHzのマイコンでも、115.2kbpsを取りこぼすのは稀だ。
Flash消去・書き換えにはさすがに時間がかかるが、それは毎行に待ちを挟むと言うよりも、消去ブロック単位や書き込み単位で待ちを挟むべきであり、その場合はフロー制御を使うべきだ。

ちょっと脱線したけど、transmitの際に、'/NOWAIT'オプションを指定すると、待ちを除去できる。
(/home/foo/) C-Kermit>transmit /NOWAIT ファイル名
ボーレートが高いほど、待ちの影響も大きい。
バリバリチューンを無駄にしないためにも、憶えておこう。
その他にも、transmitコマンドのオプションがある。'?'で表示されるので見ておくと良い。

受信内容を記録しよう

マイコンの動作確認やDebugの際に、シリアルポートを使うことも多い。
この場合、行った作業を記録しておきたい。
インタラクティブコマンドモードで、"log session"を使う。
(/home/foo/) C-Kermit>log session ログファイル名
ログファイル記録されるのは、プレーンテキストであり、エスケープシーケンスは記録されない事に注意せよ。

BSキーとDELキーの扱い

TeraTermを使っていると、BSキーを押した時、0x08(CTRL-H)が送信される。
BSのコードは0x08なので、この動作は正しい。

しかし、Linuxの端末では、BSキーを押すとDEL(0x7F)が押されたものとして動作する。
Kermitは、通信アプリであり厳密には端末エミュレータではない。端末としての振る舞いは、それを起動した端末に依存する。
そのため、KermitもBSキーが押された場合、DEL(0x7F)を送信することになる。
すなわち、TeraTermと違う動作になる。

このねじれ現象は歴史的な経緯により生じたものだ。
そもそもDELキーはBSキーの動作をしていた時期があり、その後現在と同じような動作になるのだがBSとは違うので、0x7Fなどというコード(それ以外の制御文字はすべて0x20未満)を持つ。
この件、かなり古いもので、知る人ぞ知る情報だったのだが、最近はネット上に転がっているので検索して読んでみるのもいいだろう。
2022年4月15日 追記: DELが0x7Fなのは、紙テープを使っていた頃の影響

改めて、Wikipediaの「削除文字」の部分を読むと、全ビット穴が空いている(7bit文字なら0x7F)部分を読み飛ばすという動作になっており、それを使って修正液のように文字を消すので、0x7Fだそうだ。
それとは別に、BSとDELの混乱も書かれている。とにかく、ごちゃごちゃしている。

そして、Linuxではこのねじれに対して、VT100のキー配列とLinus氏の判断により、BSキーはDEL(0x7F)を発行する。
詳しくは、Linuxの文書、"The Linux Keyboard and console HOWTO"の、"5.2 How to tell Linux what code to generate when a key is pressed"のあたりにチラッと書いてある。

色々対処方法はあるが、私はKermitでコードを変換するようにしている。
以下のようにすると、BSキーがBS(0x08)を送信するようになる。
(/home/foo/) C-Kermit>set key \127 \8
これで、他のアプリに影響を与えず、TeraTermと相互運用しやすくなる。

自動設定しよう

Kermitのインタラクティブコマンドモードのコマンドを、${HOME}/.kermrcに書いておくこと、起動時にそれが実行され、設定される。
私の.kermrcは以下のようになっている。
$ cat .kermrc 
set line /dev/ttyUSB0
set speed 57600
set serial 8N1
set flow-control none
set carrier-watch off
set key \127 \8
ボーレートが57.6kbpsになっているのは、例のマイコンボードを使ってるためだ。
こうしておけば起動すればすぐに使えるし、コマンドを忘れたとしてもこの.kermrcを見れば思い出すだろう。

エスケープシーケンスとキー入力

ここからは、kermitと言うよりもマイコン側の話だ。
エスケープシーケンスは、端末ごとに微妙に違っており、マイコン側で全てに対応するのは無駄だろう。
基本的にはANSIエスケープシーケンスに対応すればいい。
しかしながら、PC-98(だから、いつの時代だよ!)で、デバッグしていたコードを移植する場合、カーソルON/OFFのコードが違う。
意味PC-98ANSI
カーソルON ESC [>5lESC [?25h
カーソルOFFESC [>5hESC [?25l
また、LinuxではDELキーは(0x7FがBSなので)、エスケープシーケンスで表現される。
さらにこのへんにも書いてあるが、 キー入力のスキームはいくつも存在し、残念なことに多くの端末は異なるスキームのシーケンスを混ぜているので、ホストソフトウエアはあらゆるスキームを使った入力シーケンスが扱えなければならないのだ。
すなわち、DELキーは、0x7Fのみならず、エスケープシーケンス表現でも扱えるように実装しておくべきだ。

一通り使えるであろう方法を示した。

kermitは、Windows以前の'80年代から存在しているので、「あー、あれね。」と思う人もいるだろう。
昔からパソコンをいじっている人の中には特に。

厳密には端末エミュレータではないが、端末上で動作し、その端末の機能を利用することで、端末エミュレータのように使うこともできる。

しかしながら、日本ではPC-9801のDOS上で、CCT-98など高速動作する端末エミュレータが使われることが増え、さらにWindows後ではTeraTermに移行していった。

私は、'90年代末頃からPC Linuxを使うようになった。
そのころからGCCが日立SuperHを扱えるようになったので、それを使うようになった。
端末エミュレータとしては、当初はWindowsのTeraTermを使っていたものの、「今でもKermitがあるんじゃね?」と思って探すとすぐに見つかった。
そのため、またLinux上でKermitを使うようになった。
使わなくなってから数年経過していたため、使い方をかなり忘れていたが、使い始めればすぐに思い出していった。

Kermitをまた使うようになってから20年ぐらいになるだろう。途中、使わなかった時期があったことも最近では忘れていた。

ずっと使っているし、昔から存在しているので誰でも知っていると思っていた。
若手はKermitを知らない場合もあるが、若者は経験がまだ少ないのだからそういう事もあると、思っていた。
最近になって、色々見てみると意外にみんなKermitを知らないようだ。

考えてみれば'80年代では広く使われていたが、現在と比べ'80年代は、PCを使う人そのものが少なかっただろう。
Windows以降、大量の人の流入により、Kermitを知っている人は少数派になっているようだ。

いつの間にやら、世界は変わっていた。

2021年7月17日土曜日

VirtualboxでUSBが接続できないとき

今年の1月の緊急事態宣言のとき、去年買ったPCのVirtalBox上にWindows10をインストールして仕事用の環境を構築した。

VirtualBox内のWindows10で、以前から使っているARM用JTAG"J-link"は動くが、最新のIARの"I-Jet"は動かなかった。
通常動作時に頻繁にマイコンの電源が切れる装置の開発をしているため、最終製品段階でJTAGはほぼ使えないので、JTAGを使った開発はサブルーチン単位の動作確認になる。この場合、JTAGに高速性はほぼ必要ないので"J-link"で充分だ(どうしてもI-Jetが必要と感じたことはない)。
そのため、"J-link"を使って開発していた(更に昔からOpenOCDで使っているブルガリアのやつでも速度的にはいいのだが、マイコン電源電圧が合わない)。
何故"I-Jet"は動かないんだろう?と思いながらも、困らないので放置していた。

Windowsで記録メディアを読みたいときもある。
USBカードリーダをVirtualBoxにつなごうとすると、エラーになってつながらなかった。
この場合も、\\vboxsrv\xxxxを使って誤魔化していたので、問題にならなかった。
「Windowsゲストでは、ダメなデバイスがあるんだな」みたいに考えて、調べもしなかった。

ところが Ubuntu Budgie 20.04 ゲストでもカードリーダが認識できなかった。
それどころかUSB BOM(Bulk Only Mass strage)デバイス、すなわちUSBメモリも認識できない。

これはなにかおかしい。調べはじめた。

色々見ていくと、USB1.1のデバイスはつながる。
しかし、USB2.0やUSB3.0デバイスはつながらない、という事がわかった。

考えてみれば、VirtualBoxのUSBコントローラはUSB1.1をエミュレーションしている。
USB2.0やUSB3.0を使うには「VirtualBox Extention Pack」をインストールする必要がある。

使用しているVirtualBoxのバージョンに合ったExtention Packが必要だ。
私は、OraclのVirtualBoxのダウンロードページから得た6.1系のVirtualboxを使っているので、そのExtention Packが必要になる。
ダウンロードページの先頭付近の少し下、VirtualBox 6.1.22 Oracle VM VirtualBox Extention Packと書かれたところにある"All supported platforms"と書かれたリンクをクリックする。
これをクリックすると、Virtualboxが立ち上がってきて、Extention Packのインストール確認のメッセージが表示される。
使用許諾その他の質問に適切に答えてインストールを行う。

Extention Packインストール後に、仮想マシンのUSB設定の画面を表示すると(仮想マシンは停止している状態)、USB2.0とUSB3.0が現れる。
USB3.0を選択して、仮想マシン(この場合はWindows10)を動かせば、つながらなかったUSBデバイスがつながるようになる。

解ってしまえば、簡単な事だ。

2021年6月19日土曜日

Ubuntu18.04 で動画にモザイクをかける

誰もが何気なくスマホで動画を撮影する。
スマホ(携帯やガラケーも含めて)にカメラが付くようになったのは、auが最初だったと記憶している。
(あの頃のauは、なんかワクワクした)
今では、カメラが無かったなんて信じられないくらい、当たり前になっている。

人が多いところで動画を撮影すると、後ろに人が写り込んでしまう。
個人で鑑賞するぶんには問題ないが、それを公開するのは個人情報の保護の観点から注意するべきだろう。

というわけで、TVの映像のようにモザイクをかけたい。
Ubuntu 18.04(未だにBionicかよ!)でも、動画編集アプリshotcutを使って動画にモザイクをかけることができる。
たとえば、このブログの「武蔵浦和西口駅前K's電気跡地の再開発工事#2」などでそのようにしている。
その方法を説明する。

ちなみに、ここで紹介している方法の多くはfocal(20.04)でも使えるだろう。
ShotCutを入手する

Ubuntu 18.04 では、snapを使って入手する。
ソースからのビルドも試みたが、難しかったので諦めた。
focalでは、apt-getでも入手できるようだ(このBudgie 20.04で確認)。
ただし、apt-getで入手できるのは、現時点では少し古いようだった。これは時間経過と共に徐々に変化していくだろう。

snapでshotcutをインストールするには以下のようにする。
$ snap install shotcut
これでshotcutが使えるようになった。

モザイク適用の概要

モザイクの適用は、「モザイク」フィルタにより行う。
動画に単純にモザイクを適用すると、動画全体に、時間的にも画面領域的にも全体にモザイクがかかってしまう。
そのため、モザイクの適用範囲を制限しなければならない。
  • 時間的には、タイムライン上で動画を分割する。

  • 画面領域的には「切り抜き」フィルタを使う。

切り抜きフィルタを使うと新たな問題が生じる。
動画が一部だけになり、他の部分が表示されない。
これに対処するために、動画をコピーしておいて、元の画像の上に切り抜いたモザイク画像を重ねるようにする。

「なんだ簡単じゃん。」と思っても、言うは易し、行うは難し。
例として、「Kalitaコーヒーミルを電動工具で駆動する方法」で使った動画の1/4"のナットを、モザイクにしてみよう。
以下で説明していく。

ブロジェクトを作る

shotcutで動画を編集するには、プロジェクトを作って行う。
こだわり度にもよるが、やり直すかもしれないし、使ったフィルタ等の設定を後から見直すかもしれない。
とにかくプロジェクトを作ろう。
shotcutを起動すると、以下のような画面が表示される。
起動時、画面の中心のペインが「新規プロジェクト」になっている。
「プロジェクトのフォルダ」で、プロジェクトフォルダを作るダイアログが表示される。そこで、フォルダを作る。すでにフォルダがあるなら、それを選択する。
「プロジェクト名」を"CoffeeMill_mosaic"とした。
その下の「開始」ボタンをクリックすれば、プロジェクトでの作業が始まる。


元動画ファイルを開く

画面左上の「ファイルを開く(O)」をクリックする。
ファイルダイアログが表示されるので、元の動画を開く。
上記例では、"CoffeeMill2.mp4"を選んでいる。
ファイルを選択して、「開く」をクリックする。

以下のように、中央のペインで動画の再生が勝手に始まる。
動画の下の「||」ボタンで止める。


タイムラインに動画の一部を取り込む

中央のペインで、取り込む動画の範囲を調整する。
動画の下のバーの両端の「▶|」と「|◀」 を調整して範囲を決める。
調整したら、下の方にある大きな「+」記号をクリックして、取り込む。
下の「タイムライン」に動画が取り込まれる。


トラックをコピーする

概要で述べたように、モザイク処理は、元の動画にモザイク化した画像の一部を重ねることで行う。
そのため、まず同じ動画のコピーを作成する。
トラックの左端のカラムを右クリックするとポップアップが現れる。
「トラックの操作」→「映像トラックを追加」をクリックする。
新たな空っぽのトラック「V2」が作られる。

トラック「V1」の動画部分をクリックして、選択されている状態(細い赤枠で縁取り表示される)にする。
この状態で右クリックして「コピー」を選ぶ。

次に先程追加した「V2」の何もないところをクリックする。 この状態で、中央の動画の「|◀」ボタンをクリックし、「再生ヘッド」を先頭に戻しておく。
メニューから、「編集」→「貼り付け」を選ぶ。
これでV2にコーピーが入る。
トラックの表示をみてもピッタリあっている。

うっかり、再生ヘッドを先頭にせずに「貼り付け」をすると、ずれた位置に貼り付けられてしまう。
この場合、動画をクリック&ドラックして前にもってくればいい。

説明が妙に長いが、やっていることはトラックのコピーだ
それを意識してやれば、そんなに難しいことでもない。


V2の音声をミュート

このままでは音声まで2重に入る。
不要なので、ミュートする。
V2のスピーカー アイコンをクリックする。


モザイクをかける時間範囲を切る

V2上で再生ヘッドを移動させながら、モザイクの範囲の最初と最後で、分割する。
以下は、モザイクの開始部分で分割をしているところ。
1/4"ナットが現れる先頭に再生ヘッドを移動して、「再生ヘッドで分割」ボタンをクリックすると、上記のようになる。

それ以外の部分は残しておいてもいいが、削除してしまっても良い。
私は削除している。


モザイクの画像範囲を切り抜く


画像の一部を切り抜くには、「切り抜き」フィルターを使う。
画面左側のペインのフィルタタブをクリックして、「フィルター」を表示させる。
その後、上記「+」をクリックするとフィルタの追加になる。

上の「映像」ボタンをクリックして、その下の一覧から、「切り抜き:四角形」をクリックする。
これで切り抜きができる。

フィルタをかける動画の先頭を表示させると、中央の動画表示に白い四角い枠が表示される。
この四角い枠は、四隅の白い部分をクリック&ドラッグすると範囲を調整できる。
調整して、ナットをつまむ指だけにした状態。
下のタイムラインもよく見てほしい。この操作は動画の先頭で行っている
以降、ナットの移動に合わせて、モザイクの範囲をずらしていく。

また、切り抜き範囲外が真っ黒になっている。
これは「内部余白の色」が黒になっているためだ。
以下のように、切り抜きフィルタの「内部余白の色」の「透明」ボタンをクリックする。
これで、V1の画像が透けて見える。


モザイクをかける

モザイクフィルタを追加する。
まず、再度フィルタの「+」ボタンを押す。

今度は「映像」「モザイク」とクリックする。
「切り抜き:四角形」フィルタに加えて、「モザイク」フィルタも適用される。


ナットを追跡する

動画の中のナットは動いているが、モザイクの範囲は動いていない。
そのため、このままではナットが見えてしまう。
時間と共にモザイクの範囲を動かすには、キーフレームの機能を使う
「切り抜き:四角形」フィルタを選択し直し、「位置」と「サイズ」の右にある「ストップウオッチ」アイコンをクリックする。
これで、キーフレームの設定モードになる。

動画を少し進めてナットが切り抜きの範囲からはみ出たら、動画の白枠内の中心にある「●」をドラッグして、ナットにかぶせるようにする。

途中はリニア補間されるので、飛び飛びの位置を指定していけばいい。
設定できたら、再生してモザイクが正しくかかっていることを確認しよう。

この再生処理は重い。
2重に動画を読むし、加工もしているのだ。Full-Spec Hi-Vision動画の場合、このFolio13はギリギリだ。
簡易表示は実際の動画と違うかもしれないので、何度か確認したほうが良い。


モザイク入り動画を生成する

ここまでくれば、shotcutで動画編集をしたことのある人なら、誰でも解るだろう。
左のペインで、「書き出し」タブをクリックし、「ファイルの書き出し」ボタンをクリックする。
ファイルダイアログが表示されるので、適切に名前を入力して、「保存」ボタンをクリックすると、動画の生成が始まる。
右端のジョブの表示のアイコンが緑のチェックマークになったら、動画が完成している。


出来上がった動画がこんな感じ。

元の動画(全体)は、こんな感じ。


Ubuntu18.04で説明したが、Ubuntu20.04でも大した違いはないだろう。
ついでに、shotcutはWindowsでも使えるマルチプラットホームアプリだ(そのせいでビルドが面倒くさい)。
基本が解れば、どのプラットホームでも使えると思う。

簡単な内容だと思って書き始めて、大作になっちゃったな。なんでこうなっちゃうんだろう?
なるべく簡単に書こうとして、あえて細かい部分を省略した。それらを箇条書きで示す。
  • フィルタは数が多いので、目的のフィルタを選ぶのが大変だ。その時のために「お気に入り」機能がある。
  • 切り抜きフィルタは、位置だけではなくサイズ(っていうか形)を変えることもできる。
  • 切り抜きには「切り抜き:四角形」以外もある。
  • キーフレームの修正や削除もできる。
  • キーボードショートカットを覚えれば、作業効率が上がる。

細かな部分については、試しに色々やって、体で覚えるのが良い。
Hi-Vision動画は情報量が多く扱いにくい。この10年選手では、できなくはないが、色々きつい。
5年くらい前のPCなら、M.2スロットがある。Core -i7等を使ったフラグシップ機ならM.2 SSDとの組み合わせて、使いやすい環境を作ることができる(電源がダメになっていなければ)。

履歴:
2021/06/20 全体的に見直した。簡単な事でも文書で書くのは難しい。文才がある人がうらやましい。