Ubuntu Weekly Recipe

第544回GPD PocketにUbuntuをインストールする

第543回ではGPD PocketにUbuntu MATEをインストールしました。しかしながら第543回の末尾でも言及したように、Ubuntu MATEではないGNOME Shell版のUbuntuもインストールできます。今回はUbuntu MATEのカスタマイズ部分を確認しつつ、Ubuntu 18.10をGPD Pocketにインストールしてみましょう。

図1 Ubuntu 18.10がインストールされたGPD Pocket
画像

GPD Pocket版では何をやっているのか?

まずはGPD Pocket版がどのようなカスタマイズを施しているか確認しましょう[1]⁠。

GPD Pocket版Ubuntu MATEのインストールイメージはWimpy's Worldのこちらのシェルスクリプトを用いて構築されています。これはISO_INで指定されたイメージ(ubuntu-mate-18.10-desktop-amd64.iso)を展開し、必要な設定ファイルを書き込み、再度ISOファイル(ubuntu-mate-18.10-desktop-amd64-gpd-pocket.iso)として構築し直しているスクリプトです。

つまりこのスクリプトの中身を理解すれば、GPD Pocket用に何をやっているかがわかります。もちろんISO_INを変更すれば、別のISOイメージにも適用可能です。

それではスクリプトの中の重要な点を見ていきましょう。

ディスプレイの設定

まずはディスプレイの設定です。GPD Pocketで採用しているディスプレイはタブレット用のディスプレイを採用しているらしく、縦置きが標準の設定です。このためX.orgに時計方向に右回転する設定を行っています。

具体的には/usr/share/X11/xorg.conf.d/40-gpd-pocket-monitor.confを作成し、Monitorセクションに次のような内容を記述しています。

# GPD Pocket
Section "Monitor"
  Identifier "DSI-1"
  Option     "Rotate"  "right"
EndSection

# GPD Pocket2
Section "Monitor"
  Identifier "eDP-1"
  Option     "Rotate"  "right"
EndSection

このうちDSI-1がGPD Pocket用の設定で、eDP-1がGPD Pocket2の設定です。GPD Pocket 2ではCPUがIntel Atom x7-Z8750からIntel Core m3-7Y30に変わったためか、よりノートPC向けに使われているeDPインターフェースを使用しているようです。

ちなみにこの設定は、18.10上だと本来は不要になっています。実際、GPD PocketにUbuntu 18.10をインストールすると、上記の設定の有無に関係なく横置きの解像度になるよう、適切にディスプレイの回転を行います。

ちなみに現在使われているディスプレイの情報は次のように取得できます。

$ xrandr --listmonitors
Monitors: 1
 0: +*DSI-1 1229/325x768/203+0+0  DSI-I

また、設定できる解像度の一覧は次のように取得します。

$ xrandr --current
Screen 0: minimum 320 x 200, current 1229 x 768, maximum 8192 x 8192
DSI-1 connected primary 1229x768+0+0 right (normal left inverted right x axis y axis) 0mm x 0mm
   1200x1920     60.38*+
   1920x1200     59.88    59.95
   1920x1080     60.01    59.97     59.96    59.93
(中略)
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)

上記はGPD Pocket版Ubuntu MATEの結果です。これをUbuntu 18.10で実行すると、次のような結果になります。期待通り1920x1200になっている(ディスプレイとしては1200x1920を右回転している)ことがわかりますね。

$ xrandr --listmonitors
Monitors: 1
 0: +*DSI-1 1920/508x1200/318+0+0  DSI-I

$ xrandr --current
Screen 0: minimum 320 x 200, current 1920 x 1200, maximum 8192 x 8192
DSI-1 connected primary 1920x1200+0+0 right (normal left inverted right x axis y axis) 0mm x 0mm
   1200x1920     60.38*+
   1920x1200     59.88    59.95
   1920x1080     60.01    59.97     59.96    59.93
(中略)
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)

タッチスクリーンの設定

画面を回転した場合、タッチスクリーンの座標も回転しておかないと辻褄が合いません。こちらもX.orgのInputClassセクションで変更します。設定ファイルは/usr/share/X11/xorg.conf.d/99-gpd-pocket-touchscreen.confです。

Section "InputClass"
  Identifier   "calibration"
  MatchProduct "Goodix Capacitive TouchScreen"
  Option       "TransformationMatrix"  "0 1 0 -1 0 1 0 0 1"
