AndroidスマホをPCみたいに使いたいメモ１

# はじめに
※ PixelにはLinuxターミナルが追加され、Dockerも使用できます。本記事の手法は必要ありません。

### やりたいこと
- スマホPCのように使うため、Linux環境を作成したい
- すべてローカルで動かしたい
- Dockerを使用したい

→ proot-distroのUbuntuでデスクトップ環境作成、QEMUでDocker起動
### 使いたいソフト
- VS Code
- Docker (ここが一番の問題)
- ブラウザ
- Wordみたいなもの
- AviUtl (おまけ。Windows用ソフトも動けばハッピー）

※ 自分の勉強も兼ねて、Linux初心者向けに書いています。もし間違い等がございましたら、ご指摘いただけますと幸いです。


# 0. 使用するアプリのインストール
ターミナルエミュレータのTermuxを使用します。
Termuxのページ  からapkをダウンロードしてアプリをインストールします。

https://f-droid.org/ja/packages/com.termux/

<details><summary>インストール方法</summary>
Termuxページ下部、任意のバージョンのapkファイルをダウンロードします（F-DROIDは必要ありません）。

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3224976/fe4b6943-a256-47e9-9796-75a7f138707c.png)


ファイルアプリからダウンロードしたapkファイルをタップし、インストールを押します。
"安全でないアプリ"と出るので、"詳細" → "インストールする"を押してインストールします。
![02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3224976/fda8e694-d3b8-40d0-8a94-e06a32b83bbf.jpeg)

</details>
<br>
次に、GUI（デスクトップとかの画面）を表示するためのTermux:x11アプリをインストールします。

https://github.com/termux/termux-x11/releases

リリースページから、app-XXX-debug.apkをダウンロードします。
XXXは自分のCPUのアーキテクチャのものを選択します。わからない場合はuniversalをインストールします。

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3224976/35d91419-b79c-47a3-8552-b620972ba91a.png)

ダウンロードしたapkを上のtermuxと同じ方法でインストールします。

# 1. Termuxの初期設定
内部ストレージへのアクセス権限を許可します（内部ストレージを使わない場合は不要です）。
```
termux-setup-storage
```
必要なパッケージをインストールします。
```
pkg update
pkg upgrade -y
pkg install -y termux-services vim openssh
```

<details><summary>コマンドの説明</summary><div>

- `pkg update` パッケージ（プログラム）のリストを更新
- `pkg upgrade` パッケージを更新（`-y`：yesオプション、更新に同意）
- `pkg install パッケージ名` パッケージをインストール
- `termux-services` サービスを管理する
- `vim` ファイルを編集するテキストエディタ
- `openssh` SSH接続する
</div></details>

root（管理者）のパスワードを設定します（SSH接続するときなどに必要です）。
`passwd`を実行するとパスワード入力を求められます。文字が表示されませんが入力できています。

```
passwd
```
SSH接続できるように~/.bashrcに以下を追記します。

```rubby:~/.bashrc
if ! pgrep -x "sshd" > /dev/null; then
    sshd
fi
```

<details><summary>ファイル編集の方法</summary>
<div>

vimというテキストエディタを例に説明します。まず、下記のコマンドで.bashrcファイルの編集画面を開きます。
`~/`はファイルの場所、ユーザーのホームディレクトリ（フォルダ）を示しています。

```
vim ~/.bashrc
```
キーボードのiを押すと文字が入力できるようになります（INSERT: 挿入モード）。
その状態で下記の内容を入力します。
```rubby:~/.bashrc
if ! pgrep -x "sshd" > /dev/null; then
    sshd
fi
```
キーボードのESCキーを押して挿入モードを終了します。
その状態で、`:wq`を入力した後Enterを押すことで保存して終了します。
- `:` これからvimのコマンドを入力するよって合図
- `w` 保存コマンド
- `q` 終了コマンド
<br>
</div>
</details>

termux-servicesを起動しなおすため、exitコマンドで一度アプリを終了します（タスクキルしただけでは終了しないので注意）。
```
exit
```

# 2. GUIの設定
必要なパッケージをインストールします。
```
pkg install x11-repo
pkg install termux-x11-nightly
```

<details><summary>コマンドの説明</summary><div>

- `x11-repo` X11をインストールできるようにする
- `termux-x11-nightly` GUIを表示する
<br>
</div></details>

X11が自動的に起動するよう設定します。
まずtermux-x11サービス用ディレクトリを作成します。
```
mkdir -p $SVDIR/termux-x11/log
```

<details><summary>コマンドの説明</summary><div>

- `mkdir` ディレクトリを作成する（`-p`：複数階層のディレクトリを作成する）
<br>
</div></details>


自動起動スクリプト$SVDIR/termux-x11/runを作成します。
```rubby:$SVDIR/termux-x11/run
#!/data/data/com.termux/files/usr/bin/sh
exec termux-x11 2>&1
```

<details><summary>スクリプトの説明</summary><div>

このスクリプトが実行されるとtermux-x11が起動する。
- スクリプト：コマンドを書いてまとめて実行できるようにしたもの
- `#!` ：シェバン。1行目に記述する。スクリプトを何で実行するかを記述する
- `exec`：現在のプロセスでコマンドを実行する
<br>
</div></details>


ログ用スクリプト$SVDIR/termux-x11/log/runを作成します。
```rubby:$SVDIR/termux-x11/log/run
#!/data/data/com.termux/files/usr/bin/sh
svlogger="/data/data/com.termux/files/usr/share/termux-services/svlogger"
exec "${svlogger}" "$@"
```

<details><summary>コマンドの説明</summary><div>

ログファイルを作成する。
- `OOO=XXX`：XXXをOOOという名前（変数）で呼ぶね、という意味
- `${OOO}`：変数を呼ぶ
- `$@`：すべての引数
- 引数：コマンドを実行するときのオプションやデータのこと
<br>
</div></details>


