PinePhoneの初期設定

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

LinuxディストリビューションをPinePhoneにインストールする手順、および、推奨される設定を記載する。


Tow-Bootのインストール (Mobianをインストールする場合)

Mobianをインストールする場合、OSをインストールする前に、SDカードにTow-Bootのイメージを焼いた後にPinePhone / PinePhone Proの本体にTow-Bootをインストールする必要がある。

2022年4月3日以降、MobianではU-Bootがサポートされていない。
そのため、Mobianのイメージとインストーラには、デバイス固有のU-Boot(ブートローダ)が含まれていない。

PinePhoneではeMMCにインストールすることを推奨、PinePhone ProではSPIにインストールすることが推奨される。

Tow-Bootは、MobianをSDカードから起動する前に行う必要がある。

また、Tow-Bootは、JumpDriveの機能も備えている。

  1. 最新のTow-Bootをダウンロードする。
    最新のTow-BootをGithubからダウンロードする。
    PinePhoneの場合 : pine64-pinephoneA64-YYYY.MM-XXX.tar.xz
    PinePhone Proの場合 : pine64-pinephonePro-YYYY.MM-XXX.tar.xz

  2. ダウンロードしたファイルを解凍して、解凍したディレクトリに移動する。
    PinePhoneの場合、SPIフラッシュが存在しないため、mmcboot.installer.imgを使用する。
    PinePhone Proの場合、SDカードにspi.installer.imgを使用する。

  3. SDカードにtow-bootのイメージを書き込む。
    Tow-BootのイメージをSDカードに書き込む。(ddコマンドやBalena Etcher等のソフトウェアを使用する)

    ddコマンドの例
    PinePhoneの場合 : sudo dd if=mmcboot.installer.img of=/dev/XXX bs=1M oflag=direct,sync status=progress
    PinePhone Proの場合 : sudo dd if=spi.installer.img of=/dev/XXX bs=1M oflag=direct,sync status=progress

  4. PinePhoneにSDカードを挿入して、PinePhoneを起動する。


※注意 1 (PinePhone Proの場合)
PinePhone Proの起動順序は、SPI -> eMMC -> SDカードの順であるため、Tow-Bootを使用してインストールするために、標準の起動順序を変更する必要がある。
これは、Pinephone Pro(Explorer Edition以降)の場合、REボタンを長押しすることにより、行うことができる。

Tow-BootをSPIにインストールすることにより、Pinephone ProはOSのストレージと競合することなく、標準規格に準拠したブートが使用できる。

PinePhone Proの電源を切り、SDカードを挿入した後、Pinephone Proの[RE]ボタンとボリュームの[−]ボタンを同時押下して、電源を入れる。

※注意 2 (PinePhone Proの場合)
起動直後において、PinePhone Proが振動してLEDが赤く点灯するまで(その後、LEDが黄色に点灯する)、[RE]ボタンとボリュームの[−]ボタンを同時押下し続ける必要があることに注意する。
PinePhone Proを充電しながら行うことを推奨する。

インストーラGUIが起動するので、[Install Tow-Boot to eMMC Boot]または[Install Tow-Boot to SPI Boot] - [Start Installation]を選択する。
この時、インストール前にストレージを消去する必要は無い。
ストレージの消去は、Tow-Boot(またはSPIパーティションにインストールされた他のプラットフォームのファームウェア)のアンインストールに使用することができる。

インストール完了後、SDカードを取り出す。


OSのダウンロード

インストールするLinuxディストリビューションのイメージをダウンロードする。



PinePhone本体へのインストール

JumpDrive

内蔵のeMMCは、postmarketOSのDanct12とMartijnによるJumpDriveユーティリティを使用してOSを書き込むことができる。

JumpDriveはMicroSDから起動して、PinePhoneがコンピュータに接続されると内蔵のeMMCを公開する。
マウントされたeMMCにOSをフラッシュする手順は、他のストレージの場合と同様である。

ddコマンド、balenaEtcher、Gnome Disks等のソフトウェアを使用してOSを書き込むことができる。

JumpDriveは、以下の公式Webサイトからダウンロードできる。
(PinePhoneの場合は、pine64-pinephone.img.xzをダウンロードする)
https://github.com/dreemurrs-embedded/Jumpdrive/releases/

  1. JumpDriveのイメージをダウンロードして解凍する。
  2. balenaEtcher等を使用して、MicroSDにJumpDriveのイメージを書き込む。
  3. MicroSDをPinePhoneに挿入して、PinePhoneを起動する。
  4. PCとPinePhoneをUSBケーブルで接続する。
  5. PinePhoneのストレージ(例: /dev/mm〜、dmesg、GNOME disks等でデバイス名およびアンマウントされていることを確認する)に、選択したOSのイメージファイルを書き込む。
  6. 書き込みが完了した後、PinePhoneをPCから外して、PinePhoneをシャットダウンする。
    この時、MicroSDを取り出す。
  7. PinePhoneの電源を投入して、eMMCから起動する。


※備考
JumpDriveは、インストールに失敗した場合のレスキューイメージとしても機能する。
レスキューイメージとして使用するには、172.16.42.1にTelnetで接続した後、rootfsをマウントして修正すればよい。

MicroSDからインストール

  1. MicroSDに任意のOSを書き込みした後、PinePhoneにMicroSDを挿入して、PinePhoneを起動する。
  2. Webブラウザを起動して、任意のOSのイメージをダウンロードする。
    または、ターミナルを起動して、OSのプロジェクトをgit clone <OSのプロジェクトのURL>する。
    Gitを使用する場合は、OSをビルドする必要がある。
  3. 以下のコマンドを実行して、ダウンロードまたはビルドしたOSのイメージをeMMCに書き込む。
    通常、現在のカーネルでは、MicroSDは/dev/mmcblk0eMMCは/dev/mmcblk2となる。
    sudo dd if=<インストールするOSのイメージ> of=/dev/mmcblkX bs=1M status=progress # XはeMMCの番号ラベル
  4. 書き込みが完了した後、PinePhoneをシャットダウンして、MicroSDを取り出す。
  5. PinePhoneの電源を投入して、eMMCから起動する。


MicroSDカードへのインストール

LinuxディストリビューションをMicroSDカードにインストールすることにより、PinePhoneにインストールせずにOSを試すことができる。
これは、LinuxデスクトップにおけるLive USBやLive DVDのような位置付けである。

MicroSDカードを使用する前に (共通)

もし、PinePhone向けLinuxディストリビューションのインストールに使用したmicroSDカードを使用する場合、以下の手順を実行する。

  1. GPartedやpartedコマンド等を使用して、新しいMS-DOSパーティションを作成する。
    以下の例では、partedコマンドを使用したフォーマットおよびパーティションを作成している。
    1. フォーマットを行うmicroSDカードを選択する。
      sudo parted /dev/sdX
      例: sudo parted /dev/sdb

    2. microSDカードをフォーマットする前に、mklabelコマンドを実行してラベルを作成する必要がある。
      (parted) mklabel gpt

    3. 次に、パーティションを作成する。
      以下の例では、パーティション名を"primary"、FAT32タイプ、パーティションサイズは0%から100%までとしている。
      (parted) mkpart
      パーティションの名前? []? primary
      ファイルシステムの種類? [ext2]? FAT32
      開始? 0%
      終了? 100%

    4. パーティションの作成が完了した後、printコマンドを実行して、パーティションを確認する。
      (parted) print

  2. 残存しているu-bootのデータを削除する。
    この操作を行わない場合、PinePhoneは残存しているu-bootから起動しようとすることに注意する。
    # MBRパーティションの場合
    sudo dd if=/dev/zero of=/dev/sdX bs=8k seek=1 count=4

    # GPTパーティションの場合 (GPTパーティションテーブルの場合は、8[KB]ではなく128[KB]のオフセットでインストールされる)
    sudo dd if=/dev/zero of=/dev/sdX bs=32k seek=4 count=1


Arch Linux ARM

ダウンロードしたイメージファイルから、MicroSDにArch Linux ARMをインストールする。
または、balenaEtcher等を使用する。

xzcat archlinux-pinephone-<DE名>-<バージョン>.img.xz | sudo dd bs=4M of=/dev/sdX iflag=fullblock oflag=direct status=progress; sync
または
unxz archlinux-pinephone-<DE名>-<バージョン>.img.xz
sudo dd bs=4M if=archlinux-pinephone-<DE名>-<バージョン>.img of=/dev/sdX status=progress


  • 一般ユーザ名
    alarm
  • パスワード
    123456
  • ルートユーザ名
    root
  • ルートユーザのパスワード
    不明 (※)

    最新のArch Linux ARMにおいて、スーパーユーザのパスワードは不明である。
    そのため、以下に示すコマンドを実行して、スーパーユーザのパスワードを指定する必要がある。
    sudo passwd root


