「PinePhoneの初期設定」の版間の差分

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


== 電話帳 ==
== 電話帳 ==
==== Evolutionの使用 ====
Evolutionをインストールする。<br>
Evolutionをインストールする。<br>
  sudo apt-get insatll evolution
  sudo apt-get insatll evolution
138行目: 139行目:
[データのインポート]画面が起動して、インポートする連絡先が表示される。<br>
[データのインポート]画面が起動して、インポートする連絡先が表示される。<br>
画面下の[進む]ボタンを押下して、電話帳をインポートする。<br>
画面下の[進む]ボタンを押下して、電話帳をインポートする。<br>
<br>
==== Pythonスクリプトの使用 ====
Githubから、以下のツールをダウンロードする。<br>
sudo apt-get install git
git clone https://github.com/pine-clover/Clontacts.git
<br>
以下のコマンドを実行して、電話帳のファイル(vcf拡張子)をインポートする。<br>
python3 main.py <電話帳のファイルのパス>
<br><br>
<br><br>



2021年5月3日 (月) 18:46時点における版

概要



eMMCへのインストール

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のOSからインストール

  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から起動する。



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

Phosh

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


SSHの設定

まず。OpenSSHサーバをインストールする。

sudo apt-get install openssh-server


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

sudo systemctl enable ssh
sudo systemctl restart ssh



ディスプレイ関連の調整

画面の拡大 1

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

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

sudo zpt install wlr-randr


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


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

画面の拡大 2

スケーリングの設定を永続的に適用する方法がある。

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

[出力:DSI-1].
# scale = 2
scale = 1.5 



日本語入力

現在(2021/4/24)、この設定が有効な環境は、Mobianのみである。

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

sudo apt install fcitx fcitx5 fcitx5-config-qt fcitx5-data fcitx5-frontend-gtk2 fcitx5-frontend-gtk3 \
                 fcitx5-frontend-qt5 fcitx5-table gir1.2-fcitxg-1.0 fcitx5-module-wayland fcitx5-modules \
                 fcitx5-module-ibus fcitx5-module-fullwidth fcitx5-module-dbus fcitx5-module-emoji fcitx-mozc \
                 ibus-mozc mozc-data mozc-server mozc-utils-gui


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

export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx


次に、/usr/share/fcitx5/addon/fcitx-mozc.confファイルを、以下の内容で作成する。

[Addon]
Type=SharedLibrary
Name=fcitx-mozc
GeneralName=Mozc
Comment=Mozc support for Fcitx
Library=fcitx-mozc.so
Category=InputMethod
Enabled=True
SubConfig=
IMRegisterMethod=ConfigFile
LoadLocal=True


さらに、/usr/share/fcitx5/inputmethod/mozc.confファイルを、以下の内容で作成する。

[InputMethod]
UniqueName=mozc
Name=Mozc
IconName=/usr/share/fcitx5/mozc/icon/mozc.png
Priority=1
LangCode=ja
Parent=fcitx-mozc


/usr/share/fcitx/mozcディレクトリを/usr/share/fcitx5ディレクトリにコピーする。

sudo cp -rf /usr/share/fcitx/mozc/ /usr/share/fcitx5/


Mobianを再起動する。

sudo shutdown -r now


再起動後、Fcitx5を有効にする。
有効にするには、ターミナルで以下のコマンドを実行する。(~/.profileファイルに、以下のコマンドを記述してもよい)
この時、エラーメッセージが出力されて処理が止まるが、気にせずに[Ctrl] + [C]キーを同時押下する。

fcitx -r


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


電話帳

Evolutionの使用

Evolutionをインストールする。

sudo apt-get insatll evolution


Evolutionをディスプレイにフィットさせる。

scale-to-fit evolution on


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

Pythonスクリプトの使用

Githubから、以下のツールをダウンロードする。

sudo apt-get install git
git clone https://github.com/pine-clover/Clontacts.git


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

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



スリープ / サスペンド

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



FlatPackのインストール

Mobian

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

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


FlatPakからChromiumをインストールする。

flatpak install flathub org.chromium.Chromium

scale-to-fit chromium on

flatpak run org.chromium.Chromium


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

flatpak uninstall org.chromium.Chromium


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

flatpack update org.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ブラウザのインストール

まず、Chromiumブラウザをインストールする。

sudo apt-get install chromium chromium-common chromium-sandbox fonts-liberation gir1.2-notify-0.7 gir1.2-packagekitglib-1.0 gir1.2-polkit-1.0 libfile-basedir-perl \
             libfile-desktopentry-perl libfile-mimeinfo-perl libio-stringy-perl libipc-system-simple-perl libjsoncpp24 libnet-dbus-perl libre2-9 \
             libtie-ixhash-perl libu2f-udev libx11-protocol-perl libxml-parser-perl libxml-twig-perl libxml-xpathengine-perl libxxf86dga1 python3-certifi \
             python3-cups python3-cupshelpers python3-requests python3-six python3-smbc python3-urllib3 system-config-printer system-config-printer-common \
             system-config-printer-udev termit x11-utils x11-xserver-utils xdg-utils


次に、/etc/chromium/local.confファイルを作成して、以下のように編集する。

unset GDK_BACKEND


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


.profileファイルの編集

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

 # User Add
 
 # Add Library Path
 #export LD_LIBRARY_PATH="/home/mobian/InstallSoftware/Qt5_15_2/lib:$LD_LIBRARY_PATH"
 export LD_LIBRARY_PATH="/home/mobian/InstallSoftware/Qt_5_15_2_Library/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