はじめに
Debian noroot とは、 Android OS 上において root 権限を取ることなく Debian 環境において動作する軽量デスクトップマネージャである Xfce4 を用いたデスクトップ環境を構築するためのアプリケーションです。
Debian noroot 環境は、 Android OS 及び Linux の各種ディストリビューションにおいて、 root 権限を取ること無く chroot 環境を擬似的に実現するソフトウェアである proot を用いて、 chroot 環境下で動作する Debian 環境を構築し、 Android OS 上に移植された X Windows System のサーバアプリケーションである Xserver XSDL に chroot 環境下の Debian 環境にインストールされた Xfce4 なるデスクトップマネージャを表示することによって実現しています。
Debian noroot アプリをインストールするには、 Google Play を用いた手法の他、 [Sourceforge.net 上の Debian noroot アプリのアーカイブページ]OSDNより .apk ファイルをダウンロードして手動でインストールすることも出来ます。
CPU の性能とメモリ容量が潤沢にある Android OS 端末であれば、 Debian noroot の導入によって Android OS 端末上で root 権限を取ること無く非常に軽快な Debian 環境を実現することができます。
しかし、 Debian noroot アプリをインストールした直後の初期状態における Debian noroot 環境では、擬似端末を使用したソフトウェアが使用出来ない不具合が生じたり、日本語の表示及び入力を行うための環境が整っていない等、通常の使用を行うには不十分です。
そこで、 Debian noroot 環境を導入する上において、 Debian noroot アプリをインストールした直後に、障害復旧の環境の構築と、キーボードの設定変更を行った時に生じる問題及び擬似端末を使用したソフトウェアが使用出来ない問題を回避する為の設定等、 Debian noroot 環境を使用する上での各種問題を回避するための設定を行いました。
次に、 Debian noroot 環境において日本語環境の導入を行い、最後に Debian noroot 環境に、ソースコードの取得及びビルドに基づいたパッケージ管理システムである Linuxbrew 及び、軽量のデスクトップマネージャである LXDE 等の幾つかの有用なソフトウェアを導入することにより、以下の画像に示すようなデスクトップ環境が構築され、 Debian noroot 環境をより快適に使用することが可能となりました。
本稿では、 Android OS 上に Debian noroot アプリのインストールを行った後において必要となる各種環境設定についてまとめます。
本稿では、最初に、 "Debian noroot アプリの概要" の章において、 Debian noroot アプリに必要なデバイス等や Debian noroot アプリのインストール手法及び Debian noroot 環境の動作原理等の Debian noroot アプリの概要について述べます。
次に、 "Debian noroot 環境の各種設定について" の章において、 Debian noroot 環境の導入直後において、 Debian noroot 環境を正常に使用するための必要最小限の各種設定と、 Debian noroot 環境において日本語環境を使用するための設定等、 Debian noroot 環境における初期設定の概略について述べます。
最後に、 "結論" の章において、本稿の結論について述べます。
Debian noroot アプリの概要
Debian noroot とは、 pelya 氏によって開発された、 Android OS 上において root 権限を取ることなく Debianにおいて動作する軽量デスクトップマネージャである xfce4 を用いたデスクトップ環境を構築するためのアプリケーションです。
本章では、最初に "Debian noroot アプリの導入に必要なデバイスについて" の節において、 Debian noroot アプリの導入に際して、使用することが望ましい Android OS 端末及び物理入力デバイスについて述べます。
次に、 "Debian noroot アプリのインストール手法" の節において、 Android OS 端末に Debian noroot アプリをインストールする手法について述べます。
そして最後に、 "Debian noroot 環境の動作原理" の節において、 Debian noroot 環境が、 Android OS 端末において動作する原理の概略について述べます。
Debian noroot アプリの導入に必要なデバイスについて
Debian noroot アプリ は、メモリ容量が少なく、 CPU の性能が非力な旧式の Android OS 端末でも導入することが可能ですが、 quad core 若しくは octa core 程度の性能を持つ CPU と少なくとも 2GB 以上のメモリ容量がある Android OS 端末であれば、 Debian noroot アプリ の導入によって Android OS 端末上で非常に軽快な Debianによるデスクトップ環境を実現することが出来ます。
なお、 Debian noroot アプリ は、公式では、 Android OS 5.* 以前の端末のみの対応ですが、後述する link2symlink 機能を実装した proot を導入する設定を行うことにより、 Android OS 6.0 以降の端末でも Debian noroot アプリインストールして Debian noroot 環境を導入することが可能です。
現在、当方は手元の Sony Xperia Z Ultra と Everypad III 及び ASUS Zenfone 3 Ultra 上に Debian noroot アプリをインストールして Android OS 上で Debian noroot 環境を運用しています。
Debian noroot アプリを使用する際は、 Android OS に導入されているソフトウェアキーボードによる入力及びスクリーンを直接タップすることによる入力は非常に困難であるため、物理的な外部入力デバイスとして、 bluetooth 若しくは USB OTG による接続の物理キーボード及びマウスを用いることを強く御勧め致します。
物理キーボードに関しては、 Android OS 端末と共に携帯することが非常に容易であり、打鍵性にも優れているという観点から、折畳式の小型キーボードを御勧めします。
また、折畳式の小型キーボードについては、物理マウスを操作する場合において適切なスペースを確保できない状況においてもカーソルポインタの操作を可能にすることが出来ることや、物理マウスの携帯を省略することが出来る観点から、以下の画像に示すようなタッチパッドデバイス付きのキーボードを用意することを御勧めします。
Debian noroot アプリのインストール手法
Android OS 端末において、 Debian noroot アプリをインストールするには、下記に示す2通りの手法が有ります。
- Google Play アプリ経由で Debian noroot アプリをダウンロードしてインストールする手法
- Sourceforge.net 上の Debian noroot アプリのアーカイブページから .apk ファイルをダウンロードして手動でインストールする手法
前者は、通常の Google Play アプリがインストールされた Android OS 端末において、他の Google Play 対応アプリと同様の手法に基づいてインストールする手法です。
後者は、 Google Play アプリがインストールされていない Android OS 端末において、 Sourceforge.net の Web ページより、Debian noroot アプリの .apk ファイルをダウンロードして、 Android OS 端末におけるファイルマネージャのアプリインストール機能等を用いて手動でインストールする手法です。
詳細な Debian noroot アプリのインストール手法については、Kapper 氏による "新世代タブレット Nexus7 Debian noroot、Gimpテスト編 その24" の記事の方も参考にして下さい。
なお、 Android OS 6.0 以降において、外付け SD カードを内部ストレージとしてフォーマットし、 SD カード上に Debian noroot アプリをインストールする場合は、下記の点に留意する必要があります。
- Android OS 端末において使用する SD カードは、 Application performance class 1 (A1) 以上の規格のカードを強く御勧め致します。 A1 規格以外の物を用いると、安定した内部ストレージとしてのフォーマットや、 Debian noroot アプリに限らずほぼ全てのアプリの安定な動作が一切保証されません。
- Debian noroot アプリを導入する際は、最初に外付け SD カードを内部ストレージとしてフォーマットし、アプリが SD カードにインストールされる状態から Debian noroot アプリを導入して下さい。 Debian noroot アプリを端末本体の内部ストレージに導入した後で、 SD カードに移動させると、 Debian noroot アプリの動作に不具合が発生します。
- SD カードを「アプリとデータ用内部ストレージとして使用する」設定においてフォーマットした場合に、ディレクトリ
/storage/emulated/0
以下 (即ち、複数のアプリが共用する "内蔵外部ストレージ領域") を Debian noroot アプリから使用する場合、Debian noroot アプリに「ストレージにアクセスする権限」を与えることを忘れないで下さい。- 即ち、以下の手順に沿って設定を進めます。先ずは、以下の画像のように、システムの
[設定]
のアイコンを開いて[アプリ]
の項目を選択します。![([アプリ]の項目)][IMG3]
- 続いて、
[Debian]
の項目を選択すると、以下の画像のように[アプリ情報]
の項目が表示されるので、これより[権限]
の項目を選択します。![([Debian]の項目)][IMG4]
- すると、**以下の画像のように
[ストレージ]
権限のスイッチが表示されます。**以下の画像では、[ストレージ]
権限は off になっています。![([権限]の項目)][IMG5]
- 最後に、以下の画像のように
[ストレージ]
権限のスイッチを on に切り替えて、Debian noroot アプリに「ストレージにアクセスする権限」を与える設定を行います。![([権限]の項目)][IMG6]
- 即ち、以下の手順に沿って設定を進めます。先ずは、以下の画像のように、システムの
そして、 Debian noroot アプリをインストールした直後に、Debian noroot アプリを起動すると、自動的に Debian noroot 環境のイメージファイルのダウンロード及び展開と、 locale 等の自動検出及び各種設定が行われ、軽量デスクトップマネージャである xfce4 を使用した Debian noroot 環境が起動します。
Debian noroot 環境の動作原理
前節の手順に基づいてインストールされた Debian noroot 環境は、下記に述べる原理に基づいて動作します。
- Android OS より Debian noroot アプリを起動した時に、Xserver XSDL サーバ画面のヘルプメッセージの表示を抑止し、 Xserver XSDL サーバ画面上に "Ctrl", "Shift", "Alt" キーの働きをするボタンを表示する設定に基づいて Xserver XSDL サーバを起動する。
-
Android OS のネイティブ環境下でシェルスクリプト
/data/data/com.cuntubuntu/files/img/proot.sh
を./startx.sh
を引数にして実行し、以下の処理を行う。-
Android OS 端末の外部ストレージ領域及び Debian noroot アプリ固有の外部ストレージ領域のバインドオプション及び
HOME, PATH, LD_PRELOAD
等の Debian noroot 環境全体に関連する環境変数の設定を行う。 -
proot
コマンドを用いて、/data/data/com.cuntubuntu/files/img
をルートディレクトリとして Android OS のネイティブ環境上の/dev, /proc, /sys, /system
ディレクトリ及び Android OS 端末の外部ストレージ領域と Debian noroot アプリ固有の外部ストレージ領域の絶対パスをバインドした chroot 環境を構築する。
-
Android OS 端末の外部ストレージ領域及び Debian noroot アプリ固有の外部ストレージ領域のバインドオプション及び
-
/data/data/com.cuntubuntu/files/img
をルートディレクトリとした chroot 環境において/startx.sh
を実行し、以下の処理を行う。- fakeroot 権限による Dbus 経由で
xfce4-session
コマンドを実行して軽量デスクトップマネージャである xfce4 を起動し、 xfce4 の GUI を Xserver XSDL サーバに表示させる。 - 以上で、一連の Debian noroot 環境の起動プロセスが完了する。
- fakeroot 権限による Dbus 経由で
動作原理の詳細については、 "Debian noroot 環境の動作原理について" の投稿を参照して下さい。
Debian noroot 環境の各種設定について
本章において、まず最初に、 "Debian noroot 環境の導入直後に行う設定" の節において、 Debian noroot 環境の起動に障害が発生した時の障害回復用の環境構築導入及び Debian noroot 環境の使用において発生する問題を回避する設定等、 Debian noroot 環境を使用するために必須となる各種設定について述べます。
次に、 "Debian noroot 環境への日本語環境の導入" の節において、 Debian noroot 環境において、日本語フォントの導入及び日本語入力メソッドの導入等の日本語環境に関する設定について述べます。
最後に、 "Debian noroot 環境導入後の追加的なソフトウェアの導入" の節において、前々節及び前節の設定が完了した後に、 Debian noroot 環境を使用する上で、利便性を高めるのに有用なソフトウェアの導入の概略について述べます。
なお、本稿においては特に断りのない限り、 ARM 32 bit アーキテクチャ若しくは ARM 64 bit アーキテクチャを搭載した携帯端末に導入した Debian noroot 環境に関する設定について述べることとします。
Debian noroot 環境の導入直後に行う設定
本節では、 Debian noroot 環境を使用する上において発生する障害を回避するための設定等、 Debian noroot 環境において必須となる各種設定について、順を追って述べます。
Debian noroot 環境に接続した物理キーボードの設定
Debian noroot 環境において、物理キーボードを使用する場合、キーに刻印されている文字と異なる文字が入力されたり、特定のキーが有効にならない等、物理キーボードの打鍵性が著しく損なわれる場合があります。
ここで、通常の Linux ディストリビューションの場合は、 xmodmap
コマンド等に基づく設定を行うのが一般的です。
しかし、 Debian noroot 環境は、前章の "Debian noroot 環境の動作原理" において前述した通り、 Android OS 上において、 proot
コマンドによって構築された chroot 環境であるため、 Debian noroot 環境を導入した Android OS と、カーネル及びハードウェア資源を共有しています。
従って、 Debian noroot 環境において、物理キーボードのキー配列の設定を行うには、下記のようにして、 Android OS 上若しくは Debian noroot アプリの初期起動画面から設定を行う必要があります。
- NAKAJI Tadayoshi 氏による "KCM for 日本語106/109キーボード" 若しくは、 ShiftRot 氏による "106/109 ハードウェアキーボード 親指Ctrlレイアウト (英語配列)(ベータ版)" といった Android OS 端末に接続した物理キーボードのキー配列の設定アプリを導入し、キー配列の設定アプリに基づいて適切にキー配列を設定する。
- Debian noroot アプリの起動直後に、 [CHANGE DEVICE CONFIGURATION] のボタンをタップして [Device Configuration] メニューを表示させ、 [Remap phisical keys] を選択することにより、物理キーボードの配列に関する設定を行う。
上記の Debian noroot 環境に接続された物理キーボードの設定についての詳細については、 "Debian noroot 環境における物理キーボード配列の設定手法" の投稿を参照して下さい。
一時的な日本語表示の無効化
Debian noroot 環境においては、初期状態では Debian noroot アプリのインストール時に自動的に検出される locale 関連の設定が日本語のものとなっているにも関わらず、日本語フォントがインストールされていないために各種コマンドライン上のエラーメッセージ等が正常に表示されない問題が発生します。
この場合は、 locale 関連の環境変数 LC_ALL
等を以下のように変更して shell を起動することにより、各種メッセージ及びエラーメッセージ等の日本語化を無効にします。
# env LANG=C LC_ALL=C LANGUAGE=en bash
この設定は、後述する多言語対応の端末エミュレータの導入を行うまでの間、適宜行います。
障害回復用の環境の構築
本稿において述べる各種設定の過程において、 Android OS から Debian noroot アプリを再起動した場合、 Debian noroot 環境の起動画面の停止及び Debian noroot アプリ全体の異常終了等により、 Debian noroot 環境全体が完全に起動しなくなる障害が発生することがあります。
このような障害が発生した場合に、 Debian noroot 環境の障害を回復させる為の必要最小限の環境を構築する設定を "Debian noroot 環境に障害復旧用の環境を導入する" の投稿を参考にして行います。
この設定は、重篤な障害から回復するために必要となる設定ですから必ず行って下さい。
まず最初に、下記のようにして、シェルスクリプト /proot.sh
を /proot-safe.sh
なるファイル名でバックアップを作成し、 /proot-safe.sh
についてユーザに対して実行権限を付与します。
# cp -p /proot.sh /proot-safe.sh
# chmod u+x /proot-safe.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
を下記の内容で作成します。
#!/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
についてユーザに対して実行権限を付与します。
# chmod u+x /startx-safe.sh
キーボードレイアウトの設定時の問題の回避
Debian noroot 環境において、xfce4 の設定画面からキーボードの設定変更の操作を行った場合、 "問題が発生したため [Debian] を終了します" のメッセージを表示して Debian noroot 環境が異常終了し、その後全く Debian noroot 環境が起動しなくなる重篤な障害が発生します。
このような問題を回避するため、 "Debian noroot 環境におけるキーボード設定操作での重篤な障害とその回避策について" の投稿を参考にして、 Debian noroot 環境の起動時に、ファイル $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml
を強制的に削除する設定を行います。
この設定は、重篤な障害を回避するための設定ですから必ず行って下さい。
まず最初に、シェルスクリプト /startx.sh
に下記の記述を追記して Debian noroot 環境を再起動します。
...
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 環境を再起動して、 Debian noroot 環境が正常に起動することを確認します。
link2symlink 機能を実装した proot の導入
Android OS 6.0 上において、 Debian noroot 環境を起動すると、 apt-get
等の Debian 環境のパッケージ管理コマンド及び git 等がコマンド内部で使用するファイルに対するハードリンクの実行の失敗により正常に起動しない問題が発生します。
これは、 Android OS 6.0 における SELinux の権限に関する設定において、システムコール link(2)
の実行が禁止されている事が原因と考えられます。
上記の問題を回避するには、 "Debian noroot 環境において link2symlink 機能を実装した proot を導入する" の投稿を参考にして、下記に述べる設定に基づいて、 Debian noroot 環境で用いられている proot に代えて termux の開発コミュニティによる link2symlink 機能を実装した proot を導入する必要があります。
この設定は、 Android OS 6.0 以上を搭載する端末においては、必ず行う必要が有ります。
まず最初に、下記の通りにして、 termux の開発コミュニティによる link2symlink 機能を実装した proot のバイナリ実行ファイルをダウンロードします。
$ wget -O ./proot.arm https://git.io/proot-0.7.arm
次に、下記のようにして proot の実行ファイルをルートディレクトリにインストールします。この時、 proot の実行ファイルの名前は /proot
と異なる名前にする必要が有ります。
$ install -v -m 0700 ./proot.arm /proot.link2symlink
ここで、ルートディレクトリ上の実行ファイル /proot.link2symlink
の実行権限がユーザ権限に対して与えられていることと、 /proot.link2symlink --help
コマンドが正常に動作することを確認します。
$ 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 である ./proot.link2symlink
に修正し、オプション --link2symlink
を追加します。
#!/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 環境を再起動して、正常に link2symlink 機能が実装された proot が導入されていることを確認します。
擬似端末の問題の回避
Debian noroot 環境において、端末エミュレータである sakura 及び端末多重化ソフトウェアである screen 等の擬似端末を利用したソフトウェアがデバイスファイル /dev/ptmx を経由せずに擬似端末にアクセスしている為に正常に動作しない問題が発生します。
この問題を回避するために、 "Debian noroot 環境で擬似端末が使用できない問題を回避する" の投稿を参考にして、 Debian noroot 環境に、デバイスファイル /dev/ptmx を経由して擬似端末にアクセスする標準ライブラリ関数を含む動的ライブラリ libandroid-pty.so
を導入します。
この設定は、 Debian noroot 環境における大部分のソフトウェアの動作に影響を受ける問題を回避する設定ですから、必ず行うようにして下さい。
まず最初に、下記のように wget
コマンドを実行して、動的ライブラリ libandroid-pty.so
のバイナリコードを取得します。
$ wget -O ./libandroid-pty.so.arm https://git.io/libandroid-pty.so-0.1.1.arm
次に、バイナリファイル libandroid-pty.so.arm
を下記のようにしてルートディレクトリにインストールします。
$ sudo install -v -m 0700 ./libandroid-pty.so.arm /libandroid-pty.so
ここで、ルートディレクトリ上の動的ライブラリ /libandroid-pty.so
の実行権限がユーザ権限に対して与えられていることを確認します。
$ ls -l /libandroid-pty.so
-rwx------. 1 u0_a135 u0_a135 4812 1月 16 18:13 /libandroid-pty.so
$
そして、シェルスクリプト /proot.sh
において、環境変数 LD_PRELOAD
の設定が書かれている行を下記のように修正します。
...
# export "LD_PRELOAD=/libdisabledselinux.so /libandroid-shmem.so"
export "LD_PRELOAD=/libdisabledselinux.so /libandroid-shmem.so /libandroid-pty.so" # 末尾に /libandroid-pty.so を追加する。
...
以上の設定の後に、 Debian noroot 環境を再起動して、 Debian noroot 環境が正常に起動することを確認します。
Termux 開発コミュニティによる libandroid-shmem.so の導入
Debian noroot 環境において、一部の共有メモリ関係のライブラリ関数を用いたソフトウエアの動作に不具合が発生する問題を回避するために、 "Termux 開発コミュニティによる libandroid-shmem.so を Debian noroot 環境に導入する" の投稿を参考にして、 Debian noroot 環境に、Termux の開発コミュニティによって改良された libandroid-shmem.so
を導入します。
この設定は、 Debian noroot 環境の動作を安定化させる設定ですから、設定を行うことを強く御勧めします。
まず最初に、下記のように wget
コマンドを実行して、動的ライブラリ libandroid-shmem-termux.so
のバイナリコードを取得します。
$ wget -O ./libandroid-shmem-termux.so.arm https://git.io/libandroid-shmem-termux.so-0.2.103.arm
次に、バイナリファイル libandroid-shmem-termux.so.arm
を下記のようにしてルートディレクトリにインストールします。
$ sudo install -v -m 0700 ./libandroid-shmem-termux.so.arm /libandroid-shmem-termux.so
ここで、ルートディレクトリ上の動的ライブラリ /libandroid-shmem-termux.so
の実行権限がユーザ権限に対して与えられていることを確認します。
$ 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
の設定が書かれている行を下記のように修正します。
...
# 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 環境を再起動して、 Debian noroot 環境が正常に起動することを確認します。
Debian 環境の更新
以上の設定が完了した後は、通常の Debian 系のディストリビューションと同様、下記のコマンドを実行して、 Debian 環境を最新のバージョンに更新します。
$ sudo apt-get update
$ sudo apt-get upgrade
上記の apt-get update
コマンド及び apt-get upgrade
コマンドの実行により、 Debian 環境の更新が完了することを確認します。
Debian noroot 環境への日本語環境の導入
本節では、 "Debian noroot 環境で日本語環境を導入する" の投稿を参考にして、 Debian noroot 環境に日本語フォント及び日本語入力メソッド等の日本語環境の導入を行うための各種設定について述べます。
多言語化サポートパッケージ locales
の導入
まず最初に本項において、 Debian noroot 環境に多言語化サポートパッケージである locales
を導入します。
デフォルトでは英語以外の言語の表示に必要なものが不足しているために、後述の環境変数 LANG, LC_ALL, LANGUAGE
の設定でエラーが発生するので、以下のコマンドを実行して、パッケージ locales
をインストールします。
$ sudo apt-get install locales
次に、テキストファイル /etc/locale.gen
を下記の内容で作成します。また、既に設定ファイル /etc/locale.gen
が存在するならば、下記の記述のある行についてコメントアウトを解除します。
ja_JP.UTF-8 UTF-8
en_US.UTF-8 UTF-8
そして、以下のコマンドを実行して、日本語及び英語の locale を生成します。
$ sudo /usr/sbin/locale-gen
環境変数 LANG, LC_ALL, LANGUAGE
の設定
次に本項において、 Debian noroot 環境における日本語 locale の指定と、アプリケーションの地域言語化対応のライブラリである gettext で使用する言語の指定のために、環境変数 LANG, LC_ALL, LANGUAGE
の設定を行います。
環境変数 LANG, LC_ALL, LANGUAGE
を設定するには、シェルスクリプト /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 環境における timezone の設定を行います。
Debian noroot 環境における timezone の設定については、通常の Debian 系のディストリビューションの場合と異なり、シェルスクリプト /proot.sh
において、環境変数 TZ
の値を設定することにより行います。
ここで、デスクトップマネージャの時計表示等が実際の時刻と比べて正確な時刻を表示していない場合は、シェルスクリプト /proot.sh
において環境変数 TZ
の値を設定している部分を以下のように修正を行います。
...
#export TZ="`getprop persist.sys.timezone`"
export TZ="Asia/Tokyo" # 若しくは TZ="Japan"
...
上記の設定を行った後は、 Debian noroot 環境の再起動を行い、デスクトップマネージャの時計表示等が正確であることを確認します。
日本語フォントの導入
そして、Debian noroot 環境に日本語フォントを導入します。本稿では、 VL ゴシックフォント及び、梅フォント、 Umeplus を導入します。
以下のようにして、パッケージ fonts-vlgothic, fonts-horai-umefont, fonts-umeplus
をインストールします。
$ sudo apt-get install fonts-vlgothic
$ sudo apt-get install fonts-horai-umefont
$ sudo apt-get install fonts-umeplus
多言語対応端末エミュレータの導入
本項において、Debian noroot 環境に多言語対応の端末エミュレータを導入します。本稿では、 MLTerm と、 sakura を導入し、 MLTerm の設定について説明を行います。
まず最初に、以下のようにしてパッケージ sakura, mlterm, mlterm-im-fcitx
をインストールします。
$ sudo apt-get install sakura
$ sudo apt-get install mlterm
$ sudo apt-get install mlterm-im-fcitx
そして、 MLTerm の使用フォントを設定するために設定ファイル ~/.mlterm/aafont
を以下のように作成します。本稿では VL ゴシックフォントを使用する設定を行います。
# 本ファイルでは、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 が正常に実行されることと、正常に使用出来る事を確認します。
$ mlterm
日本語入力メソッドの導入
本項において、 Debian noroot 環境に日本語入力メソッドを導入します。本稿では、 fcitx 及び mozc を導入します。
まず最初に、以下のようにパッケージ fcitx-mozc, im-config
をインストールします。
$ sudo apt-get install fcitx-mozc
$ sudo apt-get install im-config
次に、シェルスクリプト /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 に設定するために im-config
コマンドを以下のように起動します。
$ sudo im-config -n fcitx
以上の設定の後、 Debian noroot 環境を再起動して、 fcitx が正常に起動することを確認します。
なお、 fcitx の設定は設定メニューから “fcitx の設定” を選択して行いますが、漢字変換に関する keybind の設定は Android OS 上で使用している IME の keybind (例えば Ctrl+Space 及び Shift+Space 等) と衝突しないような keybind (例えば Zenkakuhankaku 若しくは Super+Space 等) を使用する必要があります。
端末エミュレータを起動する為のアイコンを作成する
本項において、 "多言語対応端末エミュレータの導入" の項で導入した MLTerm を起動するためのデスクトップ上のアイコンを作成します。
まず最初に、ファイル ${HOME}/Desktop/XTerm.desktop
を ${HOME}/Desktop/MLTerm.desktop
にコピーして、ユーザに対して実行権限を付与します。
# cp -p ~/Desktop/XTerm.desktop ~/Desktop/MLTerm.desktop
# chmod u+x ~/Desktop/MLTerm.desktop
そして、先頭が Exec=...
及び Name[en_US]=..., Name=...
で始まる行を以下のように修正します。
[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 のアイコンが表示されることと、 MLTerm アイコンをクリックした時の MLTerm の正常な起動と MLTerm 上での正常な日本語の表示が行われていることを確認します。
簡易テキストエディタの日本語化
Debian noroot 環境上で標準でインストールされている簡易テキストエディタである nano は、デフォルトでの状態では、画面表示のメッセージ等が日本語化されていないため、本稿では、 Debian 環境 の sid 版の nano パッケージを導入し、 nano の画面表示のメッセージを日本語化します。
まず最初に、 apt-get
に関する設定ファイル /etc/apt/apt.conf.d/99target
を下記の内容で作成します。
APT::Default-Release "jessie";
次に、 apt-get
に関する設定ファイル /etc/apt/sources.list
の末尾に下記に示す記述を追記します。
...
# ↓ ファイルの末尾に下記の2行の記述を追記する。
deb http://ftp.jp.debian.org/debian sid main
deb-src http://ftp.jp.debian.org/debian sid main
そして、以下のコマンドを実行して、 Debian 環境 の sid 版の nano パッケージを導入します。
$ sudo apt-get update
$ sudo apt-get install nano/sid
最後に、 nano の設定ファイルである /etc/nanorc
をホームディレクトリの直下にコピーします。
$ cp -p /etc/nanorc $HOME/.nanorc
以上の設定の後、 nano
コマンドを起動して、簡易テキストエディタである nano の画面表示のメッセージが日本語化されていることを確認します。
Debian noroot 環境導入後の追加的なソフトウェアの導入
本節では、 Debian noroot 環境において、前々節及び前節で述べた各種設定を行った後、利便性のために導入すべき追加的なソフトウェアとして Linuxbrew と LXDE 及び Synaptic を取り上げ、これらの導入手法について述べます。
なお、前述した Linuxbrew と LXDE 及び Synaptic の他に、利便性を高めるソフトウェアとして下記のソフトウェアを導入することを御勧めします。
- 高機能 Web ブラウザである Firefox
- 軽量メールクライアントである Sylpheed
- 簡易 IDE である Geany
- オープンソースのオフィススイートである LibreOffice
- 軽量 SSH サーバである dropbear
- 軽量なタイル型ウィンドウマネージャである ratpoison
軽量 SSH サーバである dropbear の導入手法については、 "Debian noroot 環境において dropbear に基づく SSH サーバを導入する" の投稿を参照して下さい。
また、軽量で物理キーボードに基づいた操作を行うことが可能なタイル型ウィンドウマネージャである ratpoison の導入手法については、 "Debian noroot に ratpoison を導入する" の投稿を参照して下さい。
Linuxbrew の導入
本項において、 "Debian noroot 環境に Linuxbrew を導入する" の投稿を参考にして、ソースコードの取得及びビルドに基づいたパッケージ管理システムである Linuxbrew を導入します。
Linuxbrew に関しては、軽量 SSH サーバである dropbear の導入や、Debian noroot 環境において動作に問題のあるパッケージをソースコードから手動でビルドする際に必要となりますので、 Linuxbrew を導入することを強く御勧めします。
まず最初に、 "Debian noroot 環境に Linuxbrew を導入する" の投稿及び Linuxbrew の公式ページに基づいて Linuxbrew に依存するパッケージと Linuxbrew 本体のリポジトリを導入します。
$ 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 アーキテクチャ及び 64 bit x86 アーキテクチャ以外を搭載した携帯端末にインストールされた Debian noroot 環境に Linuxbrew を導入する場合、前述の Linuxbrew の本体のリポジトリを導入するコマンドを実行すると、途中で Linuxbrew が使用する ruby 処理系の bottle ファイルの取得に失敗して、導入作業が正常に行われません。
従って、これらの携帯端末における環境の場合は、 "Linuxbrew の自動的なインストールスクリプトが異常終了する場合における代替の導入手法" の投稿に基づき、 Linuxbrew の開発コミュニティによる Linuxbrew のインストールスクリプトに代えて、下記のようにして Linuxbrew を導入する必要が有ります。
$ 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
を再起動します。
...
# 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 を導入する" の投稿を参考にして、軽量な統合デスクトップマネージャである LXDE を導入します。
まず最初に、下記のように、パッケージ lxde
をインストールします。
sudo apt-get install lxde
次に、下記のようにして、シェルスクリプト /startx.sh
において dbus-launch
経由で xfce-session
コマンドを起動している行を startlxde
コマンドを起動するように修正します。
...
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 環境を再起動し、正常に LXDE が起動することを確認します。
Synaptic の導入
本項において、 "Debian noroot 環境に Synaptic を導入する" の投稿を参考して、 GUI 上から容易に Debian 環境のソフトウェアパッケージのインストール等の管理を行うための Debian 環境のソフトウェアパッケージ管理の GUI フロントエンドである Synaptic を導入します。
まず、デフォルトの Debian noroot 環境のデスクトップ上には、 Synaptic をインストールするためのアイコンが表示されています。
しかし、そのまま Synaptic アイコンをクリックすると、 Synaptic の導入過程でデスクトップに表示される端末エミュレータに表示される日本語のメッセージが文字化けする問題が発生します。
この場合は、下記のように、 ${HOME}/Desktop/Synaptic.desktop
の先頭が Exec=...
で始まる行において、環境変数 PATH
の設定の直前に環境変数 LANG, LC_ALL, LANGUAGE
の設定を追記し、端末エミュレータの日本語表示を無効化します。
[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 アイコンをクリックすると、デスクトップに "Install Synaptic package manager?"
のダイアログが表示されるので、 "===Install===" をクリックします。
端末エミュレータに表示されるメッセージの表示が停止した後にリターンキーを押すことで、 Synaptic の導入が完了します。
結論
本稿では、前々章において、 Debian noroot アプリを導入する上において、CPU の性能とメモリ容量が潤沢にある Android OS 端末があれば、軽快に Debian noroot 環境が動作することや Android OS 端末に接続する外部デバイスとして物理キーボードと物理マウスが必要となる事を示し、 Debian noroot アプリのインストール手法及び Debian noroot 環境の動作原理の概略について述べました。
また、前章において、 Debian noroot 環境の導入直後において Debian noroot 環境における各種障害を回避するための必要最低限の設定の概略と、 Debian noroot 環境において日本語を適切に表示するためのフォントの導入及び日本語入力メソッドの導入等の日本語環境の設定の概略について述べました。
そして、 Debian noroot 環境に、ソースコードのビルドに基づいたパッケージ管理システムである Linuxbrew 及び軽量のデスクトップマネージャである LXDE 等の幾つかの有用なソフトウェアを導入することにより、 Debian noroot 環境をより快適に使用することが可能となることを述べました。
以上により、 Android OS 端末に Debian noroot 環境を導入することにより、 Android OS 端末内に Debian 環境に基づく快適なデスクトップ環境が実現できることが示されました。
謝辞
本稿の記述に当たって、まず最初に、 Android OS 端末上で非常に軽快な Debian 環境を実現することを可能にした Debian noroot 環境の開発者である pelya 氏に心より感謝致します。
そして、本稿における Debian noroot アプリのインストール及び Debian noroot 環境の各種設定に関しては、下記の技術的資料等の参考及び各種協力を得ました。
- Debian noroot アプリの概要及びインストールの詳細については、 Kapper 氏によるブログ記事が大いに参考になりました。
- Android OS 6.0 が動作する実機による link2symlink 機能を実装した proot の動作確認に関しては、 Uhucream 氏による多くの協力を得ました。
- Debian noroot 環境を正常に使用するための設定に関しては、 termux の開発コミュニティによるソースコード及び差分ファイル等を参考にしました。
- 簡易テキストエディタである nano に関しては、 kotak 氏による "Debianでtestingやunstableからパッケージを借りる時の手順" の記事を参考にしました。
- ソースコードのビルドに基づくパッケージ管理システムである Linuxbrew の導入に関しては thermes 氏による "Linuxbrew のススメ" 及び Linuxbrew の公式ページ等各種関連記事を参考にしました。
以上、各氏及び各コミュニティの関係各位に心より感謝致します。
最後に、 Debian noroot 環境と Android OS 及び Debian 環境の全ての事に関わる全ての皆様に心より感謝致します。
追記とお断り
2018/04/02 現在の追記とお断り
本稿において、簡易テキストエディタ nano の日本語化について、 Debian 環境の unstable 版である sid バージョンの nano パッケージを導入する手法に修正し、本稿を改稿致しました。どうか御了承下さい。
2018/04/23 現在の追記
本稿において、 Debian noroot 環境を導入した Android OS 端末に接続された物理キーボードのキー配列の設定についての記述を追記し、本稿を改稿致しました。どうか御了承下さい。
2018/06/05 現在の追記
termux の開発コミュニティによる link2symlink 機能を実装した proot のバイナリ実行ファイルの安定版の更新に伴い、本稿を改稿致しました。どうか御了承下さい。
2018/06/08 現在の追記とお断り
Linuxbrew を自動的にインストールするための代替となるスクリプトの更新と、代替スクリプトの実行手法の変更に伴い、本稿を改稿致しました。どうか御了承下さい。
2018/07/30 現在の追記及びお断り
termux の開発コミュニティによる link2symlink 機能を実装した proot のバイナリ実行ファイルの安定版の更新に伴う修正と軽量なタイル型ウィンドウマネージャである ratpoison に関する記述の追記を行い、本稿を改稿致しました。どうか御了承下さい。
2018/09/22 現在の追記及びお断り
本稿において、以下の通り改稿を行いました。どうか御了承下さい。
- 擬似端末の問題の回避に関する設定を Debian 環境の更新の前に行うように変更しました。
- 設定ファイル
/etc/locale.gen
に関して、既に設定ファイル/etc/locale.gen
が存在する場合についての記述を追記しました。 -
$HOME/Desktop/Root-MLTerm.Desktop
の作成による root 権限で動作する MLTerm を起動させるためのアイコンに動作の不具合が発生したため、当該記述を削除しました。
2018/10/11 現在の追記とお断り
Linuxbrew を自動的にインストールするための代替となるスクリプトの実行の際に、 Linuxbrew が使用する ruby 処理系をソースコードからコンパイルする際に必要となるパッケージについて訂正を行いました。どうか御了承下さい。
2018/10/20 現在の追記とお断り
複数のアプリが共用する "内蔵外部ストレージ領域" を Debian noroot アプリから使用する場合に、Debian noroot アプリに「ストレージにアクセスする権限」を与える手順について、詳細な手法を追記しました。
2018/11/02 現在の追記とお断り
"擬似端末の問題の回避" の項において、動的ライブラリ ./libandroid-pty.so.arm
のファイル名に誤りがありました。御詫びして訂正致します。
また、本件の誤りについて御指摘を頂いた @kago3 氏に心より感謝致します。
2019/01/12 現在の追記とお断り
"Termux 開発コミュニティによる libandroid-shmem.so を Debian noroot 環境に導入する" を参考にして、 Termux 開発コミュニティによる libandroid-shmem.so
を導入する手法について追記を行い、本稿を改稿しました。どうか御了承下さい。