Mobian

ダウンロードしたイメージファイルから、MicroSDにMobianをインストールする。
または、balenaEtcher等を使用する。

gunzip mobian-installer-pinephone-phosh-<バージョン>.img.gz または gzip -d mobian-installer-pinephone-phosh-<バージョン>.img.gz
sudo dd bs=1M if=mobian-installer-pinephone-phosh-<バージョン>.img of=/dev/sdX status=progress


  • 一般ユーザ名
    mobian
  • パスワード
    インストール時に指定する。
  • ルートユーザ名
    root
  • ルートユーザのパスワード
    不明 (※)

    最新のMobianにおいて、スーパーユーザのパスワードは不明である。
    そのため、以下に示すコマンドを実行して、スーパーユーザのパスワードを指定する必要がある。
    sudo passwd root


Manjaro ARM

ダウンロードしたイメージファイルから、MicroSDにManjaro ARMをインストールする。
または、balenaEtcher等を使用する。

xzcat Manjaro-ARM-<DE名>-pinephone-<バージョン>.img.xz | sudo dd bs=4M of=/dev/sdX iflag=fullblock oflag=direct status=progress; sync
または
unxz Manjaro-ARM-<DE名>-pinephone-<バージョン>.img.xz
sudo dd bs=4M if=Manjaro-ARM-<DE名>-pinephone-<バージョン>.img of=/dev/sdX status=progress


  • 一般ユーザ名
    manjaro
  • パスワード
    123456
  • ルートユーザ名
    root
  • ルートユーザのパスワード
    不明 (※)

    最新のManajro ARMにおいて、スーパーユーザのパスワードは不明である。
    そのため、以下に示すコマンドを実行して、スーパーユーザのパスワードを指定する必要がある。
    sudo passwd root


openSUSE Tumbleweed

ダウンロードしたイメージファイルから、MicroSDにopenSUSE Tumbleweedをインストールする。
または、balenaEtcher等を使用する。

xzcat openSUSE-Tumbleweed-ARM-PLAMO-pinephone.aarch64.raw.xz | sudo dd bs=4M of=/dev/sdX iflag=fullblock oflag=direct status=progress; sync


  • 一般ユーザ名
    pine
  • パスワード
    1234
  • ルートユーザ名
    root
  • ルートユーザのパスワード
    linux



SIMカード

Phosh

  1. まず、[設定] - [Mobile] - [Advanced]項目 - [Network Mode]から、[3G, 4G]を選択する。
  2. 次に、[設定] - [Mobile] - [Advanced]項目 - [Access Point Names]を選択する。
  3. [Access Points]画面右上の[+]ボタンをタップして、APNを設定する。


以下に、各通信会社の設定を示す。

  • IIJmio
    • 名前
      任意 (例. IIJmio)
    • APN
      iijmio.jp
    • ユーザ名
      mio@iij
    • Password
      iij
    • 認証方式
      CHAPまたはPAP
    • その他
      もし、通信ができない場合は、[MVNOの種類]に[SPN]を選択する。

  • b-mobile
    • 名前
      任意 (例. b-mobile)
    • APN
      dm.jplat.net
    • ユーザ名
      jci@jci
    • Password
      jci
    • 認証方式
      CHAPまたはPAP
    • PDP Type
      IP

  • Biglobe
    • 名前
      任意 (例. Biglobe mobile type D)
    • APN
      biglobe.jp
    • ユーザ名 (一部端末では、ID(ユーザ名)をuser@biglobe.jpに設定する必要がある。エラーが発生する場合は試すこと)
      user
    • Password
      0000
    • 認証方式
      CHAPまたはPAP
    • PDP Type
      IP (PPPは未対応)
    • APNタイプ (テザリングが利用できない場合、端末の接続設定にAPNタイプ項目が表示される場合は、以下の設定を追加で入力する)
      default,supl,dun
      ※文字列の区切りは、,(カンマ)であることに注意する。

  • OCNモバイル
    • 名前
      任意 (例. OCN mobile)
    • APN
      新コース : ocn.ne.jp
      ※従来の新コース用APNであるlte.ocn.ne.jpは、グローバルIPアドレスによる接続サービスとなるが、引き続き利用できる。
      新コース以外 : lte-d.ocn.ne.jp
    • ユーザ名
      mobileid@ocn
    • Password
      mobile
    • 認証方式
      CHAP
    • PDP Type
      IP (PPPは未対応)
    • PINパスワード
      0000(デフォルト)



microSDカードの使用

microSDカードをデータ領域として使用する場合は、ext4フォーマットのmicroSDカードを挿入する必要がある。

もし、インストール時に使用したmicroSDカードを使用する場合は、以下の手順を実行する。

  1. GPartedやpartedコマンド等を使用して、新しいMS-DOSパーティションを作成する。
    partedコマンドでのパーティション作成例を、以下に示す。
    1. microSDカードをフォーマットする前に、mklabelコマンドを実行してラベルを作成する必要がある。
      sudo parted /dev/sdX # 例: sudo parted /dev/sdb
      (parted) mklabel gpt
    2. 次に、パーティションを作成する。
      以下の例では、パーティション名を"primary"、FATfsタイプ、パーティションサイズは0%から100%までとしている。
      (parted) mkpart
      パーティションの名前? []? primary
      ファイルシステムの種類? [ext2]? FAT32
      開始? 0%
      終了? 100%
    3. パーティションの作成が完了した後、printコマンドを実行して、パーティションを確認する。
      (parted) print
  2. 次に、以下のコマンドを実行して、u-bootを上書きする。(これを行わない場合、PinePhoneは残存しているu-bootから起動しようとする)
    MBRパーティションの場合
    sudo dd if=/dev/zero of=/dev/sdX bs=8k seek=1 count=4

    GPTパーティションの場合
    sudo dd if=/dev/zero of=/dev/sdX bs=32k seek=4 count=1
  3. 最後に、GNOME DisksやYaSTパーティションマネージャを使用して、microSDカードに対して、ext4パーティションを作成する。


以下に、microSDカードを使用する手順を示す。

  1. まず、microSDカードを挿入およびPinePhoneの電源を投入して、ターミナルを起動する。
  2. 以下のコマンドを実行して、microSDカードをマウントする。
    sudo mkdir /mnt/sdcard && sudo mount -t ext4 /dev/mmcblk0p1 /mnt/sdcard
  3. 次に、ホームディレクトリの内容にmicroSDカードへコピーする。
    sudo cp -aR /home /mnt/sdcard
  4. microSDカードの一時的なマウントポイントをアンマウントする。
    sudo umount /mnt/sdcard
  5. microSDカードを、ホームディレクトリへマウントする。
    sudo mount -t ext4 /dev/mmcblk0p1 /home
  6. microSDカードのUUIDを取得して、/etc/fstabファイルにエントリを追加する。
    UUIDを取得するには、以下のコマンドを実行する。
    sudo blkid /dev/mmcblk0p1

    /etc/fstabファイルに、以下の内容を追記する。
    (最後のパラメータの2は、fsckに他のエントリの後で確認するように指示している)
    UUID=a2c1f977-0405-4ae1-8169-639b8ae53e3b /home ext4 defaults 0 2
  7. 最後に、microSDカードにあるホームディレクトリのユーザ名とグループ名を、現在使用しているユーザ名とグループ名に変更する。
    sudo chown -R mobian:mobian /home/mobian


上記の設定により、microSDカードはホームディレクトリに持続的にマウントされる。
(eMMCのホームディレクトリにある全てのファイルを持つ)


Wi-FiのIPアドレスの設定

Phosh

[設定]を開いて、[Wi-Fi]を選択する。
現在接続しているWi-FiのSSID名の右にある歯車ボタンをタップする。
[IPv4]項目において、IPアドレス、サブネットマスク、ゲートウェイ、DNSの設定を行う。


初期設定

Manjaro

アップデートにおいて、ミラーサーバを設定する。

sudo pacman-mirrors --continent
sudo pacman-key --init
sudo pacman -Syyu


Manjaroを使用する場合、必要となる基本的なライブラリをインストールする。