上2つのファイルに実行権限を付与し、自動起動の設定します。
```
chmod u+x $SVDIR/termux-x11/run
chmod u+x $SVDIR/termux-x11/log/run
sv-enable termux-x11
```

<details><summary>コマンドの説明</summary><div>

先ほど作成したスクリプトを実行できるよう、権限を変更し、自動起動するように設定する。
`chmod`：ファイルの権限を変更するコマンド（`u+x`：ユーザー(u)に実行権限(x)を付与する）
`sv-enable`：サービスを有効にする（今回は先ほど作成したtermux-x11サービスを有効にする）
<br>
</div></details>

サービスを起動するため、exitコマンドで一度アプリを終了し、タスクキルをします。
```
exit
```
再度termuxアプリを起動するとtermux-x11が自動で実行されます。
termuxアプリを起動したままX11アプリを開き、下のような真っ黒な画面と×印カーソルが表示されればX11の自動起動は成功です。

![08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3224976/677b5168-4de4-402b-b763-b57dc192b1e6.jpeg)

<details><summary>うまくいかない場合</summary><div>

![09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3224976/87a157c5-438c-42c9-97c6-2d90c654a8ff.jpeg)
この画面が表示されている場合、termux-x11の起動ができていません。
termuxを開き、`termux-x11`と入力し、その状態のままX11アプリを開いてください。
- 真っ黒な画面になり、カーソルが表示されている場合
自動起動設定が間違っている可能性があります。もう一度起動スクリプトの作成からやり直してください。

- カーソルが表示されない場合
termux-x11のインストールがうまくいっていない可能性があります。
```
pkg install x11-repo
pkg install termux-x11-nightly
```
からやり直してください。

</div></details>


# 3. Ubuntuの設定
TermuxだけではできないことがあるのでUbuntuをインストールします。
```
pkg install proot-distro
proot-distro install ubuntu
proot-distro login ubuntu
```

<details><summary>コマンドの説明</summary><div>

- `proot-distro` Linuxの仮想環境
- `proot-distro install ubuntu` Ubuntuをインストールする
- `proot-distro login ubuntu` Ubuntuにログインする
<br>
</div></details>


`proot-distro login ubuntu`を実行すると、ubuntuにログインできます。
このままだとrootなので、一般ユーザーを作成します。
Ubuntuにログインした状態で下のコマンドを実行します（"ユーザー名"のところは好きな名前を英語で入力してください）。
```
apt-get update
apt-get upgrade -y
apt-get install -y sudo
useradd -m ユーザー名
passwd ユーザー名
usermod -aG sudo ユーザー名
echo "ユーザー名 ALL=(ALL:ALL) ALL" >> /etc/sudoers
exit
```
最後の`exit`をするとUbuntuからログアウトし、termuxに戻ります。
<details><summary>コマンドの説明</summary><div>

- `apt-get update` パッケージのリストを更新する
- `apt-get upgrade` 更新できるパッケージを更新する（`-y`：yesオプション、更新に同意）
- `apt-get install` パッケージをインストールする。今回はsudoをインストール
- `sudo` パッケージをインストールする際など、権限が必要なときに使うコマンド
- `useradd` ユーザーを追加する（`-m`：ユーザーのディレクトリを作成）
- `passwd ユーザー名` ユーザーのパスワードを設定する
- `usermod -aG sudo ユーザー名` ユーザーをグループに追加する（sudoグループはsudoコマンドを使えるグループ）
- `echo "ユーザー名 ALL=(ALL:ALL) ALL" >> /etc/sudoers` sudoを使えるように設定を追記 
</div></details>


# 4. UbuntuのGUIの設定
先ほど作成したユーザーでUbuntuにログインします。
```
proot-distro login --isolated --shared-tmp --user ユーザー名 ubuntu
```
<details><summary>コマンドの説明</summary><div>

`--isolated` termuxのディレクトリをマウントしない（ubuntuからtermuxのディレクトリにアクセスしないように設定。被るコマンド等で困ることがあるため）
`--shared-tmp` termuxの一時ディレクトリを共有する（termuxで起動したX11に接続するため）
<br>
</div></details>

GUIで使用するパッケージをインストールします。
```
sudo apt install -y dbus-x11 openbox xterm tint2
```

<details><summary>コマンドの説明</summary><div>

- `dbus-x11`：X11でアプリケーション間のやりとりをする
- `openbox`：アプリケーションのウインドウを表示する
- `xterm`：コマンドを実行するターミナル
- `tint2`：タスクバー
<br>
</div></details>

X11に接続し、画面を表示します。
```
DISPLAY=:0 dbus-launch --exit-with-session openbox-session
```
一度ホームに戻り、X11アプリを開きます。うまくいっていれば真っ黒な画面にマウスカーソルが表示されているはずです。


### 動作確認
二本指でタップするとopenboxのメニューが表示されます。
メニューから"Terminal emulator"を選択します。

![04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3224976/8f15831b-e6ac-48aa-a943-0136ea93b93e.jpeg)

ターミナルが開くので、`tint2`コマンドを実行します。
スマホのキーボードを使用する場合、戻るボタンを押すとキーボードが表示されます。
![05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3224976/e7759933-466c-4217-89de-8fdc15d3ba7a.jpeg)
実行すると画面下部にタスクバーが現れます。
![06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3224976/1418dd6f-301c-470c-a888-59cdee461423.jpeg)
GUIを終了するときはメニューから"Exit"を選択し、ダイアログの"Exit"を押します。
![07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3224976/5504acfa-09db-4be2-9d1f-13135508d6cb.jpeg)

## 次回
キーボード、音声などの設定を行います。