pomera DM250 の Linux 化のメモ

# この記事について
KINGJIM の [pomera DM250](http://www.kingjim.co.jp/pomera/dm250/) を Linux 化した手順を、自分の備忘のためにメモするものです。

4年前に書いた [DM200 の Linux 化のメモ](https://qiita.com/alt-core/items/d62c6447c607fbf6e8bf)の DM250 版です。

# DM250 の Linux 化
DM250 は基本的にはテキストライティングに特化した pomera の独自エディタが動く端末で、それだけでも十二分に価値のある製品です。しかし、内部的には組み込み Linux が動作しているようで、特殊なブート手順を踏むことで SD カード上のスクリプトを実行することができます。これを利用し、Debian を動かせるようにするインストーラが存在します。

Debian を直接触れるようになれば、X Window の利用も含め、格段にできることが増えます。なにより、好きなエディタが使い放題。

しかも、元の pomera ソフトウェアとのデュアルブートとなりますので、ATOK+各種辞書を活用したライティング専用マシンとして pomera を使いつつ、どうしてもネットに繋ぎたい時だけ Debian を立ち上げるなど、良いところ取りが可能です。

基本的には以下のページを見れば Linux 化は行えます。

- [Debian on Pomera DM200/DM250 – 記録](https://www.ekesete.net/log/?p=9504)

:::note warn
このページにも書かれていますが、メーカー保証のない利用法ですので、ハードウェアが使用不能になるリスクを理解した上で、自己責任でご利用ください。
（最初の手順でバックアップをちゃんと取っていれば、たいていのソフトウェアトラブルは元通りに復旧できるとは思いますが……）
:::

:::note info
利用者の皆さん！ 無償で Debian のイメージを準備していただけている感謝を、お金で示しましょう！！ Boost することで任意の金額で感謝を示せますよ！
 → [Debian on Pomera DM200 - ekesete.net - BOOTH](https://ekesete.booth.pm/items/616812)
（一度払ってしまうと、二度目のお布施ができない不具合をどうにかしてほしい）
:::

## この記事の独自なところ

- **パスワードを変えます**
- i3-wm を使って、キーボードだけで操作する X Window 環境を作ります

# Debian のインストール
大まかな流れは、前述のページの通りですので、箇条書き程度に。

- 事前に、Pomera の時計をだいたい正しい時間に合わせておく
    - のちのち apt update に失敗したりするので
- 16GB 以上の SD カードを購入
    - （DM250対応バージョンでは、初回起動時にパーティションが自動調整されるようになりました）
- DM200_DM250_emmc_backup_restore_v0.2.zip を展開し、backup フォルダの中身を SD カードにコピー
- 電源が切れている DM250 に差し込み、右 SHIFT + ALT + 電源ボタン（以下、起動キーコンビと呼称）を pomera のロゴが出たあと消えるまで長押し
- backup の表示が出るので、10分くらいまつ
- SD カードの backup フォルダ以下に eMMC のバックアップデータが入っているので、PC で安全な場所に退避
    - 最初は数GB程度あるが、zip で圧縮すると450MB程度に。
- SD カードの中身を全部消す。
- DM200_DM250_kernel_installer_0.2.zip を展開し、SD カードにコピー
- 電源が切れている DM250 に差し込み、起動キーコンビを pomera のロゴが出たあと消えるまで長押し
- インストールが終わるのを待つ。すぐに終わる。
- フリーのイメージライティングツール [Etcher](https://etcher.io/) をインストールしてくる
- pomera_dm2x0_debian_20220816.zip の中身の img ファイルを Etcher を使って SD カードに焼く
- SD カードを差し込み起動キーコンビ
- SD カードの自動パーティション調整が実行される
- リブートすると pomera に行ってしまうので、電源を切って起動キーコンビ
- ユーザ名 pomera / パスワード dm200 でログインできることを確認する
- sudo の設定（お好みで）
    - secure_path への追加
    - NOPASSWD

```
$ sudo visudo
secure_path に /opt/bin:/opt/local/bin を追加
NOPASSWD: を追加（お好みで）
```

- パスワード変更
    - pomera ユーザーと root のパスワードをそれぞれ自分だけのものに

```
$ passwd
$ sudo passwd
```

- ユーザ追加（お好みで）
    - pomera ユーザを使い続けたくない場合に

```
$ sudo adduser ユーザ名
$ sudo vigr
pomera が参加しているグループに新規ユーザも追加する
- video グループに追加を忘れると fbterm も startx もできなくなる
- （Debian なので ```adduser ユーザ名 グループ名``` で一発でグループへの追加もできるんですが）
```

- 起動時に自動ログインする設定（お好みで）

```
$ sudo vi /lib/systemd/system/getty@.service
ExecStart=-/sbin/agetty --noclear -a <自動ログインユーザ名> %I $TERM
```

- caps lock を ctrl にする（お好みで）

```
$ sudo vi /etc/default/keyboard
XKBOPTIONS="ctrl:nocaps"
```

- Wi-Fi 設定
    - 平文で psk を書くのも気持ち悪いので、気休めではありますが、wpa_passphrase コマンドで。

```
$ wpa_passphrase AP名 パスフレーズ >> /mnt/sd/settings/wpa_supplicant.conf
$ vi /mnt/sd/settings/wpa_supplicant.conf
いい感じにマージ
```

- 一回再起動
```
$ /sbin/poweroff
（電源が落ちたら、起動キーコンビで立ち上げ直す）
```

- apt
    - お好きな物を

```
$ sudo /opt/bin/wifi_switch on
$ sudo apt update
$ sudo apt install python3-pip zip
```

- 時刻同期

```
$ sudo apt install chrony
$ sudo vi /etc/chrony/sources.d/jp-ntp-server.sources
server ntp.nict.jp iburst
server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst
$ sudo chronyc reload sources
```

- zsh（お好みで）
    - ```apt install zsh git```
    - [Zsh + Prezto で快適コマンド環境を構築する ｜ Developers.IO](https://dev.classmethod.jp/tool/zsh-prezto/)
    - vi .zpreztorc で theme をお好きなものに
    - vi .zshrc で path に /opt/bin /opt/local/bin を足したり、sudo の補完が効くように ```zstyle ':completion:*:sudo:*' command-path /opt/bin /opt/local/bin 以下略``` を設定したり

# i3 でキーボード操作の X Window 環境

## マウスエミュレーション

この後 i3 + urxvt で、基本操作はキーボードだけですむ環境を整えますが、とはいえ、X Window 上では、マウスが必要になることはあります。ということで、以下の参考ページでオススメされている keynav をインストールします。

[ポインティングデバイスのないKING JIM ポメラDM200でX Windowのマウス操作をする方法](http://hitoriblog.com/?p=52262)

```shell-session
$ sudo apt install keynav
$ cd; wget http://hitoriblog.com/.keynavrc
```

X を立ち上げるどこかで keynav も起動するようにしておきます。

この .keynavrc の詳細はリンク先を参照いただくとして、少し手を入れてみました。

```
Hiragana_Katakana start,cursorzoom 20 20
```

keynav を起動する度にマウスカーソル位置がリセットされるのが直感的ではなかったのと、使わないカタカナキーをショートカットとして活用しようということで、カタカナキーを押すだけでマウスモードに入るように。
マウスカーソルを vi 移動にして、ついでに、移動する度にマウスカーソルが付いてくるようにするのは以下のような感じです。

```
h move-left 10,warp
j move-down 10,warp
k move-up 10,warp
l move-right 10,warp
```

あとは Enter で左クリック、BackSpace で右クリックなど。お好みで。

```
space warp,click 1
shift+space warp,doubleclick 1
ctrl+space warp,drag 1
Return warp,click 1,end
shift+Return warp,doubleclick 1,end
ctrl+Return warp,drag 1,end
#Henkan_Mode warp,click 1,end
#Hiragana_Katakana warp,click 3,end
BackSpace warp,click 3,end
```

Space に keynav から抜けずにクリックする機能を持たせて、メニュー操作などをやりやすくしてみました。

# ウィンドウマネージャーを i3-wm に

デフォルトでは xfce4 が入っていますが、マウスのない DM250 ではどうにも操作がしにくい印象があります。また、軽量なウィンドウマネージャとは言え、メニュー操作などの重さも気になりました。

キーボード操作を主体とするウィンドウマネージャと、軽量なウィンドウマネージャは、集合が被っていまして、タイル型ウィンドウマネージャと呼ばれるジャンルを形成しています。dwm や、 awesome、xmonad などが人気どころかと思いますが、今回は i3 を試してみました。

## 参考サイト

[i3 wm タイル型ウィンドウマネージャを使うことのメモ | Jenemal Notes](http://malkalech.com/i3_window_manager)
[i3 - ArchWiki](https://wiki.archlinux.jp/index.php/I3)
[i3 Window Manager を使ってみて分かったおすすめ設定集 - Qiita](https://qiita.com/gyu-don/items/d61b03e0222a7f1ce9f7)
[i3: i3 User’s Guide](https://i3wm.org/docs/userguide.html)

## インストール

```
sudo apt install i3
```

## .xinitrc

```text:~/.xinitrc
export LANG=ja_JP.UTF-8
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus

xrdb -merge -I$HOME ~/.Xresources

ibus-daemon -drx&
keynav&
#exec startxfce4
exec i3
```

.Xresources を i3 は自動で読み込んでくれないようなので、自前で書く必要があります。（2018年調べ。2022年現在は違うかも）

ibus の設定は xfce4 のときのままで、Mozc も問題なく動きました。

## 初回起動

初回起動時に .config/i3/config を作るか聞かれるので作ります。i3 のモディファイアキーは Win を選択すると、DM250 の Menu ボタンが使われますので、オススメです。

## デフォルトのキーバインドでの使い方

- Menu+d でランチャーが立ち上がるので、起動したいプログラム名を入力して立ち上げます。
    - Menu+Enter でターミナルが立ち上がります。
- プログラムを立ち上げる度に画面を分割して立ち上がってくるので、おもむろに Menu+w を押すと、それらが一気にタブになります。
- 同一画面内のウィンドウフォーカスの移動は Menu+矢印キー です。 Menu+jkl; でもOK。
- workspace という仮想デスクトップの概念もあります。Menu+数字キーで切り替わります。
    - 現在のウィンドウを workspace に移動させるには Menu+Shift+数字キーです。簡単。
- Menu+f で最大化することもできます。

とにかくキーボードでサクサク操作できることが魅力です。

# i3 のカスタマイズ

## config

自動生成されたコンフィグファイルを見れば、キーカスタマイズの方法は一目瞭然だと思います。使いやすいようにカスタマイズしましょう。

それ以外の設定項目について簡単に。

```
font pango:FontAwesome,Ricty Diminished,DejaVu Sans Mono 8
```

Ricty Diminished という見やすい日本語フォントが入っていますので、ありがたく使わせていただきます。アルファベットも Ricty は見やすいと思いますので、DejaVu より優先させています。また、後で電池アイコンで Font Awesome のものを使っているため、設定しています。apt のパッケージ名は fonts-font-awesome です。

```
bar {
        status_command i3status
        mode hide
}
```

i3 のステータスバーは十分に minimal だとは思いますが、mode hide を指定することで、Menu キーを押さないと表示されないようにもできます。



```
bindsym $mod+Tab workspace next
bindsym $mod+Shift+Tab workspace prev
```

Menu+Tab でサクサク画面を切り替えられるようにします。

```
hide_edge_borders smart
```

１画面に１つしかアプリがない場合に、余計な枠を消します。素晴らしい。

```
assign [class="Firefox-esr"] web
```

特定のアプリを特定の名前の workspace 上で実行するようにします。Menu+数字 で移動できなくなるので一長一短ですね。先ほど設定した Menu+Tab で行き来はできます。
Menu+数字でダイレクト移動できるように、workspace ごとに役割を決めてしまって、ロード先を数字で指定してしまう手もあるかと思います。
class 名などは xprop コマンドで調査可能です。

## i3bar でのバッテリ残量表示

一番下のステータスバーは i3bar が表示しますが、表示内容の整形は i3status が担当します。

```text:~/.config/i3status/config
order += "battery 0"
...
battery 0 {
        path = "/sys/class/power_supply/battery/uevent"
        format = "%status %percentage"
        format_down = "No battery"
        status_chr = "⚡ CHR"
        status_bat = " BAT"
        status_unk = "? UNK"
        status_full = " FULL"
        low_threshold = 10
        threshold_type = "percentage"
}
```

## rxvt-unicode-256color

uxterm も十分に軽量ではありますが、より軽さとキーボード操作を求め、rxvt-unicode をインストールします。

```
$ sudo apt install rxvt-unicode-256color
```

### キーボードでのバッファコピー
ログをキーボード操作でさかのぼるのは tmux を使っても可能ですが、urxvt の perl 拡張 [keyboard-select](https://github.com/muennich/urxvt-perls) を使えば単体でキーボード操作が可能です。

```
$ git clone https://github.com/muennich/urxvt-perls.git
$ mkdir -p ~/.urxvt/ext/
$ cp urxvt-perls/keyboard-select ~/.urxvt/ext
```

実際の利用設定は次項で。

### カスタマイズ

```
$ vi .Xresources
urxvt*font:     xft:Ricty Diminished:size=14
urxvt*letterSpace:        -1
urxvt*faceSize:       12
urxvt*background:             black
urxvt*foreground:             snow

urxvt*saveLines:              3000
urxvt*scrollBar:              false
urxvt*cursorBlink:            true
urxvt*cursorUnderline:        true
urxvt*pointerBlank:     true
urxvt*fading:   40
urxvt.iso14755:               false
urxvt.pastableTabs:           false

urxvt.perl-ext-common:        xim-onthespot,keyboard-select
urxvt.inputMethod:            ibus
urxvt.preeditType:            OnTheSpot

urxvt.keyboard-select.clipboard:        true

urxvt.keysym.Shift-Up: command:\033]720;1\007
urxvt.keysym.Shift-Down: command:\033]721;1\007

urxvt.keysym.Mod4-Hiragana_Katakana: perl:keyboard-select:activate
```

デフォルトで入っている xim-onthespot プラグインの設定でターミナル上でインラインで漢字入力ができるようになります。

keyboard-select の設定では Menu+カタカナ でバッファのキーボード操作モードに入ります。操作方法は vi ライク。
また、今回はしていませんが、perl:keyboard-select:search のキーボードショートカット設定をすれば、直接バッファを上方に検索してさかのぼれるようになります。

ちょっとだけ上に遡りたくなったときのために、Shift+上下で1行単位で画面をスクロールできるようにも設定しました。

`urxvt.iso14755: false` は Shift+Ctrl で ISO14755 モードという直接コード入力モードに入ってしまうのを無効化するためのものです。

`urxvt.pastableTabs: false` は、urxvt を使っている最中に、ターミナル上の emacs で7文字目から8文字目にかけてスペースを入力したときのカーソルの動きがおかしくなる不具合への対応です。 参考: [[SOLVED] Emacs + rxvt-unicode Cursor Bug](https://bbs.archlinux.org/viewtopic.php?id=130404)

### Ambiguous Width 対応

■やら→やらが半角の幅で表示されて色々ズレるのが East Asian Ambiguous Width 問題です。

最近 Mac の標準 Terminal にもこの問題の対応するオプションが追加されたりと、世間的には認知が広まって対応オプションも広まっているのですが、urxvt の作者は locale か libc で対応すべきことだと[主張しているよう](http://jlug.ml.debian.devel.narkive.com/FRBZuYf7/east-asian-width-problem-at-rxvt-unicode-ml)で対応オプションを用意するつもりはないようです。

ということで、[hamano/locale-eaw: East Asian Ambiguous Width問題と絵文字の横幅問題の修正ロケール](https://github.com/hamano/locale-eaw)を利用してロケール側で対応します。

```
$ wget https://raw.githubusercontent.com/hamano/locale-eaw/master/UTF-8-EAW-FULLWIDTH.gz
$ sudo cp UTF-8-EAW-FULLWIDTH.gz /usr/share/i18n/charmaps/
$ sudo vi /etc/locale.gen
...
#ja_JP.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8-EAW-FULLWIDTH
...
$ sudo locale-gen
```

## X の自動起動設定

1番目のttyだったときに、startxを自動的に実行します。
bash 使いの皆さまは、適宜読み替えていただければ。

```zsh:.zlogin
(前略)
if [[ "$SHLVL" -eq 1 && "$XDG_VTNR" -eq 1 ]]; then
    startx
fi
```

# キーボード操作対応ブラウザ

DM200 のころは uzbl を愛用していたのですが、Debian 11 では apt で標準では入らなくなってしまいました。

DM250 はメモリも潤沢なので、firefox-esr を素直に使います。コメントや関連記事一覧をJSで動的に読み込むようなサイトが重いですが、静的なサイトは普通に使える印象です。

## Firefox のインストール

```
$ sudo apt install firefox-esr firefox-esr-l10n-ja
```

## Vimium C

キーボードで firefox を操作できるアドオンを導入します。
いくつかあるのですが、メンテが続いているものとして Vimium C を選んでみました。

https://addons.mozilla.org/ja/firefox/addon/vimium-c/

### インストール方法

firefox-esr を起動した後に、アドオンマネージャーから Vimium C をインストールします。

### 基本操作

- o サーチパネルを開く
- O サーチパネルを開き、新しいタブで読み込む
- hjkl いつもの移動
- H/L ヒストリー戻る/ヒストリー進む
- f ヒントモードを起動し、ページ内の要素に対応するキーを押すだけで選んだことにする（超大事）
- J/K タブ切り替え
- x タブを閉じる
- ? 操作ヘルプ表示

## レイアウト調整

Firefox　のタブとツールバーが縦幅を取り過ぎているので、レイアウトを調整したくなります。

URL欄に ```about:config``` を入力し、```layout.css.devPixelsPerPx```に0.9などを入力することで、全体的に表示サイズを調整できます。個別のページの表示サイズも変わりますので、お好みで。

あとは非推奨ですが、```browser.compactmode.show```をTrueに設定した上で、「その他のツール」＞「ツールバーをカスタマイズ...」から「UI密度」を「コンパクト（未サポート）」にすることで、タブとツールバーのみをコンパクトにすることもできます。未サポートと明言されているので、トラブルは覚悟の上で。


## クラウドストレージとの同期 (追記 2024/09/16)

Dropbox との同期を [rclone](https://rclone.org/) を用いて行います。
Dropbox のみならず、他のメジャーなクラウドストレージとも同様に同期を取れるはず。

最新版を使った方が何かと良いので、apt ではなく [Install](https://rclone.org/install/) に従って、直接インストールしてきます。
（curl がなければ、apt で入れましょう）

```
$ sudo -v ; curl https://rclone.org/install.sh | sudo bash
```

## rclone の初期設定

```
$ rclone config
```

出てくる指示に従えば分かると思います。最初に聞かれる設定名は dropbox などとつければOKですが、今後、コマンド実行時に何度も書くので、分かりやすい名前にしましょう。

rclone の App ID を使って全体を共有したい場合は、client_id や client_secret はデフォルトの空文字列のまま進めれば問題ありません。

セキュリティのために Dropbox の専用の領域だけを共有できる権限で運用したい場合は、独自に Dropbox の App ID を取得して、その client_id でサインインする方法もあります。[Get your own Dropbox App ID](https://rclone.org/dropbox/#get-your-own-dropbox-app-id) を参考にしてください。

デフォルトでも独自 App でも、設定を進めていくと、最後に Dropbox から token を取得する方法を聞かれます。pomera 上の Web ブラウザで認証ページを開いて認証する方法と、認証用のコマンドをコピペして、PC上の rclone でそれを実行して PC の Web ブラウザで認証を実行する方法があります。

我が家の pomera ではブラウザとして普段使っていない chromium が開いてしまい、ちゃんとレンダリングできませんでしたが、ログに出ている URL をコピペしてきて、firefox-esr で開いたら、無事に認証できました。

## rclone を用いた一方向同期

rclone sync を使うと、一方向で同期をしていくことは簡単にできます。

```
$ rclone sync dropbox: $HOME/Dropbox
```

## rclone を用いた双方向同期

双方向で同期を取りたい場合は、rclone bisync を使えば双方向同期ができます。
ただし、beta で、制約もあるので、本番環境では使わないでね、という状況です。Google Drive, Dropbox, OneDrive, S3, SFTP などの限られたバックエンドでテストされているとのこと。他の制約などは [Limitations](https://rclone.org/bisync/#limitations) を参照してください。

最初に一回、--resync オプションをつけて実行します。これで双方の状態データベース的なものを ~/.cache/rclone/bisync に作成します。'--dry-run' をつけることで、同期自体は行いません。

```
$ rclone bisync --resync --dry-run dropbox: $HOME/Dropbox
```

一度、同期状態が確認できたら、--resync を外して同期を行います。
-i は更新がある際に個々に確認を取るモードです。

```
$ rclone bisync -i dropbox: $HOME/Dropbox
```

## rclone を用いた仮想ファイルシステム

fuse を使った仮想ファイルシステムとしても rclone は振る舞えます。
私は pomera を常時ネットワークに繋いでいないので、この使い方はしていませんが、ご参考まで。詳しくはドキュメント [mount](https://rclone.org/commands/rclone_mount/) を参考にしてください。

```
$ sudo apt install fuse3
$ mkdir $HOME/DropboxDrive
$ rclone mount dropbox: $HOME/DropboxDrive &
```


# 小ネタ

## 日本語入力の設定変更を GUI でしたい
mozc を GUI で設定できるツールを apt で入れてきます。

```
$ sudo apt install mozc-utils-gui
$ /usr/lib/mozc/mozc_tool --mode=config_dialog
```


## wifi_switch のログがターミナルを侵食してきて困る場合

```/opt/bin/wifi_switch``` 内で実行している wpa_supplicant コマンドは ```-B``` オプションでデーモンモードで実行されますので、スクリプトの当該行の末尾の ```&``` を取って、代わりに ```-B``` をつけると、標準出力にログが漏れてこなくなります。

必要なログを見落とすかも知れませんので、トラブったら戻して確認してください。


## 無変換キーが時々効かなくて困ったら

無変換キーが時々効かない件で困っている方がいらっしゃったら、無変換＋F1/F2でバックライト輝度を変えられるツールと干渉しているかもしれません。 /etc/init.d/keychecker を消してみると治る可能性があります。


## バックライト輝度の設定は慎重に

```sudo /opt/bin/backlight <数字>``` でコマンドラインでバックライト輝度を変更できますが、常用可能なのは50〜100の範囲です。

40とかうっかり入れてしまうと、画面がほぼ見れなくなります。壊れたわけではないので、おちついて 100 に戻すコマンドを打ってください。

前述の keychecker(実体は /opt/bin/fnkey) を殺していなかったら、無変換+F1/F2で画面輝度変えられますが、次回以降のリリースでは keychecker はなくなる予定とのことです。


# DM200 と変わったところ

- 私の使用個体の問題だったかもしれないのですが、下りで600kbpsしか出なかった WiFi が 10Mbps 以上出るようになりました。
- 私の使用個体の問題だったかもしれないのですが、「S」「H」「U」の3キーを同時に押すと入力していない「A」が入ってしまう問題が起こらないので、対策する必要がなくなりました。


# その他に、気になっていること

## 電源管理

https://wiki.archlinux.jp/index.php/%E9%9B%BB%E6%BA%90%E7%AE%A1%E7%90%86#.E3.82.B9.E3.83.AA.E3.83.BC.E3.83.97.E3.83.95.E3.83.83.E3.82.AF

このあたりを読むと、systemd で電源ボタンのハンドリングと、スリープ前後にフックを入れられそうなので、sus2ram スクリプトを置き換えられないかと期待しています。

が、どうもサスペンド周りを攻めると、サスペンドから復帰後10分くらい放置すると、キーボード操作を受け付けなくなることがあり、思案中です。（電源ボタンを長時間長押しでシャットダウン可能）

なお、DM250は、X起動状態でただ24時間放置しても、まだ3割くらいバッテリーが残っているため、毎日充電する習慣がある方なら、そもそもサスペンド不要なんですが。

## GPU利用

/etc/modules 見る限り、mali.ko は読み込まれていそうなので、あとは fbturbo を入れれば、GPU アクセラレーション効くのでは・・・？

と思ったのですが、[xserver-xorg-video-fbturbo](https://deb-multimedia.org/dists/stable/main/binary-arm64/package/xserver-xorg-video-fbturbo) を入れるだけでは、ARM の NEON や VFP による最適化は効いても、それ以上のアクセラレータを使えていないようで、あまり芳しくない結果に。Allwinner のチップセットなら、fbturbo を入れるだけで 2D アクセラレータも効くようなのですが、Rockchip だと何も使えていないようなんですよね……。x11perf では、fbdev と比して、速くなったり遅くなったりの結果です。

（追記 2022/8/26）
https://twitter.com/ichinomoto/status/1562811024499429380 によると、やはり fbturbo の作り直しが必要そうでした。
xf86-video-armsoc で対応する方針ということは、[Rockchip Wiki](https://opensource.rock-chips.com/wiki_Graphics) に書かれている対応方針ということでしょうか。OpenGL を使って 2D を高速化する glamor は 1.16 から xorg 本体にマージされており、1.20.11 がインストール済みですので、上手くいけば 2D のアクセラレーションも効きそうです。

##### トライする人のためのメモ

- 最新の素の xf86-video-armsoc をビルドするだけなら簡単（[参考](https://qiita.com/ikwzm/items/2a0fbfd2938a893e57d4)）
```
$ apt install libdrm-dev libudev-dev libxext-dev pkg-config x11proto-core-dev x11proto-fonts-dev x11proto-gl-dev x11proto-xf86dri-dev xutils-dev xserver-xorg-dev quilt dh-autoreconf debhelper
$ git clone git://anongit.freedesktop.org/xorg/driver/xf86-video-armsoc
$ cd xf86-video-armsoc
$ ./autogen.sh
$ make
$ sudo make install
$ sudo vi /usr/share/X11/xorg.conf.d/99-armsoc.conf
Section "Device"
        Identifier      "TEKITOU"
        Driver          "armsoc"
EndSection
```

- 簡単じゃないところ
  - 仮想端末に一度ログインしてから startx を普通に実行するだけでは、xf86-video-armsoc が /dev/dri/card0 を読めずに失敗する。同様のレポートがされている[ODROIDのフォーラム](https://forum.odroid.com/viewtopic.php?t=7101)によると、systemd-logind が先に card0 を開いてしまっているのが影響している模様。ここにあるように ```startx -- :0 vt2``` と別の仮想端末で開くようにすれば回避できているっぽい。
  - xf86-video-armsoc に、この環境で動かすための drmmode の実装を追加せねばならない。card0 が名乗っているデバイス名は "mali_drm"。
  - /dev/mali に video グループへのグループパーミッションが出ていないので、/etc/udev/rules.d/ に設定足さないといけない気がしているが、↑のdrmmodeが未実装のため、それが問題になるところまでたどり着けていない。また、ワークアラウンドで vt2 で startx するには sudo する必要があり、そもそも本件が問題にならない気もしている。