EndSection

TransformationMatrixはアフィン変換を行う3x3の変換行列を指定します。変換しない場合は「1 0 0 0 1 0 0 0 1」です。こちらも実は18.10だと明示的な変換が不要なようです。

InputClassの設定結果は、xinput listコマンドでVirtual core pointerから「Goodix Capacitive TouchScreen」のIDを確認し、xinput list-props IDを実行すると表示されます。また一時的に設定を変更したい場合はxinput set-propを使用すると良いでしょう。

Slick Greeterの設定

Slick GreeterはUbuntu MATEで採用されているLightDMのGreeter(ログイン画面を担当するソフトウェア)です。GPD Pocketは画面サイズ(7インチ)に対して高解像(1900x1200)であるため、そのままだとログイン時の入力フォームが小さくなってしまいます。そこでSlick GreeterのHiDPIを有効化しているのがこの設定です。

/usr/share/glib-2.0/schemas/99_gpd-pocket.gschema.overrideに次の内容を記述しています。

[x.dm.slick-greeter]
enable-hidpi='on'

UbuntuではLightDMではなくGDMを利用しています。GDMで該当する設定は、org.gnome.desktop.interfaceスキーマにあるscaling-factorキーの値です。

$ gsettings get org.gnome.desktop.interface scaling-factor
uint32 0

「0」はディスプレイの解像度に合わせて自動調整するモードです。つまりUbuntu 18.10であれば特別な設定の必要なく、GDMがHiDPIモードに移行してくれます。

デスクトップのスケーリング設定

GPD Pocket版のUbuntu MATE 18.10はログイン後のディスプレイのスケーリングはxrandrコマンドで行っているようです。

まず次のような内容のシェルスクリプト「/usr/bin/gpd-pocket-display-scaler」を用意します。

#!/usr/bin/env bash

PRIMARY_DISPLAY=$(xrandr | grep "connected primary" | cut -d' ' -f1 | sed 's/ //g')
xrandr --output ${PRIMARY_DISPLAY} --scale 0.64x0.64
XRANDR_SCRIPT

これはプライマリディスプレイの解像度を0.64倍するものです。つまり1920x1200は1229x768に変換されます。コンテンツが1.5倍に表示されるというわけですね。

スクリプトに実行権限も付けています。

$ sudo chmod +x /usr/bin/gpd-pocket-display-scaler

さらにスクリプトがログイン時に実行されるよう、自動実行ファイル(/etc/xdg/autostart/gpd-pocket-xrandr.desktop)を作成しています。

[Desktop Entry]
Name=GPD Pocket Display Scaler
Exec=/usr/bin/gpd-pocket-display-scaler
Icon=user-desktop
Terminal=false
Type=Application
Categories=GTK;Settings;
StartupNotify=false
OnlyShowIn=MATE;
NoDisplay=true
Comment=Scale up the internal display on the GPD Pocket. Disable this Startup Program and log out to restore the native resolution.

Ubuntuで同様のスケーリングを行いたい場合は、同じような設定が必要になります。単純に2倍に表示したい場合は、システム設定のデバイスにある「ディスプレイ」から「HiDPI」を200%に変更するだけでも実現できます。好みの解像度に合わせて調整すると良いでしょう。

図2 システム設定のHiDPI設定
画像
図3 200%にするとタッチ操作がやりやすくなる
画像

起動オプションの変更

GPD Pocket版のUbuntu MATEでは/etc/default/grubのGRUB_CMDLINE_LINUX_DEFAULTに次のオプションを追加しています。

i915.fastboot=1 fbcon=rotate:1

i915.fastbootに1をセットすると、i915ドライバーの中でグラフィックスのモード設定を行わず、ブートローダーが設定したそれを引き継ぎます。モード設定しない分、起動ははやくなるかもしれませんが、ブートローダーで正しく設定を行っていないとGreeterやX.orgによるディスプレイの表示に問題が起きるかもしれません。

fbconの設定によってフレームバッファコンソールを回転します。

Ubuntu 18.10では原則としてどちらの設定も不要です。少なくとも起動ログを見る限り、efifbドライバーが回転済みの解像度を設定しているため、起動ログやコンソールは横置きで表示されます。スプラッシュ画面は傾いていますがこれはPlymouthの問題のような気がします。ちなみにPlymouthは0.9.4以降で待望の画面回転に対応するようです。