sudo pacman -S --needed make cmake rsync base-devel gcc gdb gdb-common zip unzip lz4 meson ninja python python-pip sdl2 zlib ffmpeg


KB151キーボードライブラリを使用する場合は、以下に示す手順を実行する。(2023/06現在、KB151は使用できない)

  1. KB151キーボードライブラリをインストールする。
    sudo pacman -S --needed ppkb-tools

  2. KB151キーボードライブラリのデーモンを自動起動する。
    sudo systemctl enable ppkb-i2c-inputd.service

  3. 標準のキーボードライブラリを無効にするため、ブートオプションpinephone-keyboard.disable_inputを追記する。
    sudo nano /boot/boot.txt

    # /boot/boot.txtファイル
    setenv bootargs 〜 pinephone-keyboard.disable_input

  4. ブートローダを更新する。
    sudo pp-uboot-mkscr

  5. PinePhoneを再起動する。
    sudo systemctl reboot

  6. KB151キーボードライブラリを使用して入力できるかどうか確認する。


Mobian

Mobianをアップデートする。

sudo apt update
sudo apt upgrade


次に、GNOME Tweaks Toolをインストールする。
GNOME Tweaks Toolは、拡張された設定範囲を提供しており、ユーザの好みに合わせてシステムをカスタマイズすることができる。

sudo apt install gnome-tweaks


Moabianを使用する場合、必要となる基本的なライブラリをインストールする。

sudo apt install pkg-config make cmake rsync gcc gdb binutils build-essential zip unzip lz4 meson ninja-build python3 ffmpeg \
                 gnome-tweaks openvpn network-manager-openvpn network-manager-openvpn-gnome


SSHの設定

まず、OpenSSHサーバをインストールする。
Manjaro ARMでは、Phosh Beta28以降、Plasma Beta 13以降は標準でOpenSSHがインストールされている。

# Mobian
sudo apt install openssh-server

# Manjaro
sudo pacman -S openssh


OpenSSHを自動起動および開始する。

# Mobian
sudo systemctl enable ssh
sudo systemctl restart ssh

# Manjaro
sudo systemctl enable sshd
sudo systemctl restart sshd


日本語フォントのインストール

日本語フォントをインストールするために、以下のコマンドを実行する。

# Mobian
sudo apt install fonts-dejavu fonts-noto-cjk fonts-ipafont

# Manjaro
sudo pacman -S --needed ttf-dejavu ttf-droid noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra otf-ipafont otf-ipaexfont otf-ipamjfont



ディスプレイ関連の調整

ソフトウェアの自動スケーリング

Phoc 0.4.0以降、画面に収まらない大きなウィンドウを自動的に縮小することができる。
この機能は、以下のコマンドを実行して、各ソフトウェアごとに有効にする必要がある。

scale-to-fit <ソフトウェアID> on


ソフトウェアIDは、ソフトウェア自身がどのように宣言しているかによって異なる。

ソフトウェアとソフトウェアIDの関係
ソフトウェア名 ソフトウェアID
Anki anki
Calendar gnome-calendar
Cawbird cawbird
Empathy empathy
Firefox firefox-esr
Geary geary
Maps org.gnome.Maps
Mumble net.sourceforge.mumble.mumble
Nautilus org.gnome.nautilus
Totem totem
Sudoku gnome-sudoku
Chromium chromium


ソフトウェアIDを確認するには、ソフトウェアをWAYLAND_DEBUG=clientを付加して起動する。
例えば、Geditの場合は、xdg_toplevel@37.set_app_id("gedit")のような行を確認する。

Evolutionのリマインダーウィンドウのサイズを変更する場合、ソフトウェアIDは、evolution-alarm-notifyとなる。

Linmob.netには、スケーリングのテクニックの詳細が記載されている。

画面の拡大 1

ソフトウェアが画面に収まらない場合、画面を拡大して表示したい場合がある。

[設定]にある[ディスプレイ]には、100[%]または200[%]のスケーリングを選択する設定がある。
他の値を使用する場合やターミナルから操作する場合は、wlr-randrパッケージをインストールする。

sudo apt install wlr-randr


# スケーリングを1.5にする場合
wlr-randr --output DSI-1 -scale 1.5


この方法では、スケーリングは再起動するまで適用される。
小数点の数値を選択することもできるが、パフォーマンスに影響する可能性があることに注意すること。
puri.smのブログには、スケーリングをその場で簡単に変更できるソフトウェアを作成する方法についての記事がある。

画面の拡大 2

スケーリングの設定を永続的に適用する方法がある。
ただし、phoc.iniのデフォルト値が変更された場合、古い値になってしまう可能性があることに注意する。

標準の設定は、/usr/share/phosh/phoc.iniファイルにある。
標準の画面のスケーリングを変更するには、/usr/share/phosh/phoc.iniファイルを/etc/phosh/phoc.iniファイルにコピーして、以下の箇所を変更する。

sudo mkdir -p /etc/phosh
sudo cp /usr/share/phosh/phoc.ini /etc/phosh/phoc.ini


sudo vi /etc/phosh/phoc.ini


 # /etc/phosh/phoc.iniファイル
 
 # ...略
 
 [output:DSI-1]
 #scale = 2
 scale = 1
 
 # ...略


画面の拡大 3

wlr-randrコマンドの使用を便利にするため、yad(特に、フォーム構築オプション)を使用して、GUIソフトウェアを作成する。
これは、wlr-randrコマンドを使用して、異なるスケールを設定する一連のボタン群である。

vi ~/InstallSoftware/Scale/scale.sh


 #!/usr/bin/env bash
 
 yad --title Scale Screen --form \
     --field='Default dpi (2x scale)':fbtn "wlr-randr --output DSI-1 --scale 2" \
     --field='Low dpi (1.75x scale)!window-restore-symbolic':fbtn "wlr-randr --output DSI-1 --scale 1.75" \
     --field='Medium dpi (1.5x scale)!window-minimize-symbolic':fbtn "wlr-randr --output DSI-1 --scale 1.5" \
     --field='High dpi (1.25x scale)!window-maximize-symbolic':fbtn "wlr-randr --output DSI-1 --scale 1.25" \
     --field='Max dpi (1x scale)!view-fullscreen-symbolic':fbtn "wlr-randr --output DSI-1 --scale 1" \
     --field='Restart Phosh':fbtn "sudo systemctl restart phosh" \
     --button='Close!gtk-cancel':1


上記のシェルスクリプトを実行するデスクトップエントリファイルを作成する。

vi ~/.local/share/applications/Scale.desktop:


[Desktop Entry]
Type=Application
Name=Scale Screen
GenericName=Scale Screen
Icon=video-display-symbolic
Exec=/home/<ユーザ名>/InstallSoftware/Scale/scale.sh
Terminal=false
Categories=Utility;



オンスクリーンキーボード

Mobianには、標準でSqueekboard(オンスクリーンキーボード)が搭載されている。

Squeekboardのレイアウトは、キーボードの説明ファイルを~/.local/share/squeekboard/keyboards/terminalディレクトリに追加することにより、
簡単にカスタマイズできる。
また、ディスプレイのスケーリングが100%の場合、Squeekboardは、(us|de|...)_wide.yamlファイルという追加のレイアウトを探す。

# ターミナル
~/.local/share/squeekboard/keyboards/terminal/(us|de|...).yaml
~/.local/share/squeekboard/keyboards/terminal/(us|de|...)_wide.yaml  (スケーリングが100%の場合)

# Emoji :
~/.local/share/squeekboard/keyboards/emoji/(us|de|...).yaml
~/.local/share/squeekboard/keyboards/emoji/(us|de|...)_wide.yaml  (スケーリングが100%の場合)


Squeekboardの設定ファイルのフォーマットは、2021年4月現在、十分に文書化されていないが、カスタマイズすることは簡単である。
https://developer.puri.sm/projects/squeekboard

既存のレイアウトを利用して、それを調整すると便利である。

すぐに使用できる設定ファイルは、以下に示すURL(特に、Squeekboardリポジトリ)にある。


ユーザがカスタマイズした設定ファイルは、2文字の言語コードの後に".yaml"というファイル拡張子を付けて保存する。
横長にカスタマイズする場合は、言語コードの後に"_wide.yaml"を付ける。
例えば、us.yamlファイルおよびus_wide.yamlファイルとなる。

設定ファイルを、~/.local/share/squeekboard/keyboardsディレクトリに配置する。

