Debian noroot 環境の導入及び各種設定について

# はじめに

[Debian noroot][DBNR] とは、 [Android OS][ANDR] 上において root 権限を取ることなく [Debian 環境][DEBI]において動作する軽量デスクトップマネージャである [Xfce4][XFCE] を用いたデスクトップ環境を構築するためのアプリケーションです。

[Debian noroot 環境][DBNR]は、 [Android OS][ANDR] 及び Linux の各種ディストリビューションにおいて、 root 権限を取ること無く chroot 環境を擬似的に実現するソフトウェアである [proot][PROT] を用いて、 chroot 環境下で動作する [Debian 環境][DEBI]を構築し、 [Android OS][ANDR] 上に移植された X Windows System のサーバアプリケーションである [Xserver XSDL][XSDL] に chroot 環境下の [Debian 環境][DEBI]にインストールされた [Xfce4][XFCE] なるデスクトップマネージャを表示することによって実現しています。

[Debian noroot アプリ][DBNR]をインストールするには、 [Google Play][DBNR] を用いた手法の他、 [Sourceforge.net 上の [Debian noroot アプリ][DBNR]のアーカイブページ][OSDN]より .apk ファイルをダウンロードして手動でインストールすることも出来ます。

CPU の性能とメモリ容量が潤沢にある [Android OS][ANDR] 端末であれば、 [Debian noroot][DBNR] の導入によって [Android OS][ANDR] 端末上で root 権限を取ること無く非常に軽快な [Debian 環境][DEBI]を実現することができます。

しかし、 [Debian noroot アプリ][DBNR]をインストールした直後の初期状態における [Debian noroot 環境][DBNR]では、擬似端末を使用したソフトウェアが使用出来ない不具合が生じたり、日本語の表示及び入力を行うための環境が整っていない等、通常の使用を行うには不十分です。

そこで、 [Debian noroot 環境][DBNR]を導入する上において、 [Debian noroot アプリ][DBNR]をインストールした直後に、障害復旧の環境の構築と、キーボードの設定変更を行った時に生じる問題及び擬似端末を使用したソフトウェアが使用出来ない問題を回避する為の設定等、 [Debian noroot 環境][DBNR]を使用する上での各種問題を回避するための設定を行いました。

次に、 [Debian noroot 環境][DBNR]において日本語環境の導入を行い、最後に [Debian noroot 環境][DBNR]に、ソースコードの取得及びビルドに基づいたパッケージ管理システムである [Linuxbrew][BREW] 及び、軽量のデスクトップマネージャである [LXDE][LXDE] 等の幾つかの有用なソフトウェアを導入することにより、以下の画像に示すようなデスクトップ環境が構築され、 [Debian noroot 環境][DBNR]をより快適に使用することが可能となりました。

![(Desktop)][IMG1]

本稿では、 [Android OS][ANDR] 上に [Debian noroot アプリ][DBNR]のインストールを行った後において必要となる各種環境設定についてまとめます。

本稿では、最初に、 "[Debian noroot アプリの概要][CHAP01]" の章において、 [Debian noroot アプリ][DBNR]に必要なデバイス等や [Debian noroot アプリ][DBNR]のインストール手法及び [Debian noroot 環境][DBNR]の動作原理等の [Debian noroot アプリ][DBNR]の概要について述べます。

次に、 "[Debian noroot 環境の各種設定について][CHAP02]" の章において、 [Debian noroot 環境][DBNR]の導入直後において、 [Debian noroot 環境][DBNR]を正常に使用するための必要最小限の各種設定と、 [Debian noroot 環境][DBNR]において日本語環境を使用するための設定等、 [Debian noroot 環境][DBNR]における初期設定の概略について述べます。

最後に、 "[結論][CHAP03]" の章において、本稿の結論について述べます。

# Debian noroot アプリの概要

[Debian noroot][DBNR] とは、 [pelya 氏][PELY]によって開発された、 [Android OS][ANDR] 上において root 権限を取ることなく [Debian][DEBI]において動作する軽量デスクトップマネージャである [xfce4][XFCE] を用いたデスクトップ環境を構築するためのアプリケーションです。

本章では、最初に "[Debian noroot アプリの導入に必要なデバイスについて][SEC0101]" の節において、 [Debian noroot アプリ][DBNR]の導入に際して、使用することが望ましい [Android OS][ANDR] 端末及び物理入力デバイスについて述べます。

次に、 "[Debian noroot アプリのインストール手法][SEC0102]" の節において、 [Android OS][ANDR] 端末に [Debian noroot アプリ][DBNR]をインストールする手法について述べます。

そして最後に、 "[Debian noroot 環境の動作原理][SEC0103]" の節において、 [Debian noroot 環境][DBNR]が、 [Android OS][ANDR] 端末において動作する原理の概略について述べます。

## Debian noroot アプリの導入に必要なデバイスについて

[Debian noroot アプリ][DBNR] は、メモリ容量が少なく、 CPU の性能が非力な旧式の [Android OS][ANDR] 端末でも導入することが可能ですが、 quad core 若しくは　octa core 程度の性能を持つ CPU と少なくとも 2GB 以上のメモリ容量がある [Android OS][ANDR] 端末であれば、 [Debian noroot アプリ][DBNR] の導入によって [Android OS][ANDR] 端末上で非常に軽快な [Debian][DEBI]によるデスクトップ環境を実現することが出来ます。

なお、 [Debian noroot アプリ][DBNR] は、公式では、 [Android OS 5.*][ANDR] 以前の端末のみの対応ですが、後述する [link2symlink 機能を実装した proot][TMPR] を導入する設定を行うことにより、 [Android OS 6.0][ANDR] 以降の端末でも [Debian noroot アプリ][DBNR]インストールして [Debian noroot 環境][DBNR]を導入することが可能です。

現在、当方は手元の [Sony Xperia Z Ultra][ZULT] と [Everypad III][EVER] 及び [ASUS Zenfone 3 Ultra][ZFON] 上に [Debian noroot アプリ][DBNR]をインストールして [Android OS][ANDR] 上で [Debian noroot 環境][DBNR]を運用しています。

[Debian noroot アプリ][DBNR]を使用する際は、 [Android OS][ANDR] に導入されているソフトウェアキーボードによる入力及びスクリーンを直接タップすることによる入力は非常に困難であるため、**物理的な外部入力デバイスとして、 bluetooth 若しくは USB OTG による接続の物理キーボード及びマウスを用いることを強く御勧め致します。**

物理キーボードに関しては、 [Android OS][ANDR] 端末と共に携帯することが非常に容易であり、打鍵性にも優れているという観点から、折畳式の小型キーボードを御勧めします。

また、折畳式の小型キーボードについては、物理マウスを操作する場合において適切なスペースを確保できない状況においてもカーソルポインタの操作を可能にすることが出来ることや、物理マウスの携帯を省略することが出来る観点から、以下の画像に示すようなタッチパッドデバイス付きのキーボードを用意することを御勧めします。

![(Keyboard and Mouse)][IMG2]

## Debian noroot アプリのインストール手法

[Android OS][ANDR] 端末において、 [Debian noroot アプリ][DBNR]をインストールするには、下記に示す２通りの手法が有ります。

- [Google Play アプリ経由で Debian noroot アプリをダウンロードしてインストールする手法][DBNR]
- [Sourceforge.net 上の Debian noroot アプリのアーカイブページから .apk ファイルをダウンロードして手動でインストールする手法][OSDN]

前者は、通常の [Google Play アプリ][PLAY]がインストールされた [Android OS][ANDR] 端末において、他の [Google Play][PLAY] 対応アプリと同様の手法に基づいてインストールする手法です。

後者は、 [Google Play アプリ][PLAY]がインストールされていない [Android OS][ANDR] 端末において、 [Sourceforge.net][OSDN] の Web ページより、[Debian noroot アプリ][DBNR]の .apk ファイルをダウンロードして、 [Android OS][ANDR] 端末におけるファイルマネージャのアプリインストール機能等を用いて手動でインストールする手法です。