起動時にログイン画面を表示する

第543回でも言及しているように、GPD Pocket版のUbuntu MATEには、起動時にログイン画面が表示されない問題がありました。画面が表示されないだけで、実際に動作はしているためパスワードを入力すればログインはできます。しかしながら不便ではありました。

これに対する解決策としてRedditにGRUBの設定を行う方法が掲載されています。もし問題に遭遇している場合は参考にすると良いでしょう。

なおUbuntu 18.10の場合は上記対策は不要です。

コンソール上のフォントサイズの変更

console-setup経由で、コンソール(Ctrl-Alt-F2などを押したときの画面)で使用するフォントサイズを大きくしています。

$ sed -i 's/FONTSIZE="8x16"/FONTSIZE="16x32"/' /etc/default/console-setup

これまでと同様に、GPD Pocketが画面サイズに対して解像度が高いことによる対応です。ただしコンソールを使わないのであれば設定は不要でしょう。

もしコンソールも使い、なおかつ老眼気味であれば、設定することをおすすめします。

Wi-Fiファームウェアの設定

Wi-Fiとして使われているBCM4356のドライバはカーネルに取り込まれていますし、ファームウェアはlinux-firmwareパッケージから提供されています。しかしながら設定ファイル(/lib/firmware/brcm/brcmfmac4356-pcie.txt)が足りないために、そのままではドライバが動作しません。今のところChromium OSのコードから設定ファイルをコピーしてくるしかないようです。

Chromium OSのソースツリーからbrcmfmac4356-pcie.txtの内容をコピーし、/lib/firmware/brcm/brcmfmac4356-pcie.txtとして保存します。

次にモジュールを再ロードすれば、Wi-Fiが使えるようになります。

$ sudo modprobe -r brcmfmac
$ sudo modprobe brcmfmac

GPD Pocket版のUbuntu MATEでは最初から上記設定ファイルが取り込まれています。Ubuntu 18.10には存在しないので、手動で対応しましょう。もしUbuntuをインストールするつもりなら、LiveセッションではWi-Fiは使用せず、インストール後に設定すると良いでしょう。

GPD PocketへのUbuntuのインストール

ここまでを踏まえるとGPD PocketへのUbuntuのインストールは「Wi-Fiだけなんとかすれば最低限なんとかなる」ことがわかります。

Liveセッションでのネットワーク接続が不要なら、インストール後に設定するだけです。実はインストールされた環境に対して今回説明した設定一式を行うスクリプトも存在しますので、それを実行する手もあるでしょう。ただし本来Ubuntuには不要な設定も入ってしまうので注意が必要です。

ここではLiveセッション時はネットワークには接続せずにインストールした上で、インストール完了後に起動したタイミングで「Wi-Fiファームウェアの設定」を行うことをおすすめします。

まずはUbuntu 18.10については、普通のUbuntuと同じ方法でインストールします。USBメモリーにUbuntuのインストールイメージを書き込み、GPD Pocketを起動し、Fn+7(F7)キーを連打してブートデバイス選択画面からUSBメモリーを指定する方法です。Liveセッションの起動後に、インストーラーを実行しUbuntuをインストールします。ネットワーク設定部分はスキップしましょう。インストールが完了し、システムを再起動したら「Wi-Fiファームウェアの設定」に従って設定ファイルを取り込み、モジュールを再ロードします。

これでWi-Fiが使えるようになるはずです。Wi-Fi接続の設定を行い、インターネット通信が行えることを確認します。その後、次のような設定を行いましょう。

パッケージの更新

ネットワークに接続したタイミングで新しいパッケージのチェックスクリプトが起動します。しばらく放置するとパッケージのアップデート通知が表示されますので、それに従ってパッケージを更新しておきましょう。

言語パックの追加インストール
インストール時にネットワークが存在しないため、本来日本語環境にインストールされているパッケージの一部がスキップされています[2]⁠。そこでシステム設定の「地域と言語」にある「インストールされている言語の管理」を起動しましょう。未インストールのパッケージがあった場合は通知されるので、それに従ってパッケージをインストールしてください。

一通りインストールが完了したら再起動しておきましょう。これでUbuntu環境の完成です。あとは普段のUbuntuと同じように使えます。

おすすめ記事

記事・ニュース一覧