ターミナルや絵文字用にカスタマイズされた設定ファイルも同じように命名されるが、terminalディレクトリやemojiディレクトリといったサブディレクトリに配置する。
例えば、カスタマイズされたUSレイアウトは、以下のディレクトリのようになる。

  • ~/.local/share/squeekboard/keyboards/us.yamlファイル
  • ~/.local/share/squeezeboard/keyboards/terminal/us.yaml (端末のキーボード)


また、アクセシビリティとOrca screenreaderとの互換性については、いくつかの作業が必要である。


日本語入力

Mobian

Fcitx5-KKCを使用する場合

まず、FcitxおよびKKCをインストールする。

sudo apt install fcitx5 fcitx5-kkc libfcitx5-qt1 fcitx5-config-qt fcitx5-frontend-gtk4 fcitx5-configtool fonts-noto-cjk


/etc/environmentファイルまたは~/.profileファイルの最下行に、以下の内容を追記する。

INPUT_METHOD=fcitx5
XMODIFIERS=@im=fcitx5
GTK_IM_MODULE=fcitx5
QT_IM_MODULE=fcitx5

fcitx5 -d &


PinePhoneを再起動する。

PinePhoneを再起動、または、再ログインする。

ターミナルを起動して、Fcitx5の設定を行う。

QT_QPA_PLATFORM=wayland fcitx5-configtool


Fcitx設定ツールのキーボード一覧画面が表示される。(標準キーボードは削除してはならない)
[現在の言語のみ表示]チェックボックスのチェックを外す。

[+]アイコンを選択して、検索欄にkkcと入力する。
[かな漢字]キーボードを選択して、[OK]ボタンを押下する。

KKCを有効にするには、[Global Config]タブ - [Trigger Input Method]項目がある。(初期設定では、[Ctrl] + [Space])
しかし、[Ctrl] + [Space]キーはPinePhoneで使用するには快適ではないため、[Ctrl] + [LAlt]キーのような他のトリガーに変更する。

Fcitx設定ツールを終了して、外部キーボードおよびスクリーンキーボードから日本語入力ができるかどうかを確認する。

Fcitx5-Mozcを使用する場合

まず、Fcitx5とそのライブラリをインストールする。

sudo apt install fcitx5 fcitx5-mozc libfcitx5-qt1 fcitx5-config-qt fcitx5-frontend-gtk4 fcitx5-configtool


/etc/environmentファイルまたは~/.profileファイルの最下行に、以下の内容を追記する。

INPUT_METHOD=fcitx5
XMODIFIERS=@im=fcitx5
GTK_IM_MODULE=fcitx5
QT_IM_MODULE=fcitx5

fcitx5 -d &


PinePhoneを再起動、または、再ログインする。

ターミナルを起動して、Fcitx5の設定を行う。
Fcitx5の設定では、入力メソッドにMozcを追加する。

QT_QPA_PLATFORM=wayland fcitx5-configtool


日本語入力と英語入力の切り替えは、PCと同様に、[Ctrl] + [Space]キーを同時押下することで切り替えができる。

Manjaro ARM

Fcitxをインストールする。

# Fcitxをインストールする場合
sudo pacman -S --needed qt5ct qt5-translations
sudo pacman -S fcitx fcitx-mozc fcitx-gtk2 fcitx-gtk3 fcitx-qt5 kcm-fcitx

# Fcitx5をインストールする場合
sudo pacman -S --needed qt5ct qt5-translations
sudo pacman -S --needed fcitx5 fcitx5-mozc fcitx5-qt fcitx5-config-qt fcitx5-gtk fcitx5-configtool


次に、~/.pam_environmentファイル(場合によっては、/etc/environmentファイルも含む)を作成して、以下の設定を追記する。
なお、~/.xprofileファイル、~/.profileファイル、~/.bashrcファイル、~/.xinitrcファイルは設定不要である。

# Fcitxをインストールする場合
LANG=en_US.UTF-8
XMODIFIERS=@im=fcitx
XMODIFIER=@im=fcitx
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
DefaultIMModule=fcitx

# Fcitx5をインストールする場合
INPUT_METHOD=fcitx5
XMODIFIERS=@im=fcitx5
GTK_IM_MODULE=fcitx5
QT_IM_MODULE=fcitx5

fcitx5 -r


PinePhoneを再起動、または、再ログインする。

ターミナルを起動して以下のコマンドを実行する。
Fcitx5の設定では、入力メソッドにMozcを追加する。

  • Manjaro Phoshの場合
    QT_QPA_PLATFORM=wayland fcitx5-configtool
    または
    QT_QPA_PLATFORM=xcb fcitx5-configtool
  • Manjaro Plasma Mobileの場合
    fcitx5-configtool



電話帳

Evolutionの使用 (Phoshの場合)

Evolutionをインストールする。

# Mobian
sudo apt install evolution

# Manjaro
sudo pacman -S evolution


Evolutionをディスプレイにフィットさせる。
この設定を行わない場合、インポート画面が大きくなりすぎるため、表示できない。

scale-to-fit evolution on


ファイルマネージャから電話帳のファイル(.vcf拡張子)を開く。
[データのインポート]画面が起動して、インポートする連絡先が表示される。
画面下の[進む]ボタンを押下して、電話帳をインポートする。

インポート完了後は、Evolutionをアンインストールする。

# Mobian
sudo apt purge evolution
sudo apt autoremove

# Manjaro
sudo pacman -R evolution


PhoneBookの使用 (KDEの場合)

  1. Phonebookを起動する。
  2. Phonebookのメイン画面右上にあるボタンをタップして、[Import Contacts]を選択する。
  3. ファイル選択ダイアログから、電話帳ファイル(.vcf拡張子)を選択する。


Clontactsの使用

ClontactsのGithubから、Clontactsをダウンロードする。
または、git cloneコマンドを使用して、Clontactsをダウンロードする。

sudo apt install git  # Mobianのみ
git clone https://github.com/pine-clover/Clontacts.git


以下のコマンドを実行して、電話帳のファイル(vcf拡張子)をインポートする。

python3 main.py <電話帳のファイルのパス>



スクリーンショット

静止画

必要な依存関係をインストールする。

# Mobian
sudo apt install grim libnotify-bin yad

# Manjaro
sudo pacman -S --needed grim libnotify yad


以下のURLからscreenshot2appスクリプトをダウンロードして、任意のディレクトリに保存する。
https://matrix-client.matrix.org/_matrix/media/r0/download/matrix.org/rGMszhcjGTIQeZwCCaXMGMvw

chmod 755 screenshot2app

mkdir -p ~/InstallSoftware/ScreenShot2app
mv screenshot2app ~/InstallSfotware/ScreenShot2app


以下のURLからscreenshot2appスクリプトのデスクトップエントリファイルをダウンロードして、~/.local/share/applicationsディレクトリに保存する。
https://matrix-client.matrix.org/_matrix/media/r0/download/matrix.org/CMaVegElpdiMbiChKaqPRgAW

mv screenshot.desktop ~/.local/share/applications


また、screenshot.desktopファイルを以下のように編集する。

動画

画面を録画する場合は、wf-recorderをインストールする。

sudo apt install wf-recorder


画面とマイクを使用した動画を作成する場合、以下のコマンドを実行する。(SSHからでも可能)

wf-recorder --file=recording_with_audio.mp4 --audio



音量

音量を最大にしているのに、内蔵スピーカーの音が小さいように感じることがある。 この時、alsamixerを使用して、ラインアウトのゲインを調整することができる。

sudo apt install alsa-utils


alsamixerを使用する場合、以下のコマンドを実行する。

alsamixer


ミキサーが表示されたら、[F6]キーを押下して、[PinePhone]デバイスを選択する。
左右の矢印キーで[ラインアウト]を探して、上矢印でゲインを上げる。

また、[Line Out Source]でステレオではなく[Mono Dif]を選択することで、さらにゲインを上げることができる。


PinePhoneがSMSを受信しない場合

SMSメッセージの受信ができない場合でも、SMSの送信、電話、データ通信は正常に行われている場合がある。
原因として、モデムのキューに残っているSMSメッセージが考えられる。

モデムのキューは、OSを再起動しても、OSを再インストールしても持続する時がある。
MobianおよびManjaroでは、電話、データ通信、GPS、SMS等のモデムとの全ての通信をModemManagerが行う。(他のOSではこの限りではない)

ModemManagerには、mmcliコマンドでアクセスできる。

  • Mobian
sudo mmcli -m 0 --messaging-list-sms

# SMSメッセージが無い場合
No sms messages were found