詳細な [Debian noroot アプリ][DBNR]のインストール手法については、[Kapper 氏][KAPP]による "[新世代タブレット　Nexus7　Debian noroot、Gimpテスト編　その24][KAP1]" の記事の方も参考にして下さい。

なお、 [Android OS 6.0][ANDR] 以降において、外付け SD カードを内部ストレージとしてフォーマットし、 SD カード上に [Debian noroot アプリ][DBNR]をインストールする場合は、下記の点に留意する必要があります。

- **[Android OS][ANDR] 端末において使用する SD カードは、 Application performance class 1 (A1) 以上の規格のカードを強く御勧め致します。** A1 規格以外の物を用いると、安定した内部ストレージとしてのフォーマットや、 [Debian noroot アプリ][DBNR]に限らずほぼ全てのアプリの安定な動作が一切保証されません。
- **[Debian noroot アプリ][DBNR]を導入する際は、最初に外付け SD カードを内部ストレージとしてフォーマットし、アプリが SD カードにインストールされる状態から [Debian noroot アプリ][DBNR]を導入して下さい。** [Debian noroot アプリ][DBNR]を端末本体の内部ストレージに導入した後で、 SD カードに移動させると、 [Debian noroot アプリ][DBNR]の動作に不具合が発生します。
- SD カードを「アプリとデータ用内部ストレージとして使用する」設定においてフォーマットした場合に、**ディレクトリ ```/storage/emulated/0``` 以下 (即ち、複数のアプリが共用する "内蔵外部ストレージ領域") を [Debian noroot アプリ][DBNR]から使用する場合、[Debian noroot アプリ][DBNR]に「ストレージにアクセスする権限」を与えることを忘れないで下さい。**
    - 即ち、以下の手順に沿って設定を進めます。先ずは、**以下の画像のように、システムの ```[設定]``` のアイコンを開いて ```[アプリ]``` の項目を選択します。**
      <p>![([アプリ]の項目)][IMG3]</p>
    - 続いて、 **```[Debian]``` の項目を選択すると、以下の画像のように ```[アプリ情報]``` の項目が表示されるので、これより ```[権限]``` の項目を選択します。**
      <p>![([Debian]の項目)][IMG4]</p>
    - すると、**以下の画像のように ```[ストレージ]``` 権限のスイッチが表示されます。**以下の画像では、 ```[ストレージ]``` 権限は off になっています。
      <p>![([権限]の項目)][IMG5]</p>
    - 最後に、**以下の画像のように ```[ストレージ]``` 権限のスイッチを on に切り替えて、**[Debian noroot アプリ][DBNR]に「ストレージにアクセスする権限」を与える設定を行います。
      <p>![([権限]の項目)][IMG6]</p>

そして、 [Debian noroot アプリ][DBNR]をインストールした直後に、[Debian noroot アプリ][DBNR]を起動すると、自動的に [Debian noroot 環境][DBNR]のイメージファイルのダウンロード及び展開と、 locale 等の自動検出及び各種設定が行われ、軽量デスクトップマネージャである [xfce4][XFCE] を使用した [Debian noroot 環境][DBNR]が起動します。

## Debian noroot 環境の動作原理

[前節][SEC0102]の手順に基づいてインストールされた [Debian noroot 環境][DBNR]は、下記に述べる原理に基づいて動作します。

1. [Android OS][ANDR] より [Debian noroot アプリ][DBNR]を起動した時に、[Xserver XSDL サーバ][XSDL]画面のヘルプメッセージの表示を抑止し、 [Xserver XSDL サーバ][XSDL]画面上に "Ctrl", "Shift", "Alt" キーの働きをするボタンを表示する設定に基づいて [Xserver XSDL サーバ][XSDL]を起動する。
2. [Android OS][ANDR] のネイティブ環境下でシェルスクリプト ```/data/data/com.cuntubuntu/files/img/proot.sh``` を ```./startx.sh``` を引数にして実行し、以下の処理を行う。
    - [Android OS][ANDR] 端末の外部ストレージ領域及び [Debian noroot アプリ][DBNR]固有の外部ストレージ領域のバインドオプション及び ```HOME, PATH, LD_PRELOAD``` 等の [Debian noroot 環境][DBNR]全体に関連する環境変数の設定を行う。
    - [```proot``` コマンド][PROT]を用いて、 ```/data/data/com.cuntubuntu/files/img``` をルートディレクトリとして [Android OS][ANDR] のネイティブ環境上の ```/dev, /proc, /sys, /system``` ディレクトリ及び [Android OS][ANDR] 端末の外部ストレージ領域と [Debian noroot アプリ][DBNR]固有の外部ストレージ領域の絶対パスをバインドした chroot 環境を構築する。
3. ```/data/data/com.cuntubuntu/files/img``` をルートディレクトリとした chroot 環境において ```/startx.sh``` を実行し、以下の処理を行う。
    - fakeroot 権限による Dbus 経由で ```xfce4-session``` コマンドを実行して軽量デスクトップマネージャである [xfce4][XFCE] を起動し、 [xfce4][XFCE] の GUI を [Xserver XSDL サーバ][XSDL]に表示させる。
    - 以上で、一連の [Debian noroot 環境][DBNR]の起動プロセスが完了する。

動作原理の詳細については、 "[Debian noroot 環境の動作原理について][ZQ01]" の投稿を参照して下さい。

# Debian noroot 環境の各種設定について

本章において、まず最初に、 "[Debian noroot 環境の導入直後に行う設定][SEC0201]" の節において、 [Debian noroot 環境][DBNR]の起動に障害が発生した時の障害回復用の環境構築導入及び [Debian noroot 環境][DBNR]の使用において発生する問題を回避する設定等、 [Debian noroot 環境][DBNR]を使用するために必須となる各種設定について述べます。

次に、 "[Debian noroot 環境への日本語環境の導入][SEC0202]" の節において、 [Debian noroot 環境][DBNR]において、日本語フォントの導入及び日本語入力メソッドの導入等の日本語環境に関する設定について述べます。

最後に、 "[Debian noroot 環境導入後の追加的なソフトウェアの導入][SEC0203]" の節において、[前々節][SEC0201]及び[前節][SEC0202]の設定が完了した後に、 [Debian noroot 環境][DBNR]を使用する上で、利便性を高めるのに有用なソフトウェアの導入の概略について述べます。

なお、本稿においては特に断りのない限り、 [ARM 32 bit アーキテクチャ][ARMP]若しくは [ARM 64 bit アーキテクチャ][ARMP]を搭載した携帯端末に導入した [Debian noroot 環境][DBNR]に関する設定について述べることとします。

## Debian noroot 環境の導入直後に行う設定

本節では、 [Debian noroot 環境][DBNR]を使用する上において発生する障害を回避するための設定等、 [Debian noroot 環境][DBNR]において必須となる各種設定について、順を追って述べます。

### Debian noroot 環境に接続した物理キーボードの設定

[Debian noroot][DBNR] 環境において、物理キーボードを使用する場合、キーに刻印されている文字と異なる文字が入力されたり、特定のキーが有効にならない等、物理キーボードの打鍵性が著しく損なわれる場合があります。

ここで、通常の Linux ディストリビューションの場合は、 ```xmodmap``` コマンド等に基づく設定を行うのが一般的です。

しかし、 [Debian noroot][DBNR] 環境は、[前章][CHAP01]の "[Debian noroot 環境の動作原理][SEC0103]" において前述した通り、 [Android OS][ANDR] 上において、 [```proot``` コマンド][PROT]によって構築された chroot 環境であるため、 [Debian noroot][DBNR] 環境を導入した [Android OS][ANDR] と、カーネル及びハードウェア資源を共有しています。

従って、 [Debian noroot][DBNR] 環境において、物理キーボードのキー配列の設定を行うには、下記のようにして、 [Android OS][ANDR] 上若しくは [Debian noroot][DBNR] アプリの初期起動画面から設定を行う必要があります。

