PiPO X9s (12V 版)に Ubuntu Desktop 20.04 をインストール

以前買ってきた PiPO X9s に Ubuntu Desktop 20.04 をインストールした。その際、デバイス周りで設定が色々必要だった。なお前回の記事にもある通り、 X9s と呼ばれるものでもマザーボードが新しくなっており、 X9s という名前でも全くデバイスの情報が出てくるのでウェブ上の情報では混乱することがあるようだ。今回は電源電圧が 12V のものである。

数十秒でスリープしてしまう現象

まず、 Ubuntu のインストーラーを起動した時点で、操作するしないに関わらず数十秒でスリープしてしまう現象が起きて、そのままでは操作がままならなかった。調べてみると、 /proc/acpi/button/lid/LID0/state というファイルに closed である旨が書かれていた。どうやら lid スイッチが見えており、これが closed として認識されているために、ラップトップのふたを閉じた時の動作が行われているようだった。

どうやら似たようなことが起こるデバイスは他にもあるようだ:razer-blade-stealth-linux/ubuntu-18-10.md at master · rolandguelle/razer-blade-stealth-linux に書かれていた。基本的には button.lid_init_state=open という起動オプションを渡すと良いようだ。インストーラや初回起動時は GRUB のメニューから手でこのオプションを追加し、インストール完了後に /etc/default/grub の GRUB_CMDLINE_LINUX_DEFAULT に button.lid_init_state=open を追加して、 update-grub で生成して解決した。

無線関係

WiFi については前回記事と同様、日本で合法に使用できないと思われる内蔵 WiFi を無効化して USB WiFi を使用することにした。Ubuntu 20.04 では GUI から WiFi を有効にする際、内蔵 WiFi と USB WiFi を別々に設定できたため、一応そのままでも USB WiFi のみを使用することができると思われるが、networking – How to disable WiFi interface with netplan? – Ask Ubuntu を参考に、以下の設定で無効にした。(wlan1 として見えていた時に wlan1 を無効したら、 wlan0 として見える時もあったので両方書いた)

$ cat /etc/network/interfaces
auto wlan0
iface wlan0 inet manual
        pre-up ip link wlan0 set down
        pre-down ip link wlan0 set down
        down ip link wlan0 set down

auto wlan1
iface wlan1 inet manual
        pre-up ip link wlan1 set down
        pre-down ip link wlan1 set down
        down ip link wlan1 set down

Bluetooth は使わないので普通に設定画面から Bluetooth を無効化した。

Sileadtouch

タッチパネルについては sileadtouch が使われている。Ubuntu 20.04 には silead というモジュールがデフォルトでインストールされていたが、機器ごとに固有となるファームウェアを /lib/firmware/silead/mssl1680.fw に配置する必要があるようだ。

ファームウェアについては onitake/gsl-firmware: Firmware repository for Silead touchscreen controllers の tools/scanwindrv で SileadTouch.sys を読み込ませて出力されたものを利用した。SileadTouch.sys は最初にインストールされていたものだが、一応 PiPO のウェブページからリンクされている Baidu のクラウドストレージに置かれたイメージファイルからも復元はできる。なお、解像度などの設定が書き込まれたファームウェアを作る fwtool は標準の silead モジュールとは別のドライバを使う時のもののようだ。NANOTE P8でLinuxを動かすメモ – 信頼できる発行元を参照した。

firmwre_00.fw を /lib/firmware/silead/mssl1680.fw に配置した後、 modprobe -r silead して modprobe silead すれば、反応はするようになった。ただし、先ほどの NANOTE P8 の記事と同様、この状態ではタッチ位置が大きくずれる(タッチパネル全体の認識が画面の左上の矩形領域にマッピングされているようだった)ので、キャリブレーションを行う必要があった。キャリブレーションには xinput-calibrator パッケージ(universe リポジトリにあり、 Live USB では apt-add-repository universe する必要があった)の xinput_calibrator を用いるが、そのままだと設定ファイルを書いてもキャリブレーションが反映されなかった。なお、 xinput_calibrator は DPI を 150% にした状態では正しく動かなかったが、 100% の状態で設定したパラメータを 150% の状態で使っても問題はなかった。