# SMSメッセージが10件ある場合
Found 10 SMS messages:
/org/freedesktop/ModemManager1/SMS/0 (received)


  • Manjaro
sudo mmcli -m 3 --messaging-list-sms

# SMSメッセージが無い場合
No sms messages were found

# SMSメッセージがある場合
/org/freedesktop/ModemManager1/SMS/77 (受信)


Mobianの場合は、全てのSMSメッセージを削除する場合、以下のコマンドを実行する。

sudo mmcli -m 0 --messaging-delete-sms=1  # 10件削除する場合、--messaging-delete-smsオプションの値において、
                                          # 1~10を設定して、全てのメッセージを削除する


Manjaroの場合は、全てのSMSメッセージを削除する場合、以下のコマンドを実行する。

sudo mmcli -m 3 --messaging-delete-sms=77  # リストアップされた全てのSMSメッセージで繰り返す


なお、-m 0または-m 3とは、モデム0またはモデム3(PinePhoneに搭載されているモデム)を指す。

mmcliコマンドで利用できるメッセージ関連のアクションの詳細は、sudo mmcli --help-messagingコマンドを実行することで確認できる。
また、https://electronproton.com/mmcli-command-examples も参考になる。

特定の構成では、-m 2や-m 4等、様々な-m <数値>の組み合わせを試す必要があるかもしれない。

最近のMobianやPostmarketOSには、eg25-managerというユーザスペースのデーモンが含まれており、モデムを管理して適切な動作を確保している。


スリープ / サスペンド

Phosh

カスタムサスペンドタイムアウトの設定

[設定]ソフトウェアの[電源]項目では、限られた種類のタイムアウトのみ用意されている。

以下の例では、サスペンドのタイムアウトを30秒に設定している。

gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout 30


また、現在のタイムアウトを確認するには、以下のコマンドを実行する。

gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout


サスペンドを防いで画面を表示し続ける

ソフトウェアの中には、スクリーンセーバーまたはサスペンドが作動するものがある。(mpv、aptでのアップグレード等)
このような場合、gnome-session-inhibitツールが役に立つ。

gnome-session-inhibitツールには、様々なレベルの抑制機能がある。
inhibit LEVELオプションを使用すると、サスペンド(別名:クラストスリープ)やアイドルでのスクリーンロックを防ぐことができる。

例えば、PinePhoneがスリープ状態になるのを防ぎ、システムをアップグレードするには、以下のコマンドを実行する。

gnome-session-inhibit -inhibit suspend sudo apt upgrade


また、以下のコマンドを.bashrcファイルのエイリアスに追記すると便利である。

# ターミナルでsudoコマンドを使用する場合はサスペンドを禁止する
alias sudo='gnome-session-inhibit sudo'