1. [NAKAJI Tadayoshi 氏][NAKA]による ["KCM for 日本語106/109キーボード"][APP1] 若しくは、 [ShiftRot 氏][SHIF]による ["106/109 ハードウェアキーボード 親指Ctrlレイアウト (英語配列)（ベータ版）"][APP2] といった [Android OS][ANDR] 端末に接続した物理キーボードのキー配列の設定アプリを導入し、キー配列の設定アプリに基づいて適切にキー配列を設定する。
2. [Debian noroot][DBNR] アプリの起動直後に、 [CHANGE DEVICE CONFIGURATION] のボタンをタップして [Device Configuration] メニューを表示させ、 [Remap phisical keys] を選択することにより、物理キーボードの配列に関する設定を行う。

上記の [Debian noroot][DBNR] 環境に接続された物理キーボードの設定についての詳細については、 "[Debian noroot 環境における物理キーボード配列の設定手法][ZQ12]" の投稿を参照して下さい。

### 一時的な日本語表示の無効化

[Debian noroot 環境][DBNR]においては、初期状態では [Debian noroot アプリ][DBNR]のインストール時に自動的に検出される locale 関連の設定が日本語のものとなっているにも関わらず、日本語フォントがインストールされていないために各種コマンドライン上のエラーメッセージ等が正常に表示されない問題が発生します。

この場合は、 locale 関連の環境変数 ```LC_ALL``` 等を以下のように変更して shell を起動することにより、各種メッセージ及びエラーメッセージ等の日本語化を無効にします。

```shell-session
 # env LANG=C LC_ALL=C LANGUAGE=en bash
```

この設定は、後述する[多言語対応の端末エミュレータの導入][SUBSEC020202]を行うまでの間、適宜行います。

### 障害回復用の環境の構築

本稿において述べる各種設定の過程において、 **[Android OS][ANDR] から [Debian noroot アプリ][DBNR]を再起動した場合、 [Debian noroot 環境][DBNR]の起動画面の停止及び [Debian noroot アプリ][DBNR]全体の異常終了等により、 [Debian noroot 環境][DBNR]全体が完全に起動しなくなる障害が発生することがあります。**

このような障害が発生した場合に、 [Debian noroot 環境][DBNR]の障害を回復させる為の必要最小限の環境を構築する設定を "[Debian noroot 環境に障害復旧用の環境を導入する][ZQ02]" の投稿を参考にして行います。

この設定は、**重篤な障害から回復するために必要となる設定ですから必ず行って下さい。**

まず最初に、下記のようにして、シェルスクリプト ```/proot.sh``` を ```/proot-safe.sh``` なるファイル名でバックアップを作成し、 ```/proot-safe.sh``` についてユーザに対して実行権限を付与します。

```shell-session
 # cp -p /proot.sh /proot-safe.sh
 # chmod u+x /proot-safe.sh
```

そして、シェルスクリプト ```/proot-safe.sh``` の内容が下記の通りになっていることを確認します。

```sh:/proot-safe.sh
#!/system/bin/sh

case x$SDCARD in x ) SDCARD=/sdcard;; esac

case x$SECURE_STORAGE_DIR in x ) echo > /dev/null;; * ) cd $SECURE_STORAGE_DIR/img;; esac

case x$SDCARD in x ) export SDCARD=$EXTERNAL_STORAGE;; esac

SDCARD=`../busybox realpath $SDCARD`
STORAGE="-b $SDCARD"
for F in 0 1 2 3 4 5 6 7 8 9; do
    DIR=`eval echo \\$UNSECURE_STORAGE_DIR_$F`
    case x$DIR in x ) echo > /dev/null;; * ) STORAGE="$STORAGE -b $DIR" ; mkdir -p $DIR ;; esac
done
echo "STORAGE $STORAGE"

export HOME=/home/$USER
export SHELL=/bin/bash
export LD_LIBRARY_PATH=
# Java doesn't work in PRoot when started from /usr/bin/java symlink, so we have to put a path to java binary into PATH, and Java 6 fails on Samsung devices
JAVA_PATH=/usr/lib/jvm/default-java/jre/bin:/usr/lib/jvm/default-java/bin
ls usr/lib/jvm/java-7-openjdk-*/bin > /dev/null 2>&1 && JAVA_PATH=/`echo usr/lib/jvm/java-7-openjdk-*/jre/bin`:/`echo usr/lib/jvm/java-7-openjdk-*/bin`
export PATH=/usr/local/sbin:/usr/local/bin:$JAVA_PATH:/usr/sbin:/usr/bin:/sbin:/bin
export "LD_PRELOAD=/libdisableselinux.so /libandroid-shmem.so"
export PROOT_TMPDIR=`pwd`/tmp
export PROOT_TMP_DIR=$PROOT_TMPDIR
export TZ="`getprop persist.sys.timezone`"
./proot -r `pwd` -w / -b /dev -b /proc -b /sys -b /system $STORAGE "$@"
```

次に、シェルスクリプト ```/startx-safe.sh``` を下記の内容で作成します。

```sh:/startx-safe.sh
#!/bin/sh

rm -f $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml
(LANG=C LC_ALL=C LANGUAGE=en /usr/bin/xterm -fn 10x20 -maximized -bg black -fg green -e /bin/bash) || true
setsid sh -c "cd /proc/ ; for f in [0-9]* ; do [ \$f = \$\$ ] || kill -9 \$f ; done"

wait
```

そして、下記のようにして、シェルスクリプト ```/startx-safe.sh``` についてユーザに対して実行権限を付与します。

```shell-session
 # chmod u+x /startx-safe.sh
```

### キーボードレイアウトの設定時の問題の回避

[Debian noroot 環境][DBNR]において、**[xfce4][XFCE] の設定画面からキーボードの設定変更の操作を行った場合、 "[問題が発生したため \[Debian\] を終了します][FTAL]" のメッセージを表示して [Debian noroot 環境][DBNR]が異常終了し、その後全く [Debian noroot 環境][DBNR]が起動しなくなる重篤な障害が発生します。**

このような問題を回避するため、 "[Debian noroot 環境におけるキーボード設定操作での重篤な障害とその回避策について][ZQ03]" の投稿を参考にして、 [Debian noroot 環境][DBNR]の起動時に、ファイル ```$HOME/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml``` を強制的に削除する設定を行います。

この設定は、**重篤な障害を回避するための設定ですから必ず行って下さい。**

まず最初に、シェルスクリプト ```/startx.sh``` に下記の記述を追記して [Debian noroot 環境][DBNR]を再起動します。

```/startx.sh
...
rm -f $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml    # ← dbus-launch で始まる行の前に、この行を追記する。
...
dbus-launch --exit-with-session sh -c 'xfce4-session ; setsid sh -c "cd /proc/ ; for f in [0-9]* ; do [ \$f = \$\$ ] || kill -9 \$f ; done"' &
...
```

以上の設定の後に、 [Debian noroot 環境][DBNR]を再起動して、 [Debian noroot 環境][DBNR]が正常に起動することを確認します。

### link2symlink 機能を実装した proot の導入

[Android OS 6.0][ANDR] 上において、 [Debian noroot 環境][DBNR]を起動すると、 ```apt-get``` 等の [Debian 環境][DEBI]のパッケージ管理コマンド及び git 等がコマンド内部で使用するファイルに対するハードリンクの実行の失敗により正常に起動しない問題が発生します。

これは、 [Android OS 6.0][ANDR] における SELinux の権限に関する設定において、システムコール [```link(2)```][LINK] の実行が禁止されている事が原因と考えられます。

上記の問題を回避するには、 "[Debian noroot 環境において link2symlink 機能を実装した proot を導入する][ZQ04]" の投稿を参考にして、下記に述べる設定に基づいて、 [Debian noroot 環境][DBNR]で用いられている [proot][PROT] に代えて [termux の開発コミュニティ][TMUX]による [link2symlink 機能を実装した proot][TMPR] を導入する必要があります。

この設定は、 **[Android OS 6.0][ANDR] 以上を搭載する端末においては、必ず行う必要が有ります。**

まず最初に、下記の通りにして、 [termux の開発コミュニティ][TMUX]による link2symlink 機能を実装した [proot][PROT] のバイナリ実行ファイルをダウンロードします。

