====== DevTerm ======
===== 概要 =====
[[https://www.clockworkpi.com/devterm|DevTerm]] は、[[https://www.clockworkpi.com|Clockwork Pi]] が開発し販売している、小型PCの組み立てキットである。
{{::devterm:devterm.jpg?400|}}
製品は、部品の状態で届けられ、ユーザ自身が組み立てて完成させる必要がある。
組立には、特殊な工具は必要なく、プラモデルのように、ランナーにつながっている部品を切り離すためのニッパーやカッター、バリを落とすためのカッターややすりといったものがあれば充分である。
コアモジュールをねじ止めするためのねじが付属しているが、ねじ止めは必須ではなく、ほとんどの場合ねじをとめなくても問題はない。
コアモジュールは、[[https://www.raspberrypi.org|Raspberry Pi]] CM3互換のものが利用可能で、CM3の他、Clockwork Piによって実装された、A04, A06, D1 などのモジュールも存在している。
2022年6月現在、CM4をDevTermに装着するためのアダプターも販売されており、CM4をコアモジュールとして利用することも可能である。
1280x480の横長の液晶、タッチタイプするにも、両手持ちでの親指タイプするにも、微妙なサイズのキーボード、独特な操作感のポインティングデバイス、ゲームパッド、内蔵サーマルプリンター、18650電池x2本と、絶妙な仕様のハードになっている。
===== インストール =====
==== ユーザ作成他 ====
正規版の Armbianは、ユーザcpiがオートログインする設定になっている。
((しかもパスワードも cpi である。そのうえ、sudo はパスワード不要となっている。))
当然、危険性の高いユーザは、速攻でつぶす必要がある。
# groupadd -g 1000 users
# useradd -u 1000 -g 1000 -s /bin/bash -c 'Hiroyuki ARAKI' araki
# vigr
(ここで、cpiが所属しているグループすべてに、自分を足す。)
# passwd -l cpi
ホスト名も変えるなら変えておく。
$ sudo hostnamectl set-hostname venus
ホスト名を venus にするなら、上記のようにする。
==== 速度制限問題 ====
DevTerm の A06コアは、1.8GHzのA72コアx2 と 1.4GHzのA53コアx4 および 800MHzのMali T864GPUを搭載しているハイパフォーマンスコアであると説明されている。
が、起動してすぐに気づくと思うが、/proc/cpuinfo を見ると、A53コアが4つしか見えていない。
速度は1.008GHzに制限されている。
しかも、Mali T864 GPUも200MHz駆動である。
これでは、メモリが多いだけのA04である。
((A04はA53コアx4))
これは、常に全速力で駆動していると、発熱がひどくて使い物にならない懸念があるため、実用的に問題のなさそうなレベルまで性能を落としているためである。
ハード的には、スペック通りのものが搭載されており、それを開放するための道具も用意されている。
$ git clone https://github.com/clockworkpi/DevTerm.git
$ sudo install -m0755 DevTerm/Code/A06/devterm-a06-gearbox /usr/local/sbin
このようにして、devterm-a06-gearbox をインストールする。
$ devterm-a06-gearbox
Current Status:
+-----------------------------------+-----------------+-----------+
| Cortex-A53 | Cortex-A72 | Mali-T860 |
+--------+--------+--------+--------+--------+--------+-----------+
| CPU 0 | CPU 1 | CPU 2 | CPU 3 | CPU 4 | CPU 5 | GPU |
+--------+--------+--------+--------+--------+--------+-----------+
|1008 MHz|1008 MHz|1008 MHz|1008 MHz| OFF | OFF | 200 MHz |
+--------+--------+--------+--------+--------+--------+-----------+
CPU Governor: schedutil GPU Governor: simple_ondemand
とすれば、現在の設定を表示する。
ヘルプで、設定可能なプリセットを得ることができる。
$ devterm-a06-gearbox -h
Usage: devterm-a06-gearbox [OPTION]...
Show or set the CPU operating frequency,online status and GPU operating frequency for DevTerm A06.
-s, --set [n] set a speed mode between the number 1-6:
1 for simple writing tasks with long battery life.
2 for browsing most websites with long battery life.
3 for most 2D games and emulators.
4 for playing videos and 3D games.
5 for performance-first tasks.
6 for max performance, max power (usage).
Examples:
Set to mode 1, single LITTLE core @600MHz(max), GPU@200MHz.
$ devterm-a06-gearbox -s 1
設定の変更は、管理者権限が必要なので、sudo して行なう。
-s 6で最高速、-s 3が通常利用向きな設定である。
ただし、GPUは400MHz駆動となり、出荷時のA53x4 (1.008GHz) + GPU 200MHz という設定には戻せない。
あまり問題はないと思うが、どうしても必要なら、devterm-a06-gearbox を修正すればそういうプリセットも作ることは可能である。
==== 日本語化 ====
標準のArmbian 21.04では、ユーザcpiがオートログインする設定であるため、初回起動時にロケールやタイムゾーンの設定が行われない。
タイムゾーンの設定は、以下のようにして行う。
$ sudo dpkg-reconfigure tzdata
日本時間にするには Asia/Tokyo を選択する。
~/.bashrc や ~/.profile などにも設定を加えておく。
TZ=Asia/Tokyo export TZ
日本語化には、language packを導入すると同時にフォントを追加する。
$ sudo apt install -y language-pack-ja
$ sudo apt install -y \
fonts-noto \
fonts-ipafont \
fonts-ipaexfont \
fonts-vlgothic \
fonts-takao \
fonts-hanazono \
fonts-horai-umefont \
fonts-komatuna \
fonts-konatu \
fonts-migmix \
fonts-motoya-l-cedar \
fonts-motoya-l-maruberi \
fonts-mplus \
fonts-sawarabi-gothic \
fonts-sawarabi-mincho \
fonts-umeplus \
fonts-dejima-mincho \
fonts-misaki \
fonts-mona \
fonts-monapo \
fonts-oradano-mincho-gsrr \
fonts-kiloji \
fonts-mikachan \
fonts-seto \
fonts-yozvox-yozfont \
fonts-aoyagi-kouzan-t \
fonts-aoyagi-soseki \
fonts-kouzan-mouhitsu \
ttf-mscorefonts-installer
$ sudo apt install -y fcitx5 fcitx5-mozc fcitx5-config-qt fcitx5-frontend-qt5 fcitx5-frontend-gtk2 fcitx5-frontend-gtk3 fcitx5-frontend-gtk4
最後に、~/.bashrcや ~/.profile に環境変数を設定しておく。
LANG=ja_JP.UTF-8 export LANG
LC_MESSAGES=ja_JP.UTF_8 export LC_MESSAGES
LC_ALL=ja_JP.UTF-8 export LC_ALL
GTK_IM_MODULE=fcitx5 export GTK_IM_MODULE
QT_IM_MODULE=fcitx5 export QT_IM_MODULE
XMODIFIERS=@im=fcitx5 export XMODIFIERS
DefaultIMModule=fcitx5 export DefaultIMModule
fcitx5は自動起動されないので、~/.config/autostart/fcitx5.desktop を以下の内容で作成して、Xのセッションをログアウトしてログインしなおす。
[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=fcitx5
Comment=
Exec=/usr/bin/fcitx5
RunHook=0
StatusNotify=false
Terminal=false
Hidden=false
これで、fcitx5-mozc による日本語入力ができるようになる。
==== Armbian Jammy (22.05) ====
=== フルスピード問題 ===
Armbian 22.05用のカーネルイメージは、A06のプロセッサーを全速力で駆動する設定で起動する。
すなわち、1.8GHz A72x2 + 1.4GHz A53x4 + Mali T864 800MHz での駆動である。
勿論、全速力で利用し続けられれば、大変に素晴らしいのだが、電池は食うわ、何より、あまりの発熱に、大体数分で、過熱によりシャットダウンされてしまう。
幸い、devterm_a06_gearbox は利用可能なので、以下の設定を root の crontab にいれておく。
((devterm_a06_gearboxは /usr/local/sbin にインストールしてあるものとする。))
@reboot /usr/local/sbin/devterm_a06_gearbox -s 3 > /dev/null 2>&1
これで、1.008GHz A53x4 + Mali T864 400MHz の設定で動作を開始する。
== ファンの制御の有効化 ==
Jammy には、デフォルトでは、ファンの制御のための機能が入っていない。
メールやSNS程度の処理を涼しい部屋でしている程度ならファンなしでも問題はないが、平常運転を行うにはファン制御は不可欠である。
ファン制御のための仕組みは GitHubで提供されている DevTerm/Code/devterm_fan_daemon_cpi_a06 の下にあるので、これをインストールすればいい。
$ sudo install -m 0755 temp_fan_daemon_a06.py /usr/local/bin
$ sudo cp etc/systemd/system/devterm-fan-temp-daemon-a06.service /etc/systemd/system
$ sudo systemctl enable devterm-fan-temp-daemon-a06.service
$ sudo systemctl start devterm-fan-temp-daemon-a06.service
後は、daemonが温度を監視して、必要に応じてファンをON/OFFする。
=== 標準でサポートされないもの ===
DevTerm 標準のOSは Armbian 21.04 ベースであるため、2022年5月現在既にサポート外になっている。
DevTerm A06向けに [[https://www.armbian.com/devterm-a06/|Armbian 22.05]] が配布されており、イメージファイルを、microSDカードに焼くことで利用可能となっている。
基本的に、標準のものと大きな違いはなく、デスクトップ版は XFCE4ベースの軽量な環境であり、日本語化も可能である。
ただし、2022年6月現在、配布されているイメージでは以下のものがサポートされていない。
* 内蔵サーマルプリンター
* イヤホンを差し込んでもスピーカがオフにならない。(イヤホンとスピーカの両方から音が聞こえる)
=== 日本語化 ===
== 言語パックの追加 ==
イメージファイルはOEM用のイメージが入っているため、初回起動時に、root のパスワード、デフォルトユーザの設定、タイムゾーン、言語などは設定されるため、日本語を選んでいれば、言語パックは勝手にインストールされているはずである。
万一されてないようであれば、ふつうに apt でインストールすればよい。
$ sudo apt install language-pack-ja
== フォントのインストール ==
初回起動時に、IPAフォントは導入されているはずであり、最低限の日本語表示は可能となっているが、追加のフォントもインストールしておく。
追加フォントによって、表示はよりすっきりした形になるので、とりあえず入れておくことを推奨する。
$ sudo apt install -y \
fonts-noto \
fonts-ipafont \
fonts-ipaexfont \
fonts-vlgothic \
fonts-takao \
fonts-hanazono \
fonts-horai-umefont \
fonts-komatuna \
fonts-konatu \
fonts-migmix \
fonts-motoya-l-cedar \
fonts-motoya-l-maruberi \
fonts-mplus \
fonts-sawarabi-gothic \
fonts-sawarabi-mincho \
fonts-umeplus \
fonts-dejima-mincho \
fonts-misaki \
fonts-mona \
fonts-monapo \
fonts-oradano-mincho-gsrr \
fonts-kiloji \
fonts-mikachan \
fonts-seto \
fonts-yozvox-yozfont \
fonts-aoyagi-kouzan-t \
fonts-aoyagi-soseki \
fonts-kouzan-mouhitsu \
ttf-mscorefonts-installer
== fcitx5 ==
日本語入力に関しては、iBusだったり fcitx だったりを利用している例が多く、どれが正解なのかは判然としないので、好みに合わせて選べばいいと思う。
ただし、fcitx に関しては、fcitx5が後継として存在しており、いまさら使用すべきではないだろう。
ここでは fcitx5 を使うことにする。
日本語変換エンジンとしても、様々に存在してはいるが、Mozc が最もポピュラーなのではないかと思うので Mozcを利用する。
以下のようにまずはモジュールを導入する。
$ sudo apt install -y fcitx5 fcitx5-mozc fcitx5-config-qt fcitx5-frontend-gtk2 fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5
インストールしただけでは、自動起動してくれないので、以下の内容で、~/.config/autostart/fcitx5.desktop を作成しておく。
[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=fcitx5
Comment=
Exec=/usr/bin/fcitx5
RunHook=0
StatusNotify=false
Terminal=false
Hidden=false
一旦セッションをログアウトしてログインしなおせば、fcitx5が起動され、タスクバーにキーボードのアイコンが現れる。
何らかのWindowにフォーカスを持って行って、Ctrl+SPACEを押せば日本語入力に切り替わるはずである。
もし、反応しないクライアントがあった場合は、クライアント用のフロントエンドが入っていないか、クライアント側のバックエンドに不足があるかである。
[[https://ja.libreoffice.org/|LibreOffice]] に関しては、LibreOffice側のバックエンドの問題である。
古の書には、環境変数を設定せよとあるが、おそらく今時は見ていない。
念のため以下のように設定しているが、多分なくても大丈夫。
fcitx5をfcitxとしていても全く機能に違いはなかったし、多分……。
GTK_IM_MODULE=fcitx5 export GTK_IM_MODULE
QT_IM_MODULE=fcitx5 export QT_IM_MODULE
XMODIFIERS=@im=fcitx5 export XMODIFIERS
DefaultIMModule=fcitx5 export DefaultIMModule
== LibreOfficeのバックエンド ==
Armbian のデスクトップ環境には [[https://ja.libreoffice.org/|LibreOffice]] が最初から入っている。
が、バックエンドが不足しているため、fcitx5が反応しない。
GTK3用のバックエンドをインストールすることで fcitx5が反応するようになる。
$ sudo apt install -y libreoffice-gtk3
当然ではあるが、fcitx5-frontend-gtk3 が入っていないとダメである。
=== サーマルプリンターの有効化 ===
サーマルプリンターモジュールは、[[https://www.clockworkpi.com/devterm|DevTerm]] に標準装備されており、ある種のアイデンティティでもあるので、実用性はさておき、利用できないとなると、何か損をしているような気分にさせられる。
Obsoleted な Armbian 21.04 を使えばプリンターは使えるが、古いOSほど問題の多いものはないので、ここでは何とか Jammyベースで動かすことを考える。
調べていくと、devterm_thermal_printer.elf が /dev/spidev2.0 にアクセスできずに落ちている。
確かに、そんなデバイスファイルは存在しない。
このため、カーネルの再構築が必要になる。
また、/dev/spidev* を利用可能にするパッチも必要となる。
カーネルをリビルドするために、[[https://docs.armbian.com/Developer-Guide_Build-Preparation/|ガイド]] に従って作業を行う。
まず、Ubuntu Jammy (22.04) x64 の環境を用意する。
ここで、注意すべきは、ARM64 ではなくx64であることである。
クロス開発が基本であることと、20.04LTS (Focal)などではだめだということである。
また、WSL2も対象外であり、WSL2上で構築しようとすると、WSL2は対象外であるといってビルドは失敗する。
環境としては、[[https://www.oracle.com/jp/virtualization/technologies/vm/downloads/virtualbox-downloads.html|VirtualBox]] が推奨されているが、Windowsを利用しているなら Hyper-Vを使う方が簡単だろう。
いずれにしても、Ubuntuの環境を構築したら、以下のようにして、作業場所を準備する。
$ sudo git install -y git
$ mkdir ~/work
$ cd ~/work
$ git clone --depth 1 https://github.com/armbian/build.git
$ cd build
基本的に、そのままリビルドすれば最新版のカーネルが手に入るが、それではここでの目的を達成できない。
[[https://github.com/yatli/arch-linux-arm-clockworkpi-a06|パッチ]] が提供されているので、持ってきて、作業領域にコピーしておく。
$ git clone https://github.com/yatli/arch-linux-arm-clockworkpi-a06.git ~/work/a06
$ mkdir -p userpatches/kernel/rockchip64-current
$ cp ~/work/a06/linux-clockworkpi-a06/0033-rockchip-spidev.patch userpatches/kernel/rockchip64-current
パッチは、userpatches の下にあるものが適宜適用されるので、後は特に何かする必要もない。
手順に従ってビルドするだけである。
$ sudo ./compile.sh BOARD=clockworkpi-a06 BRANCH=current RELEASE=jammy BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_ONLY=yes KERNEL_CONFIGURE=no
あとは、勝手に必要なパッケージを持ってきて、カーネルのビルドを行う。
終わると output/debs の下に、パッケージが作成されているので、DevTerm にコピーして、インストールする。
なお、公式から配布されているイメージでインストールされていたパッケージは以下のとおりである。
カーネルのヘッダーやらソースやらは特にインストールされていなかったので、必要がなければインストールする必要はない。
なお、いくつかのパッケージは「ダウングレードになる」といわれた。
ダウングレードするか、それらは除くかは、各自判断されたい。
わたしは、既存のものを残すことにしておいた。
armbian-bsp-cli-clockworkpi-a06
armbian-config
armbian-firmware
armbian-zsh
linux-dtb-current-rockchip64
linux-image-current-rockchip64
linux-libc-dev
linux-u-boot-current-clockworkpi-a06
再起動すると、/dev/spidev3.0 ができている。
ん、3.0?
wiringPi のソースコードでは A06 なら /dev/spidev2.0 にアクセスするとなっているので、このままでは動かない。
$ cd ~/work
$ git clone https://github.com/clockworkpi/DevTerm.git
$ cd DevTerm/Code/devterm_wiringpi_cpi
ここで、wiringPi/wiringPiSPI.c の113行目を以下のように修正する。
113: snprintf(spiDev, 31, "/dev/spidev3.%d", channel) ;
そして、ビルドしてインストールする。
$ make
$ sudo make install
更に、当然、devterm_thermal_printer.elf も新しいライブラリを利用するようにビルドしなおしてインストールする。
$ cd ~/work/DevTerm/Code/thermal_printer
$ make
$ sudo install -m 0755 devterm_thermal_printer.elf /usr/local/bin
$ sudo cp etc/systemd/system/devterm*.service /etc/systemd/system
$ sudo systemctl enable devterm-socat.service
$ sudo systemctl start devterm-socat.service
$ sudo systemctl enable devterm-printer.service
$ sudo systemctl start devterm-printer.service
この時点で、何か文字を /tmp/DEVTERM_PRINTER_IN に書き込めばプリンターに出力されるはずである。
されなければ何か問題が起きている。
$ echo -en "Hello World.\n\n\n\n\n\n\n\n\n" > /tmp/DEVTERM_PRINTER_IN
動作の確認が取れたら、cups にプリンターを登録する。
プリンターの名前は何でもいいが、URIは
serial:/tmp/DEVTERM_PRINTER_IN?baud=115200+bits=8+parity=none+flow=none
にする。
ドライバーは、clockworkpi CPI-58 が既に登録されているので、そのまま一覧から選択すればいい。
なお、このままでは印刷しても何も起きない。
データはキューに入るが、プリンターが接続されてないんじゃない? みたいなことを言われるだけである。
原因はAppArmorにある。
これが、cupsが /tmp/DEVTERM_PRINTER_IN へアクセスすることを妨げている。
以下の二行を、/etc/apparmor.d/local/usr.sbin.cupsd に追加する。
/tmp/DEVTERM_PRINTER_IN wr,
/dev/pts/1 wr,
あとは、apparmor をリロードしておく。
$ sudo service apparmor reload
これで、cups 経由でプリンターを利用することが可能となる。
==== RISC V環境(D1) ====
=== 概要 ===
RISC VモジュールはD1コアを使用した、1GBのメモリを持つモジュールである。
GPUは内蔵せず、クロックは1GHzなので、きわめて性能は低い。
そのため、添付されている環境は TWM ベースのごく軽量な環境であるが、日本語化も可能ではある。
Ubuntu をベースとしているようではあるが、apt update && apt upgrade すると、大量に更新がかかり、**再起動した時点で全く起動しなくなる**ので、これはやってはならない操作である。
RISC V環境そのものが整備途上であるため、RISC V環境のテストベッドとして利用するなどの用途に限って利用するべき環境である。
==== トラックボールが壊れた ====
久しぶりに DevTermを起動すると、トラックボールが上下、左へは動くが右へ動かなくなってしまった。
トラックボールユニットは、ボールと四方向に配置された磁気ローラー、そして基板側にはその磁器ローラの回転を読み出すセンサーという構成になっている。
期待される問題は右への回転がローラに伝わってないパターンだ。これなら基板側には問題がないのでローラ周りを掃除したりすれば直る可能性がある。
まあ、実際掃除では治らなかった。
しかたがないのでググってみるとPIM447というトラックボールユニットが DevTermのものに酷似している。
スイッチサイエンスでは在庫なしだが、DigiKeyとマルツからは買えるようなので発注する。
{{::devterm:trackball.jpg?400|DevTermのトラックボールとPIM447}}
{{::devterm:devterm_trackball_pim447.jpg?400|DevTermのトラックボールとPIM447}}
届いたものを比べてみれば、ほぼ同じ。
早速、ボール部を入れ替えてみるとあっさり復活。
もしトラックボールの不具合にお悩みの方がいらっしゃれば。