上記のコマンドを自動化するには、/usr/share/applications/*.desktop にある任意のデスクトップランチャーのexec項目に対して、
gnome-session-inhibitを付加することができる。

SSHセッションでのスリープ防止

Phoshの[電源]項目にあるインアクティビティは、画面とのインタラクションのみを考慮しているため、SSH接続中にPinePhoneがスリープモードに入ることがある。
これを防ぐためには、~/.bashrcファイルの最下行に以下の設定を追記する。

 if [[ -n $SSH_CONNECTION ]]; then
    : $(gnome-session-inhibit --inhibit suspend \
       --reason "SSH connection is active" \
       --inhibit-only) &
 fi


上記の設定は、環境変数SSH_CONNECTIONが現在設定されているかどうかを確認する。(これはPinePhoneにSSH接続した場合に確認される)
設定されている場合は、現在のシェルはSSHセッションを介して生成されているので、gnome-session-inhibitを使用してPinePhoneのサスペンド / スリープを防ぐ。

ssh-connectionやbash-sessionがkillされる時、gnome-session-inhibitもkillされて、PinePhoneはサスペンドできるようになる。

Mediaplayback作動中のスリープ防止

Suspend-Guardスクリプトを使用して、メディア(音楽や動画等)が再生されている間はサスペンドしないようにすることができる。

このスクリプトは、pulseaudioでオーディオを出力しているソフトウェアがあるかどうかを確認して、再度確認するまでの間、サスペンドを防止する。
これにより、メディアが再生されない場合は、サスペンドできるようになる。

このスクリプトには、自動的に設定を有効にするsystemd-unitが付属しており、ソースコードはGitで閲覧することができる。


起動時にコンソール出力を表示する

Mobian

標準では、ブートコンソールはシリアルインターフェースである。
ブートコンソールにターミナルを追加することにより、コンソール出力が可能になる。

この設定では、/etc/default/u-bootファイルを編集する。
もし、ファイルが存在しない場合は、以下のコマンドを実行する。

sudo u-boot-update


/etc/default/u-bootファイルのU_BOOT_PARAMETERSパラメータに対して、splash項目を削除して、console=tty1を追記する。
これは、2つの異なるコンソール(シリアルとtty1)を有効にするためのものである。

sudo vi /etc/default/u-boot

# /etc/default/u-bootファイル
U_BOOT_PARAMETERS="console=ttyS0,115200 consoleblank=0 loglevel=7 rw plymouth.ignore-serial-consoles vt.global_cursor_default=0 console=tty1"


設定を適用するため、ブートローダをアップデートする。

sudo u-boot-update


Manjaro

まず、/boot/boot.txtファイルを以下のように編集する。

sudo vi /boot/boot.txt


# /boot/boot.txtファイル

# 編集前
setenv bootargs loglevel=4 console=tty0 console=${console} earlycon=uart,mmio32,0x01c28000 consoleblank=0 boot=PARTUUID=${uuid_boot} root=PARTUUID=${uuid_root} rw rootwait quiet audit=0 bootsplash.bootfile=bootsplash-themes/manjaro/bootsplash 

# 編集後
setenv bootargs loglevel=4 console=ttyS0,115200 earlycon=uart,mmio32,0x01c28000 consoleblank=0 boot=PARTUUID=${uuid_boot} root=PARTUUID=${uuid_root} rw rootwait audit=0 console=tty1


設定を適用するため、U-bootをアップデートする。

sudo pp-uboot-mkscr


SUSE

ブートローダのquietオプションは、ブートプロセスを出力しないようにする設定である。
また、splashオプションはブート画面を表示するための設定である。

Linux起動時にブートプロセスの情報を見る場合は、/etc/sysconfig/bootloaderファイルにあるDEFAULT_APPENDを編集する。

sudo vi /etc/sysconfig/bootloader


  • quietオプションを削除する。
  • splash=〜splash=0に変更する。


設定を適用するため、GRUBをアップデートする。

sudo grub2-mkconfig -o /boot/grub2/grub.cfg 



FlatPakのインストール

ターミナルを起動して、以下のコマンドを実行する。

# Mobian
sudo apt install gnome-software-plugin-flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

# Manjaro
sudo pacman -S flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo



Chromiumブラウザのインストール

パッケージ管理システムからインストール (Mobian / Manjaro)

Chromiumをインストールする。

# Mobian
sudo apt install chromium

# Manjaro
sudo pacman -S --needed chromium


FlatPakからインストール (Mobian / Manjaro)

パッケージ管理システムからインストールしたChromiumは、描画処理の不具合により、画面がホワイトアウトする場合がある。
この時、FlatPakからChromiumをインストールする。

flatpak install flathub org.chromium.Chromium


PinePhoneの画面に最適化する。

scale-to-fit chromium on


Chromiumを起動する。

flatpak run org.chromium.Chromium


FlatPakからChromiumをアンインストールする場合は、以下のコマンドを実行する。

flatpak uninstall org.chromium.Chromium


また、FlatPakからChromiumをアップデートする場合は、以下のコマンドを実行する。

flatpak update org.chromium.Chromium
# または
flatpak upgrade org.chromium.Chromium


Chromiumブラウザの設定

Chromiumを使用する前に、以下の設定を行うことが重要である。
Webブラウザのユーザエージェントが漏洩する時、サービスプロバイダがデバイスを特定した場合、アカウントを無効にする可能性がある。

  1. Chromiumのアドレスバーにchrome://flagsと入力して、"Freeze User-Agent request header"をインストールおよび有効にして、Chromiumを終了する。
  2. 再度、Chromiumを起動して、[その他のツール] - [拡張機能]から"Use-Agent Switcher"をインストールする。
  3. この拡張機能を開いて、[Android] - [Android Kitkat]を選択する。
  4. 最後に、Chromiumを再起動する。
    これにより、Chromiumがモバイルで起動する。


もし、Chromiumを起動した時に画面がホワイトアウトする場合は、/etc/chromium/local.confファイルを作成して、以下の設定を追記する。

sudo vi /etc/chromium/local.conf


# /etc/chromium/local.confファイル

unset GDK_BACKEND


Chromiumブラウザが実行できるかどうか確認する。

Chromiumブラウザの問題

Chromiumを起動した時、文字が表示されない場合がある。
この時、[ハードウェアアクセラレーションが使用可能な場合は使用する]のチェックを外す。

  1. 設定画面も見えない可能性もあるため、アドレスバーに chrome://settings/system と入力する。
  2. 上から2番目のスイッチを無効化(グレーアウト)する。
  3. Chromiumを再起動する。



リモートデスクトップ

VNCサーバを起動して、PCからPinephoneにアクセスしてコントロールすることができる。

sudo apt install wayvnc


インストールしたwayvncを実行する。

wayvnc 0.0.0.0 -r --render-cursor


PCからTigerVNC等のVNCクライアントを使用して接続する。

※注意
マウスカーソルがPinephoneのスクリーンにしか表示されず、VNCクライアントのウインドウには表示されないため、一部のUI(ロックスクリーン等)が操作しづらい。
しかし、-r --render-cursorオプションを付加することにより、カーソルが動くようになる。

Pinephoneの解像度は720x1280のため、PCモニタの解像度(1920x1080等)では画面の下から200ピクセルはみ出す。
ディスプレイを横向きに切り替えると、よりフィットする。


アイコンの変更

Papirus

Papirusのアイコンテーマをインストールする。

sudo apt install papirus-icon-theme


アイコンテーマをPapirusに変更する。

# Papirusライトを使用する場合
gsettings set org.gnome.desktop.interface icon-theme 'Papirus-Light'

# Papirusダークを使用する場合
gsettings set org.gnome.desktop.interface icon-theme 'Papirus-Dark'



テーマの変更

インストールしたテーマは、/usr/share/themesディレクトリに保存される。
また、テーマの中には、システムの標準のキーバインドを変更するものがある。(例えば、プリインストールされているEmacsテーマはキーバインドのみを変更する)

  • Adapta
    Adaptaは、Material Design Guidelinesに基づいたアダプティブなテーマである。
    パッケージには、Adapta、Adapta-Eta、Adapta-Nokto、Adapta-Nokto-Etaの5種類が含まれている。
    sudo apt install adapta-gtk-theme fonts-roboto fonts-roboto-unhinted gnome-accessibility-themes gnome-themes-extra gtk2-engines-murrine

  • Breeze
    KDEのBreezeに合わせて作成されたGTK2、GTK3用のGTKテーマである。
    パッケージには、BreezeとBreeze-Darkが含まれている。
    sudo apt install breeze-gtk-theme

  • Materia
    Materia(旧Flat-Plat)は、Material Designテーマである。
    パッケージには、Materia-light-compact、Materia-light、Materia-dark-compact、Materia-dark、Materia-compact、Materiaの各テーマが含まれている。
    sudo apt install materia-gtk-theme

  • Numix
    Numixは、ライト要素とダーク要素が組み合わさったモダンなフラットテーマである。
    ただし、Darkバージョンでは、上下のバーのテキストが見えにくい欠点がある。
    sudo apt install numix-gtk-theme


インストールしたテーマを変更するには、以下のコマンドを実行する。
テーマ名とは、/usr/share/themesディレクトリにあるテーマのディレクトリ名である。

gsettings set org.gnome.desktop.interface gtk-theme '<テーマ名>'


例えば、Materiaダークに変更する場合は、以下のコマンドを実行する。

gsettings set org.gnome.desktop.interface gtk-theme 'Materia-dark'



壁紙の変更

メイン画面

壁紙は、ソフトウェアを起動して表示されるまでの間、短い時間のみ表示される。
[設定]の[背景]で設定できる。

ターミナルで背景を設定するには、以下のコマンドを実行する。

gsettings set org.gnome.desktop.background picture-uri 'file:///home/mobian/Pictures/<画像ファイル名>.jpg'


ロック画面

ソフトウェア選択画面やロック画面の背景を変更するには、~/.config/gtk-3.0/gtk.cssファイルを作成する必要がある。

以下は、cssスクリプトの例である。

 // ~/.config/gtk-3.0/gtk.css
 // Restart phosh using "sudo systemctl restart phosh"
 
 phosh-app-grid {
    background-image: linear-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7)), url('file:///home/mobian/Pictures/App.jpg');
    background-size: cover;
    background-position: center;
 }
 
 phosh-lockscreen, .phosh-lockshield {
    background-image: linear-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7)), url('file:///home/mobian/Pictures/Lock.jpg');
    background-size: cover;
    background-position: center;
 }



.profileファイルの編集

.profileファイルを、以下のような内容を追記する。

 # User Add
 
 # Add Library Path
 export LD_LIBRARY_PATH="/home/mobian/InstallSoftware/Qt_5_15_2/lib:$LD_LIBRARY_PATH"
 
 # Display Scaling
 #wlr-randr --output DSI-1 --scale 1.5
 
 # Enable Qt Debug
 export QT_QPA_PLATFORMTHEME="qt5ct"
 export DISPLAY=":0"
 export XAUTHORITY="/home/mobian/.Xauthrity"
 export XDG_SESSION_TYPE="wayland"
 
 # Enable Qt Quick Debug
 export QML2_IMPORT_PATH="/home/mobian/InstallSoftware/Qt_5_15_2_Library/qml"
 export QML_IMPORT_PATH="/home/mobian/InstallSoftware/Qt_5_15_2_Library/qml"
 export QT_PLUGIN_PATH="/home/mobian/InstallSoftware/Qt_5_15_2_Library/plugins"
 
 #export XDG_RUNTIME_DIR="/home/mobian/XDG_RUNTIME"  # Not Enable (Display will be Black Screen)
 
 # Fcitx for Japanese
 export XMODIFIERS=@im=fcitx
 export QT_IM_MODULE=fcitx
 export GTK_IM_MODULE=fcitx



.bashrcファイルの編集

.bashrcファイルを、以下のような内容を追記する。

 # User Add
 
 # エイリアスを追加
 alias cd='cd -P'
 alias rm='rm -i'
 alias cp='cp -i'
 alias mv='mv -i'
 alias ls='ls -hlvF --group-directories-first --color=auto'
 alias cat='cat -n'
 alias less='less -n'
 alias grep='grep -i'
 alias en='LANG=C LANGUAGE=C LC_ALL=C'
 alias jp='LANG=ja_JP.UTF-8'
 alias igrep='sudo dpkg -l | grep'
 alias asearch='sudo apt-cache search'
 alias nano='nano -lmS'
 alias snano='sudo nano -lmS'
 alias scale='wlr-randr --output DSI-1 --scale'
 alias poff='sudo shutdown -h now'
 alias preboot='sudo shutdown -r now'
 #alias sudo='gnome-session-inhibit sudo'
 
 # コマンドの重複を履歴に残さない
 export HISTCONTROL=ignoredups
 
 # 空白から始めたコマンドを無視
 export HISTCONTROL=ignorespace
 
 # コマンド履歴に残さないコマンド群
 export HISTIGNORE="fg*:bg*:history*:cd*:ls*:cat*:less*:more*:grep*:lgrep*:igrep*:scale*:which*:clear:man*:startx*:exit*:poff*:preboot*"
 
 HISTTIMEFORMAT='%Y%m%d %T   ';
 export HISTTIMEFORMA
 
 # プロンプトの表示形式
 PS1='\e[0;31m\u\e[0m@\e[0;32m\h\e[0m(\t) [Path \w] \n> '
 
 # mkdirとcdを同時実行
 function mkcd()
 {
    if [ "$#" -eq 0 ]; then
       echo "Too few arguments!"
    elif [ "$#" -eq 1 ]; then
       if [ -d $1 ]; then
          echo "$1 already exists!"
          cd $1
       else
          mkdir -p $1 && cd $1
       fi
    else
       echo "Too many arguments!"
    fi
 }
 
 # ディレクトリに存在するディレクトリとファイルの検索
 function lgrep()
 {
    if [ "$#" -eq 1 ]; then
       local IFS_BACKUP=$IFS
       IFS=$'\n\t'
 
       for OBJECT in $(\ls -aA --group-directories-first | \grep -iE "${1}")
       do
          \ls -AdhlF --color "${OBJECT}"
       done
 
       echo ""
 
       IFS=$IFS_BACKUP
    elif [ "$#" -eq 2 ]; then
       # 第1引数で指定したディレクトリが存在するか確認する
       if [ ! -d "$1" ]; then
          echo "Not Exist Directory $1" 1>&2
          return 1
       fi
 
       local IFS_BACKUP=$IFS
       IFS=$'\n\t'
 
       # 現在のカレントディレクトリを一時的に保存する
       local CURRENTDIR=$(\pwd)
 
       # 第1引数で指定したディレクトリに移動する
       cd "${1}";
 
       # 第2引数で指定したパターンを使用して検索する
       for OBJECT in $(\ls -aA --group-directories-first | \grep -iE "${2}")
       do
          \ls -AdhlF --color "${OBJECT}"
       done
 
       # カレントディレクトリに戻る
       cd "${CURRENTDIR}"
 
       echo ""
 
       IFS=$IFS_BACKUP
 
       unset -v OBJECT
    else
       echo "Specify Arguments." 1>&2
    fi
 
    return 0
 }
 
 # パターンにマッチするファイル内容を検索する
 function filegrep()
 {
    if [ "$#" -eq 2 ]; then
       local IFS_BACKUP=$IFS
       IFS=$''
 
       for OBJECT in $(\find . -type f -name "${1}" -print0 | \xargs -0 \grep -inE "${2}")
       do
          echo "${OBJECT}"
       done
 
       echo ""
 
       IFS=$IFS_BACKUP
    elif [ "$#" -eq 3 ]; then
       # 第1引数で指定したディレクトリが存在するか確認する
       if [ ! -d "$1" ]; then
          echo "Not Exist Directory $1" 1>&2
          return 1
       fi
 
       local IFS_BACKUP=$IFS
       IFS=$''
 
       # 現在のカレントディレクトリを一時的に保存する
       local CURRENTDIR=$(\pwd)
 
       # 第1引数で指定したディレクトリに移動する
       cd "${1}";
 
       # 第2引数で指定したパターンを使用して検索する
       for OBJECT in $(\find . -type f -name "${2}" -print0 | \xargs -0 \grep -inE "${3}")
       do
          echo "${OBJECT}"
       done
 
       # カレントディレクトリに戻る
       cd "${CURRENTDIR}"
 
       echo ""
 
       IFS=$IFS_BACKUP
 
       unset -v OBJECT
    else
       echo "Specify Arguments." 1>&2
    fi
 
    return 0
 }
 
 # 環境変数PATHの設定
 function SetPATH()
 {
    OLDIFS=${IFS}
    IFS=$':'
 
    BEFORE_HOME='$HOME'
    AFTER_HOME=${HOME}
    PATH_NAME=$(echo ${1//${BEFORE_HOME}/${AFTER_HOME}})
 
    SLASH=$(echo ${PATH_NAME: -1:1})
    if [ ${SLASH} = "/" ]; then
        LENGTH="${#PATH_NAME}"
        let LENGTH=${LENGTH}-1
        PATH_NAME=$(echo ${PATH_NAME:0:${LENGTH}})
    fi
 
    if [ ! -d ${PATH_NAME} ]; then
        echo "No Exist Directory"
        return 1
    fi
 
    EXIST_FLAG=0
    for VALUE in ${PATH}
    do
        if [ ${VALUE} = ${PATH_NAME} ]; then
            EXIST_FLAG=1
            break
        fi
    done
 
    if [ ${EXIST_FLAG} -eq 0 ]; then
        export PATH="$PATH_NAME:$PATH"
    elif [ ${EXIST_FLAG} -eq 1 ]; then
        echo "Already Exist ${PATH_NAME} in PATH " 1>&2
    fi
 
    unset -v OLDIFS SLASH LENGTH BEFORE_HOME AFTER_HOME PATH_NAME EXIST_FLAG VALUE
 
    IFS=${OLDIFS}
 
    return 0
 }
 
 function SetLIBRARY()
 {
    OLDIFS=${IFS}
    IFS=$':'
 
    BEFORE_HOME='$HOME'
    AFTER_HOME="$HOME"
    PATH_NAME=$(echo ${1//${BEFORE_HOME}/${AFTER_HOME}})
 
    SLASH=$(echo ${PATH_NAME: -1:1})
    if [ ${SLASH} = "/" ]; then
        LENGTH="${#PATH_NAME}"
        let LENGTH=${LENGTH}-1
        PATH_NAME=$(echo ${PATH_NAME:0:${LENGTH}})
    fi
 
    if [ ! -d ${PATH_NAME} ]; then
        echo "No Exist Directory"
        return 1
    fi
 
    EXIST_FLAG=0
    for VALUE in ${PATH}
    do
        if [ ${VALUE} = ${PATH_NAME} ]; then
            EXIST_FLAG=1
            break
        fi
    done
 
    if [ ${EXIST_FLAG} -eq 0 ]; then
        export LD_LIBRARY_PATH="$PATH_NAME:$LD_LIBRARY_PATH"
    elif [ ${EXIST_FLAG} -eq 1 ]; then
        echo "Already Exist ${PATH_NAME} in PATH " 1>&2
    fi
 
    unset -v OLDIFS SLASH LENGTH BEFORE_HOME AFTER_HOME PATH_NAME EXIST_FLAG VALUE
 
    IFS=${OLDIFS}
 }
 
 # 環境変数PATHの重複を削除する
 function DeleteDuplicate()
 {
    if typeset -A &>/dev/null; then  # 連想配列が使用できるか確認する
        # 使える場合
        typeset -A _paths
        typeset _results
 
        while read -r _p
        do
            if [[ -n ${_p} ]] && (( ${_paths["${_p}"]:-1} )); then
                _paths["${_p}"]=0
                _results=${_results}:${_p}
            fi
        done <<<"${PATH//:/$'\n'}"
 
        PATH=${_results/:/}
 
        unset -v _p _paths _results
    else
        # 使えない場合はawkを使用する
        typeset _p=$(awk 'BEGIN{RS=":";ORS=":"} !x[$0]++' <<<"${PATH}:")
        PATH=${_p%:*:}
 
        unset -v _p
    fi
 }
 
 if [[ -n $SSH_CONNECTION ]]; then
   : $(gnome-session-inhibit --inhibit suspend \
      --reason "SSH connection is active" \
      --inhibit-only) &
 fi



SoCのオーバークロック

Allwinner SoC

Allwinner Socをオーバークロックするには、まず、/boot/dtbs/allwinnerディレクトリにあるDTBファイルをDTSファイルに変換する必要がある。
所有しているPinePhoneに適合するsun50i-a64-pinephone-1.X.dtbファイルを、DTSファイルに変換する。

sudo dtc -I dtb -O dts /boot/dtbs/allwinner/sun50i-a64-pinephone-1.X.dtb -o /boot/dtbs/allwinner/sun50i-a64-pinephone-1.X.dts


変換したDTSファイルの内容を、以下に示すように編集する。
以下の例では、Allwinner SoCのCPUを1.344[GHz]に変更している。

sudo vi /boot/dtbs/allwinner/sun50i-a64-pinephone-1.X.dts


# /boot/dtbs/allwinner/sun50i-a64-pinephone-1.X.dtsファイル

# 編集前

opp-table-cpu {
   ...略

   opp-1152000000 {
      opp-hz = <0x00 0x44aa2000>;
      opp-microvolt = <0x13d620>;
      clock-latency-ns = <0x3b9b0>;
   };
};

# 編集後 (Allwinner SoCを1.344[GHz]に変更する場合)

opp-table-cpu {
   ...略

   opp-1152000000 {
      #opp-hz = <0x00 0x44aa2000>;
      opp-hz = <0x00 0x501bd000>;
      opp-microvolt = <0x13d620>;
      clock-latency-ns = <0x3b9b0>;
   };
};


次に、編集したDTSファイルをDTBファイルに変更する。

sudo dtc -I dts -O dtb /boot/dtbs/allwinner/sun50i-a64-pinephone-1.X.dts -o /boot/dtbs/allwinner/sun50i-a64-pinephone-1.X.dtb


以下のパッケージを再インストールする。

sudo pacman -S linux-pinephone
sudo pacman -S kmod libdrm mtdev ndctl libxdmcp powersupply wayland xorg-xprop zenity iio-sensor-proxy  # 不要の可能性あり


最後に、PinePhoneを再起動する。

sudo systemctl reboot


Allwinner Socのクロックの詳細を知りたい場合、/sys/kernel/debug/clk/clk_summaryファイルを確認する。

sudo cat /sys/kernel/debug/clk/clk_summary


オーバークロックに関する詳細は、PinePhoneの公式Wikiを参照すること。

初期状態のGPUのクロックは、432[MHz]に設定されている。
以下の例では、GPUのクロックを500[MHz]に設定している。

GPUの安定性を確認するために、ベンチマークツール(glmark2-es2等)を実行すること。


エラー関連

SDカードからLinuxディストリビューションがブートしない場合

最も一般的な原因は、以前、SDカードにLinuxディストリビューションまたはJumpDriveがフラッシュされており、それを消去した際にブートセクタが消去されなかったことである。

ddコマンドを実行して、SDカードのブートセクタを消去する。

sudo dd if=/dev/zero of=/dev/sdX bs=512 seek=16 count=1  # X : SDカードのデバイス番号


起動時にLEDは緑のままでLinuxディストリビューションが起動しない場合

緑色のLEDは、まだP-Bootの段階であることを意味する。

  • Tow-Bootを使用している場合
    • 方法 1
      起動時および2回目のバイブレーションの間、ボリュームダウンボタンを押しながらPinePhoneを起動する。
    • 方法 2
      再度、SDカードにLinuxディストリビューションをインストールする。

  • SDカード上のJumpDriveを使用している場合
    JumpDriveで起動する。


あるいは、/boot/extlinux/extlinux.confファイルを編集して古いカーネルを優先させて起動することもできる。

アップデートエラー

sudo apt upgradeコマンドの実行において、エラーが発生する場合、以下のコマンドを実行する。

timedatectl set-ntp yes
sudo systemctl restart systemd-timesyncd.service


モデムマネージャ

Phoshにおいて、SIMカードを使用して通信(4G通信)を行うEG25モデムマネージャが停止する場合がある。
この時、メイン画面左上にあるモデムマネージャ(4G)のアイコンが消える。

方法 1

モデムマネージャを再起動するため、以下のコマンドを実行する。

sudo systemctl restart eg25-manager.service


もし、上記のコマンドが正常に実行された場合は、2〜3分後にモデムマネージャが再起動する。

方法 2

モデムマネージャを再起動するため、以下のコマンドを実行する。

sudo --askpass killall ModemManager
sudo /usr/bin/ModemManager &


また、上記のコマンドを、~/.bashrcファイル等にエイリアスを追加してもよい。

vi ~/.bashrc


# ~/.bashrcファイル

alias startmodem=' sudo --askpass killall ModemManager; sudo /usr/bin/ModemManager &'


方法 3

モデムマネージャを数分ごとに確認して、停止している場合は自動的に再起動するSystemdサービスユニットを作成する。

モデムマネージャが停止する時、/dev/ttyUSB2ファイルが自動的に削除されるため、このファイルが削除された時にSystemdサービスユニットを実行する。

sudo vi /etc/systemd/system/modem-test.timer


# /etc/systemd/system/modem-test.timerファイル

[Unit]
Description=Check presence of modem every minute

[Timer]
OnBootSec=180
OnUnitActiveSec=180

[Install]
WantedBy=timers.target


sudo vi /etc/systemd/system/modem-test.service


# /etc/systemd/system/modem-test.serviceファイル

[Unit]
Description=Check if modem is present and restart eg25-manager if necessary
ConditionPathExists=!/dev/ttyUSB2

[Service]
Type=oneshot
ExecStart=systemctl restart eg25-manager.service


Manjaro ARMのアップデートエラー (QEMU-User-Staticで実行する場合)

Manjaro ARMのシステムをアップデートする時、以下に示すようなエラーが発生する場合がある。

error: <インストールするパッケージ名>: signature from "Arch Linux ARM Build System <builder@archlinuxarm.org>" is unknown trust


この時、/etc/pacman.confファイルを以下に示すように編集する。

sudo vi /etc/pacman.conf


 # 42行目あたり
 
 #SigLevel    = Required DatabaseOptional  # コメントアウトする
 SigLevel    = Optional TrustAll           # 追記する



その他

アニメーションの無効化

Phoshにおいて、アニメーションを無効化することにより、システムのスループットが向上する場合がある。
ただし、Phosh 0.20等の古いバージョンでは、描画が崩れることに注意する。

gsettings set org.gnome.desktop.interface enable-animations false


設定を有効にするため、PinePhoneを再起動する。
または、Phoshを再起動する。

sudo systemctl restart phosh



PinePhone / PinePhone Proのバッテリー

PinePhone / PinePhone Proの純正バッテリーは、Pine64のWebサイトでは在庫が存在しない時がある。
そのため、互換バッテリーで代用しなければならない場合もある。

PinePhone / PinePhone Proのバッテリーは、2015年に販売されたSamsung J7 Phoneのバッテリー(サムスン部品番号 EB-BJ700BBC / BBE / CBE)と互換性がある。
このバッテリーは、タイトではあるが、PinePhone / PinePhone Proの筐体にフィットする。


※注意
警告より大きな容量のアフターマーケットバッテリーを使用することは、自己責任で行うこと。
特に、充電器との組み合わせにより、大きな容量のバッテリーを使用すると、過電圧が発生して、モデムやBluetooth、Wi-Fiチップが壊れる場合があることに注意する。


故障

キーボード関連の故障

キーボードを装着すると、装着していないときよりもバッテリーの消耗が速くなる。

  • キーボード未装着の場合、PinePhoneは1日経ってもバッテリーは保つ。
  • キーボードを装着している場合、PinePhoneのバッテリーは完全に消耗し、キーボードのバッテリーもかなり消耗している。
  • キーボードを通しての充電はとても遅い。
  • また、キーボードを装着すると、より頻繁に熱くなる。(触ると通常より熱くなる)


この場合、キーボードのメイン基板が故障している可能性が高い。
キーボードのメイン基板の故障に巻き込まれて、PinePhoneのメイン基板も故障している場合もあるので注意すること。

詳細は、以下に示すPine64フォーラムを参照すること。
https://forum.pine64.org/showthread.php?tid=16271

キーボードを分解して、チップの焼損を確認することができる。 (キーボードを試験および修理するには、マルチメーターとハンダごてが必要となる)
もし、キーボードの充電回路が故障している場合、交換用のキーボードのメイン基板が$9.99で購入することができる。
https://pine64.com/product/pinephonepro-keyboard-mainboard/

ただし、キーボードの充電回路は故障している場合でも、PinePhoneが充電されていればキーボードとして使用できる。


PinePhoneのメインボード交換手順

PinePhoneのメインボードを交換する前に、以下に示す手順に従う。

PinePhoneのメインボードを交換するには、小型のフィリップスドライバと他工具が必要となる。

  1. PinePhoneの背面カバーを取り外す。
  2. バッテリーと挿入されているSDカード、SIMカードを取り外す。
  3. PinePhoneのミッドフレーム周辺にある15個のフィリップスネジを全て外す。
  4. プラスチックスクライバを使用して、ミッドフレームをゆっくりとこじ開ける。
    ミッドフレームの下端を切り離すのが最も簡単である。
    ミッドフレームがスマートフォン本体から分離するまで、スマートフォンの全側面に手を回す。
  5. 全てのリボンケーブルとLegoコネクタを取り外す。
    以下に、取り外す部品の詳細を示す。
    1. メインボード上部のLCDリボンケーブル
    2. メインボード下部の2つのレゴコネクタ
    3. メインボード左側のタッチスクリーンデジタイザ
    4. メインボード左下にあるu.FLアンテナ接続
    5. 上記部品を取り外した後、オーディオ/UARTジャックを外す。
  6. メインボードを左側から軽くこじる。
  7. フロントカメラとメインカメラを取り外し、これらのカメラを新しいメインボードに取り付ける。
  8. 新しいメインボードをシャーシにセットし、左側のプラスチック製タブに引っ掛け、反対側をしっかりと押さえ、手順5を逆に行う。





USBドック

Mobianにおいて、動作報告のあるUSBドックを以下に示す。

  • Anker PowerExpand+
    HDMIポートを起動するコマンド
    wlr-randr --output HDMI-A-1 --mode <外部ディスプレイの解像度>
    注意 : 1080p以上だと不安定になることがある。


USBドック
61pnlfrrehS._AC_SL1500_.jpg
Anker PowerExpand 8-in-1 USB-C PD