```shell-session
 $ wget -O ./proot.arm https://git.io/proot-0.7.arm
```

次に、下記のようにして [proot][PROT] の実行ファイルをルートディレクトリにインストールします。この時、 [proot][PROT] の実行ファイルの名前は ```/proot``` と異なる名前にする必要が有ります。

```shell-session
 $ install -v -m 0700 ./proot.arm /proot.link2symlink
```

ここで、ルートディレクトリ上の実行ファイル ```/proot.link2symlink``` の実行権限がユーザ権限に対して与えられていることと、 ```/proot.link2symlink --help``` コマンドが正常に動作することを確認します。

```shell-session
  $ ls -l /proot.link2symlink
  -rwx------. 1 u0_a185 u0_a185 525464 Dec  7 15:02 /proot.link2symlink
  $ /proot.link2symlink --help
  proot v0.1-5-gd06009d1-dirty: chroot, mount --bind, and binfmt_misc without privilege/setup.

  Usage:
    proot [option] ... [command]
  ...
    --link2symlink
        Replace hard links with symlinks, pretending they are really hardlinks

        Emulates hard links with symbolic links when SELinux policies
        do not allow hard links.
  ...
  Visit http://proot.me for help, bug reports, suggestions, patchs, ...
  Copyright (C) 2015 STMicroelectronics, licensed under GPL v2 or later.
  $

```

そして、シェルスクリプト ```/proot.sh``` を下記のように修正します。即ち、 ```/proot.sh``` の最後の行の ```./proot``` を起動している箇所を [link2symlink 機能を実装した proot][TMPR] である ```./proot.link2symlink``` に修正し、オプション ```--link2symlink``` を追加します。

```sh:/proot.sh
#!/system/bin/sh
...
export HOME=/home/$USER
export SHELL=/bin/bash
export LD_LIBRARY_PATH=
...
export TZ="`getprop persist.sys.timezone`"
# ./proot -r `pwd` -w / -b /dev -b /proc -b /sys -b /system $STORAGE "$@" # proot を実行している行を以下のように修正する。
./proot.link2symlink --link2symlink -r `pwd` -w / -b /dev -b /proc -b /sys -b /system $STORAGE "$@"
```

上記の設定の後に、 [Debian noroot 環境][DBNR]を再起動して、正常に [link2symlink 機能が実装された proot][TMPR] が導入されていることを確認します。

### 擬似端末の問題の回避

[Debian noroot 環境][DBNR]において、端末エミュレータである [sakura][SAKU] 及び端末多重化ソフトウェアである [screen][SCRE] 等の擬似端末を利用したソフトウェアがデバイスファイル /dev/ptmx を経由せずに擬似端末にアクセスしている為に正常に動作しない問題が発生します。

この問題を回避するために、 "[Debian noroot 環境で擬似端末が使用できない問題を回避する][ZQ07]" の投稿を参考にして、 [Debian noroot 環境][DBNR]に、デバイスファイル /dev/ptmx を経由して擬似端末にアクセスする標準ライブラリ関数を含む動的ライブラリ ```libandroid-pty.so``` を導入します。

この設定は、 **[Debian noroot 環境][DBNR]における大部分のソフトウェアの動作に影響を受ける問題を回避する設定ですから、必ず行うようにして下さい。**

まず最初に、下記のように ```wget``` コマンドを実行して、動的ライブラリ ```libandroid-pty.so``` のバイナリコードを取得します。

```shell-session
 $ wget -O ./libandroid-pty.so.arm https://git.io/libandroid-pty.so-0.1.1.arm
```

次に、バイナリファイル ```libandroid-pty.so.arm``` を下記のようにしてルートディレクトリにインストールします。

```shell-session
 $ sudo install -v -m 0700 ./libandroid-pty.so.arm /libandroid-pty.so
```

ここで、ルートディレクトリ上の動的ライブラリ ```/libandroid-pty.so``` の実行権限がユーザ権限に対して与えられていることを確認します。

```shell-session
 $ ls -l /libandroid-pty.so
 -rwx------. 1 u0_a135 u0_a135 4812  1月 16 18:13 /libandroid-pty.so
 $
```

そして、シェルスクリプト ```/proot.sh``` において、環境変数 ```LD_PRELOAD``` の設定が書かれている行を下記のように修正します。

```sh:/proot.sh
...
 # export "LD_PRELOAD=/libdisabledselinux.so /libandroid-shmem.so"
 export "LD_PRELOAD=/libdisabledselinux.so /libandroid-shmem.so /libandroid-pty.so"　# 末尾に /libandroid-pty.so を追加する。
...

```

以上の設定の後に、 [Debian noroot 環境][DBNR]を再起動して、 [Debian noroot 環境][DBNR]が正常に起動することを確認します。

### Termux 開発コミュニティによる libandroid-shmem.so の導入

[Debian noroot 環境][DBNR]において、一部の共有メモリ関係のライブラリ関数を用いたソフトウエアの動作に不具合が発生する問題を回避するために、 "[Termux 開発コミュニティによる libandroid-shmem.so を Debian noroot 環境に導入する][ZQ14]" の投稿を参考にして、 [Debian noroot 環境][DBNR]に、[Termux の開発コミュニティ][TMUX]によって改良された ```libandroid-shmem.so``` を導入します。

この設定は、 **[Debian noroot 環境][DBNR]の動作を安定化させる設定ですから、設定を行うことを強く御勧めします。**
 
まず最初に、下記のように ```wget``` コマンドを実行して、動的ライブラリ ```libandroid-shmem-termux.so``` のバイナリコードを取得します。

```shell-session
 $ wget -O ./libandroid-shmem-termux.so.arm https://git.io/libandroid-shmem-termux.so-0.2.103.arm
```

次に、バイナリファイル ```libandroid-shmem-termux.so.arm``` を下記のようにしてルートディレクトリにインストールします。

```shell-session
 $ sudo install -v -m 0700 ./libandroid-shmem-termux.so.arm /libandroid-shmem-termux.so
```

ここで、ルートディレクトリ上の動的ライブラリ ```/libandroid-shmem-termux.so``` の実行権限がユーザ権限に対して与えられていることを確認します。

```shell-session
 $ ls -l /libandroid-shmem-termux.so
 -rwx------. 1 u0_a135 u0_a135 4812  1月 16 18:13 /libandroid-shmem-termux.so
 $
```

そして、シェルスクリプト ```/proot.sh``` において、環境変数 ```LD_PRELOAD``` の設定が書かれている行を下記のように修正します。

```sh:/proot.sh
...
 # export "LD_PRELOAD=/libdisabledselinux.so /libandroid-shmem.so"
 export "LD_PRELOAD=/libdisabledselinux.so /libandroid-shmem-termux.so /libandroid-pty.so"　# /libandroid-shmem.so の記述を /libandroid-shmem-termux.so に修正する。
...

```

以上の設定の後に、 [Debian noroot 環境][DBNR]を再起動して、 [Debian noroot 環境][DBNR]が正常に起動することを確認します。

### Debian 環境の更新

以上の設定が完了した後は、通常の [Debian 系のディストリビューション][DEBI]と同様、下記のコマンドを実行して、 [Debian 環境][DEBI]を最新のバージョンに更新します。

```shell-session
 $ sudo apt-get update
 $ sudo apt-get upgrade
```

上記の ```apt-get update``` コマンド及び ```apt-get upgrade``` コマンドの実行により、 [Debian 環境][DEBI]の更新が完了することを確認します。

## Debian noroot 環境への日本語環境の導入

本節では、 "[Debian noroot 環境で日本語環境を導入する][ZQ08]" の投稿を参考にして、 [Debian noroot 環境][DBNR]に日本語フォント及び日本語入力メソッド等の日本語環境の導入を行うための各種設定について述べます。

### 多言語化サポートパッケージ ```locales``` の導入

まず最初に本項において、 [Debian noroot 環境][DBNR]に多言語化サポートパッケージである ```locales``` を導入します。