一時的な反映については、マルチディスプレイ環境での液晶タブの調整 – yu_izumi’s blogに記載されている方法で行列に変換し、 Coordinate Transformation Matrix の形式に変換するととりあえず意図したとおりのところがタップされるようにはなった(ただしこのページの数式の係数の 0.5 は今回は不要だった)。minX, maxX といったパラメーターが、実際の広大な入力の値域のうちどこからどこまでが実際の画面であるかのパラメーターとみなして、元のキャリブレーションパラメータで導出される画面上の座標を新しいキャリブレーションパラメータで導出されるはずの座標に変換する行列を作るイメージ。

恒久的な反映としては、 xorg – Touchscreen calibration fails on Ubuntu 20.04 / PixelBook – Ask Ubuntuに書かれているように、 xserver-xorg-input-libinput を削除して xserver-xorg-input-evdev をインストールし、再起動してから xinput_calibrator を実行すると xinput_calibrator の出力形式が変わるようだ。 evdev の方を入れた状態で出力したファイルを /usr/share/X11/xorg.conf.d/99-calibration.conf に保存して再起動すると、正しく認識されるようになった。

ただし、これでもスリープ後等のロック画面などでは正常にタッチパネルが使えていないように見える。

(追記)Firefox では XINPUT2 の指定有無に関わらずあまりきちんと認識してくれないように見える。chromium そのまま問題なく認識してくれそうだ。

スクリーンキーボード

おそらくハードウェア固有の話ではないが、タッチパネルのみのデバイスでキーボードを繋がず運用したいときに必要になるスクリーンキーボードについて、 Ubuntu の設定の Universal Access のところから Screen Keyboard を有効にできるが、ファンクションキーどころかカーソルキーも見当たらず、それらを有効にする方法も見当たらなかった。

ウェブで調べてみた限りだと、以前のバージョンの Ubuntu でデフォルトだった OnBoard をインストールしてそちらを使っている人もいるようだ。こちらはこちらでテキスト入力画面で自動で起動する設定が試した限りだと動作しないが、キーが足りないよりは良いので一旦は OnBoard を使ってみることにした。

(追記)Ubuntu 20.04 + GNOME で、物理キーボードなしでタッチスクリーンを用いた場合、 OnBoard 使用中でも GNOME 標準のスクリーンキーボードが出てくるようだ。

その他

バッテリー残量が見えているが、 PC 自体を動かすためのバッテリーは搭載していないと思われるので何の数字か謎。84% などといった数字が見えており放置しても変化しないが、再起動すると変化することもある。(配送時の航空関係の申告はリチウム金属電池であってリチウムイオンではなかったし、 AC アダプタへの電源供給を止めると一瞬で電源が落ちる。また、 Windows 10 からはバッテリは見えなかったと記憶している。問い合わせで仕様を確認した際に no battery かと聞いたら 40mah と言っていたが、この理由からボタン電池ではないかと思っている。)

その他、試した限りだと microSD カードリーダー、 USB ポート、音量ボタン、電源ボタン、内蔵スピーカー、イヤホン端子は正常に認識されて動作しているようだ。手前の Windows ロゴ(Win10 では使えていた)は、この方法でセットアップした後にタッチしても何も起こらず、 xev でも何の反応もないようだ。

スリープ・復帰もそれ自体は正常に動作しているように見える。ただし、タッチパネルのところで言及した通り、スリープした際にロックしているようになっているとログイン画面では正常にタッチパネルが使えない。スリープしてもロックしないように設定すれば問題ないようだ。ログイン画面についてはキーボードを使ってもうまくログインできないようだったが、そもそもロックが必要な使い方をしない想定なので、自動ログイン ON、スリープ時にもロックされないようにしてそれ以上は追わないことにした。

挙動については  RAM4GB で Windows ほど何をするのも重いということにはならなかったが、 Firefox で試した限りでは YouTube の 1080p 動画は厳しいようだ。

(追記:そもそも存在を完全に忘れいていたが、 Win10 で使えていた加速度センサーは Ubuntu でも認識されているらしく、本体の向きを変えると画面の向きも変わるようだ。ただし、横にしたときの画面回転は想定通り[誰の?]動いているようには見えない。いずれにしてもタブレットパーツの流用の都合で設置されていると思わしきセンサーであって、少なくとも僕にとっては必要なセンサーではないので、正しく動作させるための検証をするつもりはない。)