デフォルトでは英語以外の言語の表示に必要なものが不足しているために、後述の[環境変数 ```LANG, LC_ALL, LANGUAGE``` の設定][SUBSEC020201]でエラーが発生するので、以下のコマンドを実行して、パッケージ ```locales``` をインストールします。

```shell-session
 $ sudo apt-get install locales
```

次に、テキストファイル ```/etc/locale.gen``` を下記の内容で作成します。また、既に設定ファイル ```/etc/locale.gen``` が存在するならば、下記の記述のある行についてコメントアウトを解除します。

```sh:/etc/locale.gen
ja_JP.UTF-8 UTF-8
en_US.UTF-8 UTF-8
```

そして、以下のコマンドを実行して、日本語及び英語の locale を生成します。

```shell-session
 $ sudo /usr/sbin/locale-gen
```

### 環境変数 ```LANG, LC_ALL, LANGUAGE``` の設定

次に本項において、 [Debian noroot 環境][DBNR]における日本語 locale の指定と、アプリケーションの地域言語化対応のライブラリである gettext で使用する言語の指定のために、環境変数 ```LANG, LC_ALL, LANGUAGE``` の設定を行います。

環境変数 ```LANG, LC_ALL, LANGUAGE``` を設定するには、シェルスクリプト ```/proot.sh``` に以下の行を追記します。

```sh:/proot.sh
...
# 環境変数 LANG, LC_ALL に "ja_JP.UTF-8" を、環境変数 LANGUAGE に "ja" をそれぞれ設定する。
export LANG="ja_JP.UTF-8"
export LC_ALL="ja_JP.UTF-8"
export LANGUAGE="ja"
...
```

### timezone の設定

続いて本項において、 [Debian noroot 環境][DBNR]における timezone の設定を行います。

[Debian noroot 環境][DBNR]における timezone の設定については、通常の [Debian 系のディストリビューション][DEBI]の場合と異なり、シェルスクリプト ```/proot.sh``` において、環境変数 ```TZ``` の値を設定することにより行います。

ここで、デスクトップマネージャの時計表示等が実際の時刻と比べて正確な時刻を表示していない場合は、シェルスクリプト ```/proot.sh``` において環境変数 ```TZ``` の値を設定している部分を以下のように修正を行います。

```sh:/proot.sh
...
#export TZ="`getprop persist.sys.timezone`"
export TZ="Asia/Tokyo"  # 若しくは TZ="Japan"
...
```

上記の設定を行った後は、 [Debian noroot 環境][DBNR]の再起動を行い、デスクトップマネージャの時計表示等が正確であることを確認します。

### 日本語フォントの導入

そして、[Debian noroot 環境][DBNR]に日本語フォントを導入します。本稿では、 [VL ゴシックフォント][VLGF]及び、[梅フォント、 Umeplus][UMEF] を導入します。

以下のようにして、パッケージ ```fonts-vlgothic, fonts-horai-umefont, fonts-umeplus``` をインストールします。

```shell-session
 $ sudo apt-get install fonts-vlgothic
 $ sudo apt-get install fonts-horai-umefont
 $ sudo apt-get install fonts-umeplus
```

### 多言語対応端末エミュレータの導入

本項において、[Debian noroot 環境][DBNR]に多言語対応の端末エミュレータを導入します。本稿では、 [MLTerm][MLTM] と、 [sakura][SAKU] を導入し、 [MLTerm][MLTM] の設定について説明を行います。

まず最初に、以下のようにしてパッケージ ```sakura, mlterm, mlterm-im-fcitx``` をインストールします。

```shell-session
 $ sudo apt-get install sakura
 $ sudo apt-get install mlterm
 $ sudo apt-get install mlterm-im-fcitx
```

そして、 [MLTerm][MLTM] の使用フォントを設定するために設定ファイル ```~/.mlterm/aafont``` を以下のように作成します。本稿では [VL ゴシックフォント][VLGF]を使用する設定を行います。

```sh:${HOME}/.mlterm/aafont
# 本ファイルでは、VL ゴシックフォントを用いる設定を行う。
ISO8859_1               = VL Gothic-iso8859-1:100;
ISO8859_1_BOLD          = VL Gothic-iso8859-1:100;
JISX0201_KATA           = VL Gothic-iso10646-1:100;
JISX0201_KATA_BOLD      = VL Gothic-iso10646-1:100;
JISX0201_ROMAN          = VL Gothic-iso10646-1:100;
JISX0201_ROMAN_BOLD     = VL Gothic-iso10646-1:100;
JISX0208_1983           = VL Gothic-iso10646-1:100;
JISX0208_1983_BOLD      = VL Gothic-iso10646-1:100;
ISO10646_UCS2_1         = VL Gothic-iso10646-1:100;
ISO10646_UCS2_1_BIWIDYH = VL Gothic-iso10646-1:100;
ISO10646_UCS4_1         = VL Gothic-iso10646-1:100;
ISO10646_UCS4_1_BIWIDTH = VL Gothic-iso10646-1:100;
```

以上の設定の後、以下のコマンドを実行して [MLTerm][MLTM] が正常に実行されることと、正常に使用出来る事を確認します。

```shell-session
 $ mlterm
```

### 日本語入力メソッドの導入

本項において、 [Debian noroot 環境][DBNR]に日本語入力メソッドを導入します。本稿では、 [fcitx][FCIT] 及び [mozc][MOZC] を導入します。

まず最初に、以下のようにパッケージ ```fcitx-mozc, im-config``` をインストールします。

```shell-session
 $ sudo apt-get install fcitx-mozc
 $ sudo apt-get install im-config
```

次に、シェルスクリプト ```/proot.sh``` に以下の行を追記します。 

```sh:/proot.sh
...
export XMODIFIERS="@im=fcitx"
export QT_IM_MODULE=fcitx
export QT4_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx
export CLUTTER_IM_MODULE=fcitx
...
```

そして、 X Windows system での日本語入力メソッドを [fcitx][FCIT] に設定するために ```im-config``` コマンドを以下のように起動します。

```shell-session
 $ sudo im-config -n fcitx
```

以上の設定の後、 [Debian noroot 環境][DBNR]を再起動して、 [fcitx][FCIT] が正常に起動することを確認します。

なお、 [fcitx][FCIT] の設定は設定メニューから “fcitx の設定” を選択して行いますが、**漢字変換に関する keybind の設定は [Android OS][ANDR] 上で使用している IME の keybind (例えば Ctrl+Space 及び Shift+Space 等) と衝突しないような keybind (例えば Zenkakuhankaku 若しくは Super+Space 等) を使用する必要があります。**

### 端末エミュレータを起動する為のアイコンを作成する

本項において、 "[多言語対応端末エミュレータの導入][SUBSEC020202]" の項で導入した [MLTerm][MLTM] を起動するためのデスクトップ上のアイコンを作成します。

まず最初に、ファイル ```${HOME}/Desktop/XTerm.desktop``` を ```${HOME}/Desktop/MLTerm.desktop``` にコピーして、ユーザに対して実行権限を付与します。

```shell-session
 # cp -p ~/Desktop/XTerm.desktop ~/Desktop/MLTerm.desktop
 # chmod u+x ~/Desktop/MLTerm.desktop
```

そして、先頭が ```Exec=...``` 及び ```Name[en_US]=..., Name=...``` で始まる行を以下のように修正します。

```sh:${HOME}/Desktop/MLTerm.desktop
[Desktop Entry]
...
# Exec=... で始まる行を以下の通り修正する。
Exec=mlterm -w 20 --bg=black --fg=green --ac 2 --im=fcitx -e /bin/bash -l
...
Name[en_US]=MLTerm
Name=MLTerm
...
```

以上の設定により、デスクトップ上に [MLTerm][MLTM] のアイコンが表示されることと、 [MLTerm][MLTM] アイコンをクリックした時の [MLTerm][MLTM] の正常な起動と [MLTerm][MLTM] 上での正常な日本語の表示が行われていることを確認します。

### 簡易テキストエディタの日本語化

[Debian noroot 環境][DBNR]上で標準でインストールされている簡易テキストエディタである [nano][NANO] は、デフォルトでの状態では、画面表示のメッセージ等が日本語化されていないため、本稿では、 [Debian 環境][DEBI] の sid 版の [nano][NANO] パッケージを導入し、 [nano][NANO] の画面表示のメッセージを日本語化します。

まず最初に、 ```apt-get``` に関する設定ファイル ```/etc/apt/apt.conf.d/99target``` を下記の内容で作成します。

```sh:/etc/apt/apt.conf.d/99target
APT::Default-Release "jessie";
```

次に、 ```apt-get``` に関する設定ファイル ```/etc/apt/sources.list``` の末尾に下記に示す記述を追記します。

```sh:/etc/apt/sources.list
...
# ↓ ファイルの末尾に下記の２行の記述を追記する。

deb http://ftp.jp.debian.org/debian sid main
deb-src http://ftp.jp.debian.org/debian sid main
```

そして、以下のコマンドを実行して、 [Debian 環境][DEBI] の sid 版の [nano][NANO] パッケージを導入します。

```shell-session
 $ sudo apt-get update
 $ sudo apt-get install nano/sid
```

最後に、 [nano][NANO] の設定ファイルである ```/etc/nanorc``` をホームディレクトリの直下にコピーします。

```shell-session
 $ cp -p /etc/nanorc $HOME/.nanorc
```

以上の設定の後、 ```nano``` コマンドを起動して、簡易テキストエディタである [nano][NANO] の画面表示のメッセージが日本語化されていることを確認します。

## Debian noroot 環境導入後の追加的なソフトウェアの導入

本節では、 [Debian noroot 環境][DBNR]において、[前々節][SEC0201]及び[前節][SEC0202]で述べた各種設定を行った後、利便性のために導入すべき追加的なソフトウェアとして [Linuxbrew][BREW] と [LXDE][LXDE] 及び [Synaptic][SYNA] を取り上げ、これらの導入手法について述べます。

なお、前述した [Linuxbrew][BREW] と [LXDE][LXDE] 及び [Synaptic][SYNA] の他に、利便性を高めるソフトウェアとして下記のソフトウェアを導入することを御勧めします。

- 高機能 Web ブラウザである [Firefox][FIRE]
- 軽量メールクライアントである [Sylpheed][SYLP]
- 簡易 IDE である [Geany][GEAN]
- オープンソースのオフィススイートである [LibreOffice][LOFF]
- 軽量 SSH サーバである [dropbear][DROP]
- 軽量なタイル型ウィンドウマネージャである [ratpoison][RATP]

軽量 SSH サーバである [dropbear][DROP] の導入手法については、 "[Debian noroot 環境において dropbear に基づく SSH サーバを導入する][ZQ09]" の投稿を参照して下さい。

また、軽量で物理キーボードに基づいた操作を行うことが可能なタイル型ウィンドウマネージャである [ratpoison][RATP] の導入手法については、 "[Debian noroot に ratpoison を導入する][ZQ13]" の投稿を参照して下さい。

### Linuxbrew の導入

本項において、 "[Debian noroot 環境に Linuxbrew を導入する][ZQ05]" の投稿を参考にして、ソースコードの取得及びビルドに基づいたパッケージ管理システムである [Linuxbrew][BREW] を導入します。

**[Linuxbrew][BREW] に関しては、軽量 SSH サーバである [dropbear][DROP] の導入や、[Debian noroot 環境][DBNR]において動作に問題のあるパッケージをソースコードから手動でビルドする際に必要となりますので、 [Linuxbrew][BREW] を導入することを強く御勧めします。**

まず最初に、 "[Debian noroot 環境に Linuxbrew を導入する][ZQ05]" の投稿及び [Linuxbrew の公式ページ][BREW]に基づいて [Linuxbrew][BREW] に依存するパッケージと [Linuxbrew][BREW] 本体のリポジトリを導入します。

```shell-session
 $ sudo apt-get install build-essential curl file git python-setuptools ruby
 $ sudo apt-get install m4 texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev gettext    # 必要に応じて任意に導入する。
 $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install)"
```

なお、 [32 bit ARM アーキテクチャ][ARMP]及び [64 bit x86 アーキテクチャ][X86P]以外を搭載した携帯端末にインストールされた [Debian noroot 環境][DBNR]に [Linuxbrew][BREW] を導入する場合、前述の [Linuxbrew][BREW] の本体のリポジトリを導入するコマンドを実行すると、途中で [Linuxbrew][BREW] が使用する [ruby 処理系][RUBY]の bottle ファイルの取得に失敗して、導入作業が正常に行われません。

従って、これらの携帯端末における環境の場合は、 "[Linuxbrew の自動的なインストールスクリプトが異常終了する場合における代替の導入手法][ZQ06]" の投稿に基づき、 [Linuxbrew の開発コミュニティ][BREW]による [Linuxbrew][BREW] のインストールスクリプトに代えて、下記のようにして [Linuxbrew][BREW] を導入する必要が有ります。

```shell-session
 $ sudo apt-get install build-essential curl file git python-setuptools ruby
 $ sudo apt-get install m4 texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev gettext    # 必要に応じて任意に導入する。
 $ sudo apt-get install libssl-dev libreadline6-dev libyaml-dev libgdbm-dev libdb-dev
 $ sh -c "$(curl -fsSL https://raw.githubusercontent.com/z80oolong/linuxbrew-altinstall/master/install.sh)"
```

そして、 ```bash``` の初期化ファイルである ```${HOME}/.bashrc``` について、以下の通りに環境変数の設定を行い、  ```bashrc``` を再起動します。

```sh:${HOME}/.bashrc
...
# for Linuxbrew

export HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew"
export PATH="${HOMEBREW_PREFIX}/sbin:${HOMEBREW_PREFIX}/bin:$PATH"
export MANPATH="${HOMEBREW_PREFIX}/share/man:${MANPATH}"
export INFOPATH="${HOMEBREW_PREFIX}/share/info:${INFOPATH}"
export HOMEBREW_NO_AUTO_UPDATE=1
...
```

上記の設定を行った後、 ```brew doctor``` コマンドが正常に終了することを確認します。

### LXDE の導入

本項において、 "[Debian noroot 環境に LXDE を導入する][ZQ10]" の投稿を参考にして、軽量な統合デスクトップマネージャである [LXDE][LXDE] を導入します。

まず最初に、下記のように、パッケージ ```lxde``` をインストールします。

```shell-session
 sudo apt-get install lxde
```

次に、下記のようにして、シェルスクリプト ```/startx.sh``` において ```dbus-launch``` 経由で ```xfce-session``` コマンドを起動している行を ```startlxde``` コマンドを起動するように修正します。


```sh:/startx.sh
...
rm -f /var/run/dbus/pid
fakeroot-tcp /usr/bin/env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin dbus-daemon --system

sleep 1
#dbus-launch --exit-with-session sh -c 'xfce4-session ; setsid sh -c "cd /proc/ ; for f in [0-9]* ; do [ \$f = \$\$ ] || kill -9 \$f ; done"' &
dbus-launch --exit-with-session sh -c 'startlxde ; setsid sh -c "cd /proc/ ; for f in [0-9]* ; do [ \$f = \$\$ ] || kill -9 \$f ; done"' &

wait
```

上記の設定の後に、 [Debian noroot 環境][DBNR]を再起動し、正常に [LXDE][LXDE] が起動することを確認します。

### Synaptic の導入

本項において、 "[Debian noroot 環境に Synaptic を導入する][ZQ11]" の投稿を参考して、 GUI 上から容易に [Debian 環境][DEBI]のソフトウェアパッケージのインストール等の管理を行うための [Debian 環境][DEBI]のソフトウェアパッケージ管理の GUI フロントエンドである [Synaptic][SYNA] を導入します。

まず、デフォルトの [Debian noroot 環境][DBNR]のデスクトップ上には、 [Synaptic][SYNA] をインストールするためのアイコンが表示されています。

しかし、そのまま [Synaptic][SYNA] アイコンをクリックすると、 [Synaptic][SYNA] の導入過程でデスクトップに表示される端末エミュレータに表示される日本語のメッセージが文字化けする問題が発生します。

この場合は、下記のように、 ```${HOME}/Desktop/Synaptic.desktop``` の先頭が ```Exec=...``` で始まる行において、環境変数 ```PATH``` の設定の直前に環境変数 ```LANG, LC_ALL, LANGUAGE``` の設定を追記し、端末エミュレータの日本語表示を無効化します。

```sh:${HOME}/Desktop/Synaptic.desktop
[Desktop Entry]
...
# Exec=/bin/bash -c "xmessage -fn '-*-*-*-*-*-*-20-*-*-*-*-*-*-*' -buttons ===Install===:0,===Cancel===:1 -default ===Install=== -nearmouse 'Install Synaptic package manager?' && fakeroot-tcp /usr/bin/env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /usr/bin/xterm -bg black -fg green -xrm 'XTerm*faceName: DroidSansMono' -xrm 'XTerm*faceSize: 8' -e /bin/bash -c 'apt-get update && apt-get -y install python-support synaptic && apt-get -y install apt-xapian-index && /usr/sbin/update-apt-xapian-index && cp -f /root/.dist/Synaptic.desktop $HOME/Desktop/Synaptic.desktop || read'"
# 環境変数 PATH の設定の直前に環境変数の設定 LANG=C LC_ALL=C LANGUAGE=en を追記する。
Exec=/bin/bash -c "xmessage -fn '-*-*-*-*-*-*-20-*-*-*-*-*-*-*' -buttons ===Install===:0,===Cancel===:1 -default ===Install=== -nearmouse 'Install Synaptic package manager?' && fakeroot-tcp /usr/bin/env LANG=C LC_ALL=C LANGUAGE=en PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /usr/bin/xterm -bg black -fg green -xrm 'XTerm*faceName: DroidSansMono' -xrm 'XTerm*faceSize: 8' -e /bin/bash -c 'apt-get update && apt-get -y install python-support synaptic && apt-get -y install apt-xapian-index && /usr/sbin/update-apt-xapian-index && cp -f /root/.dist/Synaptic.desktop $HOME/Desktop/Synaptic.desktop || read'"
GenericName[en_US]=Synaptic
GenericName=Synaptic
...
```

上記の設定後、 [Synaptic][SYNA] アイコンをクリックすると、デスクトップに ```"Install Synaptic package manager?"``` のダイアログが表示されるので、 "===Install===" をクリックします。

端末エミュレータに表示されるメッセージの表示が停止した後にリターンキーを押すことで、 [Synaptic][SYNA] の導入が完了します。

# 結論

本稿では、[前々章][CHAP01]において、 [Debian noroot アプリ][DBNR]を導入する上において、CPU の性能とメモリ容量が潤沢にある [Android OS][ANDR] 端末があれば、軽快に [Debian noroot 環境][DBNR]が動作することや [Android OS][ANDR] 端末に接続する外部デバイスとして物理キーボードと物理マウスが必要となる事を示し、 [Debian noroot アプリ][DBNR]のインストール手法及び [Debian noroot 環境][DBNR]の動作原理の概略について述べました。

また、[前章][CHAP02]において、 [Debian noroot 環境][DBNR]の導入直後において [Debian noroot 環境][DBNR]における各種障害を回避するための必要最低限の設定の概略と、 [Debian noroot 環境][DBNR]において日本語を適切に表示するためのフォントの導入及び日本語入力メソッドの導入等の日本語環境の設定の概略について述べました。

そして、 [Debian noroot 環境][DBNR]に、ソースコードのビルドに基づいたパッケージ管理システムである [Linuxbrew][BREW] 及び軽量のデスクトップマネージャである LXDE 等の幾つかの有用なソフトウェアを導入することにより、 [Debian noroot 環境][DBNR]をより快適に使用することが可能となることを述べました。

以上により、 [Android OS][ANDR] 端末に [Debian noroot 環境][DBNR]を導入することにより、 [Android OS][ANDR] 端末内に [Debian 環境][DEBI]に基づく快適なデスクトップ環境が実現できることが示されました。

# 謝辞

本稿の記述に当たって、まず最初に、 [Android OS][ANDR] 端末上で非常に軽快な [Debian 環境][DEBI]を実現することを可能にした Debian noroot 環境の開発者である [pelya 氏][PELY]に心より感謝致します。

そして、本稿における [Debian noroot アプリ][DBNR]のインストール及び [Debian noroot 環境][DBNR]の各種設定に関しては、下記の技術的資料等の参考及び各種協力を得ました。

- [Debian noroot アプリ][DBNR]の概要及びインストールの詳細については、 [Kapper 氏][KAPP]によるブログ記事が大いに参考になりました。
- [Android OS 6.0][ANDR] が動作する実機による [link2symlink 機能を実装した proot][TMPR] の動作確認に関しては、 [Uhucream 氏][UHUC]による多くの協力を得ました。
- [Debian noroot 環境][DBNR]を正常に使用するための設定に関しては、 [termux の開発コミュニティ][TMUX]によるソースコード及び差分ファイル等を参考にしました。
- 簡易テキストエディタである [nano][NANO] に関しては、 [kotak 氏][KOTA]による "[Debianでtestingやunstableからパッケージを借りる時の手順][KOAP]" の記事を参考にしました。
- ソースコードのビルドに基づくパッケージ管理システムである [Linuxbrew][BREW] の導入に関しては [thermes 氏][THER]による "[Linuxbrew のススメ][THBR]" 及び [Linuxbrew の公式ページ][BREW]等各種関連記事を参考にしました。

以上、各氏及び各コミュニティの関係各位に心より感謝致します。

最後に、 [Debian noroot 環境][DBNR]と [Android OS][ANDR] 及び [Debian 環境][DEBI]の全ての事に関わる全ての皆様に心より感謝致します。

# 追記とお断り

## 2018/04/02 現在の追記とお断り

本稿において、簡易テキストエディタ [nano][NANO] の日本語化について、 [Debian 環境][DEBI]の unstable 版である sid バージョンの [nano][NANO] パッケージを導入する手法に修正し、本稿を改稿致しました。どうか御了承下さい。

## 2018/04/23 現在の追記

本稿において、 [Debian noroot 環境を導入した Android OS 端末に接続された物理キーボードのキー配列の設定][ZQ12]についての記述を追記し、本稿を改稿致しました。どうか御了承下さい。

## 2018/06/05 現在の追記

[termux の開発コミュニティ][TMUX]による link2symlink 機能を実装した [proot][PROT] のバイナリ実行ファイルの安定版の更新に伴い、本稿を改稿致しました。どうか御了承下さい。

## 2018/06/08 現在の追記とお断り

[Linuxbrew][BREW] を自動的にインストールするための代替となるスクリプトの更新と、代替スクリプトの実行手法の変更に伴い、本稿を改稿致しました。どうか御了承下さい。

## 2018/07/30 現在の追記及びお断り

[termux の開発コミュニティ][TMUX]による link2symlink 機能を実装した [proot][PROT] のバイナリ実行ファイルの安定版の更新に伴う修正と軽量なタイル型ウィンドウマネージャである [ratpoison][RATP] に関する記述の追記を行い、本稿を改稿致しました。どうか御了承下さい。

## 2018/09/22 現在の追記及びお断り

本稿において、以下の通り改稿を行いました。どうか御了承下さい。

- [擬似端末の問題の回避][SUBSEC020101]に関する設定を Debian 環境の更新の前に行うように変更しました。
- 設定ファイル ```/etc/locale.gen``` に関して、既に設定ファイル ```/etc/locale.gen``` が存在する場合についての記述を追記しました。
- ```＄HOME/Desktop/Root-MLTerm.Desktop``` の作成による root 権限で動作する [MLTerm][MLTM] を起動させるためのアイコンに動作の不具合が発生したため、当該記述を削除しました。

## 2018/10/11 現在の追記とお断り

[Linuxbrew][BREW] を[自動的にインストールするための代替となるスクリプト][GIT1]の実行の際に、 [Linuxbrew][BREW] が使用する [ruby 処理系][RUBY]をソースコードからコンパイルする際に必要となるパッケージについて訂正を行いました。どうか御了承下さい。

## 2018/10/20 現在の追記とお断り

複数のアプリが共用する "内蔵外部ストレージ領域" を [Debian noroot アプリ][DBNR]から使用する場合に、[Debian noroot アプリ][DBNR]に「ストレージにアクセスする権限」を与える手順について、詳細な手法を追記しました。

## 2018/11/02 現在の追記とお断り

"[擬似端末の問題の回避][SUBSEC020101]" の項において、動的ライブラリ ```./libandroid-pty.so.arm``` のファイル名に誤りがありました。御詫びして訂正致します。

また、本件の誤りについて御指摘を頂いた [@kago3 氏][KAGO]に心より感謝致します。

## 2019/01/12 現在の追記とお断り

"[Termux 開発コミュニティによる libandroid-shmem.so を Debian noroot 環境に導入する][ZQ14]" を参考にして、 [Termux 開発コミュニティ][TMUX]による ```libandroid-shmem.so``` を導入する手法について追記を行い、本稿を改稿しました。どうか御了承下さい。
 
<!-- 各章及び各節のリンク一覧 -->

[CHAP01]:#debian-noroot-アプリの概要
[CHAP02]:#debian-noroot-環境の各種設定について
[CHAP03]:#結論
[SEC0101]:#debian-noroot-アプリの導入に必要なデバイスについて
[SEC0102]:#debian-noroot-アプリのインストール手法
[SEC0103]:#debian-noroot-環境の動作原理
[SEC0201]:#debian-noroot-環境の導入直後に行う設定
[SEC0202]:#debian-noroot-環境への日本語環境の導入
[SEC0203]:#debian-noroot-環境導入後の追加的なソフトウェアの導入
[SUBSEC020101]:#擬似端末の問題の回避
[SUBSEC020201]:#環境変数-lang-lc_all-language-の設定
[SUBSEC020202]:#多言語対応端末エミュレータの導入

<!-- 外部リンク一覧 -->

[DBNR]:https://play.google.com/store/apps/details?id=com.cuntubuntu&hl=ja
[ANDR]:https://www.android.com/intl/ja_jp/
[DEBI]:https://www.debian.org/index.ja.html
[PELY]:https://github.com/pelya
[ZULT]:http://www.sony.jp/tablet/products/Z_ultra/
[EVER]:http://www.yamada-denki.jp/service/everypad3/
[ZFON]:https://www.asus.com/jp/Phone/ZenFone-3-Ultra-ZU680KL/
[PLAY]:https://play.google.com/
[OSDN]:https://sourceforge.net/projects/libsdl-android/files/ubuntu/
[KAPP]:http://kapper1224.sblo.jp/
[KAP1]:http://kapper1224.sblo.jp/article/105036512.html
[UHUC]:https://qiita.com/Uhucream
[NAKA]:https://play.google.com/store/apps/developer?id=NAKAJI+Tadayoshi
[SHIF]:https://play.google.com/store/apps/developer?id=ShiftRot
[APP1]:https://play.google.com/store/apps/details?id=jp.tadnak25.inputdevices4j
[APP2]:https://play.google.com/store/apps/details?id=jp.kcm.thumbctrl.en.layout
[ZQ01]:https://qiita.com/z80oolong/items/4ef119a6af79a9276a0d
[ZQ02]:https://qiita.com/z80oolong/items/0049269559270ccc68bd
[ZQ03]:https://qiita.com/z80oolong/items/3cafdbfbdc42f04cfac3
[ZQ04]:https://qiita.com/z80oolong/items/20a1cc75722b98bd3a2c
[ZQ05]:https://qiita.com/z80oolong/items/bfa986438adf8aac51ab
[ZQ06]:https://qiita.com/z80oolong/items/61feb20a9356532a15da
[ZQ07]:https://qiita.com/z80oolong/items/d3585cd5542d3d60ce12
[ZQ08]:https://qiita.com/z80oolong/items/7575b11c4f1078e81a69
[ZQ09]:https://qiita.com/z80oolong/items/7bdfc322fa586f5d4a30
[ZQ10]:https://qiita.com/z80oolong/items/79a391a91c2f58b1c6d9
[ZQ11]:https://qiita.com/z80oolong/items/d66d0dccab32df2e0798
[ZQ12]:https://qiita.com/z80oolong/items/2270df5c31c2ced76854
[ZQ13]:https://qiita.com/z80oolong/items/dc68358a27f73d0eb1ac
[ZQ14]:https://qiita.com/z80oolong/items/47ec2fde9734e2bdfc47
[IMG0]:https://qiita-image-store.s3.amazonaws.com/0/86258/0bfa7ef8-c632-d51a-2348-cabd4ae7009a.jpeg
[IMG1]:https://qiita-image-store.s3.amazonaws.com/0/86258/23d65123-6ec8-f04c-f8ff-24206550358b.jpeg
[IMG2]:https://qiita-image-store.s3.amazonaws.com/0/86258/ba81c49c-034c-f20b-0475-501c20667887.jpeg
[IMG3]:https://qiita-image-store.s3.amazonaws.com/0/86258/b45b7596-ad88-9513-85cb-a6b984270ae2.jpeg
[IMG4]:https://qiita-image-store.s3.amazonaws.com/0/86258/21b8c9f6-e2e6-f7af-da48-afdce4e327cc.jpeg
[IMG5]:https://qiita-image-store.s3.amazonaws.com/0/86258/8b184d82-ba02-2067-9b63-e0f016928af2.jpeg
[IMG6]:https://qiita-image-store.s3.amazonaws.com/0/86258/31170724-c879-536e-4393-6345a2865087.jpeg
[XSDL]:https://play.google.com/store/apps/details?id=x.org.server&hl=ja
[PROT]:http://proot.me/
[XFCE]:https://xfce.org/
[FTAL]:https://www.google.co.jp/search?q=%E5%95%8F%E9%A1%8C%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%9F%E3%81%9F%E3%82%81+%E3%82%92%E7%B5%82%E4%BA%86%E3%81%97%E3%81%BE%E3%81%99+android&ie=utf-8&oe=utf-8
[LINK]:http://man7.org/linux/man-pages/man2/link.2.html
[TMUX]:https://termux.com/
[TMPR]:https://github.com/termux/proot
[NANO]:https://nano-editor.org/
[BREW]:http://linuxbrew.sh/
[RUBY]:https://www.ruby-lang.org/ja/
[ARMP]:https://www.arm.com/
[X86P]:https://www.intel.co.jp/content/www/jp/ja/homepage.html
[SCRE]:https://www.gnu.org/s/screen/
[VLGF]:http://vlgothic.dicey.org/
[UMEF]:https://ja.osdn.net/projects/ume-font/wiki/FrontPage
[SAKU]:http://www.pleyades.net/david/projects/sakura
[MLTM]:http://mlterm.sourceforge.net/
[FCIT]:https://fcitx-im.org/wiki/Fcitx
[MOZC]:https://github.com/google/mozc
[RATP]:https://www.nongnu.org/ratpoison/
[LXDE]:http://lxde.org/
[SYNA]:http://www.nongnu.org/synaptic/
[FIRE]:https://www.mozilla.org/ja/firefox/new/
[SYLP]:https://sylpheed.sraoss.jp/ja/
[GEAN]:https://www.geany.org/
[LOFF]:https://ja.libreoffice.org/
[DROP]:https://matt.ucc.asn.au/dropbear/dropbear.html
[THER]:https://qiita.com/thermes
[THBR]:https://qiita.com/thermes/items/926b478ff6e3758ecfea
[KOTA]:http://kotak.hatenablog.com/
[KOAP]:http://kotak.hatenablog.com/entry/2014/06/19/181942
[GIT1]:https://github.com/z80oolong/linuxbrew-altinstall
[KAGO]:https://qiita.com/kago3