Android 9.0 と Bluetooth Keyboard による日本語入力

Termux や SSH Terminal では外付けの Bluetooth Keyboard を使うと快適なのですが、Android 上の日本語入力はなかなか思い通りにならないことがあります。OS Version や端末、キーボードソフトウエアによってキー操作や挙動が異なっています。また Terminal 上で On/Off できるかどうかもソフトによって差があります。

例えば Android 9.0 Pie では下記の操作が有効になっています。

(1) [Win] + [SPACE] キーボードの切り替え (Gboard←→ATOK 等)
(2) [SHIFT] + [SPACE] 他 Gboard/Google 日本語入力の 日本語 On/Off
(3) [Ctrl] + [SPACE] 物理キーボードレイアウトの切り替え (QWERTY←→Dvorak等)

(1) キーボード切り替え (Win + SPACE)

複数のキーボードソフトを入れているとそれらを順番に切り替えます。例えば Google 日本語入力 と ATOK を両方有効にしているなら [Win] + [SPACE] で交互に切り替わります。

(2) 日本語入力切り替え

日本語入力切り替え操作はキーボードソフトウエアによって異なります。

ハードウエアキーボード利用時の日本語入力切り替えキーまとめ

Keyboard Software [半全]以外の On/Off キー [半全] ALT+[半全] Term
Gboard (+日本語) [SHIFT] + [SPACE] Y
Google 日本語入力 [SHIFT] + [SPACE] Y
ATOK for Android [ALT] + [SPACE] / [変換] Y Y Y
FSKAREN for Android 無し Y Y
Wnn Keyboard Lab [SHIFT] + [SPACE] Y Y

[半全] = [半角/全角] キーで切り替えられるかどうか
ALT+[半全] = [ALT] + [半角/全角] キーで切り替えられるかどうか
Term = Termux/ConnectBot 上で日本語 On/Off できるかどうか (変換中文字表示なし)

ATOK は複数の操作ができますがどれも同じ機能です。ATOK は [変換] キーが使えます。FSKAREN / Wnn は英数時に直接入力と変換入力切り替えの使い分けができます。ただし FSKAREN と Wnn は操作が逆でした。

Keyboard Software On/Off (直接入力) 英数/日本語 (変換入力)
Gboard (+日本語) [SHIFT]+[SPACE] / [半全]
Google 日本語入力 [SHIFT]+[SPACE] / [半全]
ATOK for Android [ALT]+[SPACE] / [半全] / [ALT]+[半全] / [変換]
FSKAREN for Android [ALT]+[半全] [半全]
Wnn Keyboard Lab [半全] [SHIFT]+[SPACE] / [ALT]+[半全]

(3) 物理キーボードレイアウト切り替え (Ctrl + SPACE)

これは Android 9.0 から追加された操作で Android 8.1 以前にはありません。以降は Essential Phone、Android 9.0 での画面です。

Bluetooth または USB Keyboard をつないだ状態で設定を開きます。「システム」→「言語と入力」→「物理キーボード」を開くとキーボードの名前が表示されているので選択

AndroidKeyboard

「キーボードレイアウトの選択」画面がでます。

AndroidKeyboard

右下の「キーボードレイアウトの選択」を選ぶと複数のレイアウトを選択できます。

AndroidKeyboard

複数のレイアウトにチェックをれて戻ると下記の通り。この画面でようやく Ctrl+スペース の操作が割り当てられていることがわかります。

AndroidKeyboard

おそらく QWERTY と Dvorak のように、キーボードレイアウト自体をいつでも切り替えられるように設けられた機能だと思われます。

ただし弊害があります。この機能が原因で Android 9.0 では Terminal アプリケーションで [Ctrl] + [SPACE] の操作ができなくなっているのだと思われます。例えば Termux や SSH Terminal 、UserLAnd や VNC 上で [Ctrl] + [SPACE] を使おうとしても、入力できずにレイアウトが切り替わってしまいます。

[Ctrl]+[SPACE] で日本語切り替えしたい場合や、Emacs のマーク操作で困ります。Android 8.1 以前は問題なく [Ctrl]+[SPACE] が使えました。

● Termux で日本語入力を行う

Termux 上で Android 上の日本語変換を使う場合は、切り替え操作が思うようにできないだけでなく変換途中の文字列が表示されない問題もあります。なので、いっそ Android 側の日本語入力機能を諦めてしまうのも一つの手です。

UserLAnd のおかげで Android 内に簡単に Linux Distribution をインストールできるようになりました。つまり UserLAnd を GUI&日本語入力対応の SSH Terminal として利用します。

Termux 上で予め sshd を立ち上げてから UserLAnd 上で ssh localhost -p 8022 で接続します。これで Termux 上で uim-mozc や fcitx-mozc を使った日本語入力↓ができます。

UserLAnd_Termux

ただし Android 9.0 の場合は Ctrl+SPACE が使えない問題は相変わらず残ります。

UserLAnd 使うなら、そもそも Termux は必要ないのではないかと思うかもしれませんが、詳しくは次回に続きます。
続き: Android Termux で日本語入力を行う / UserLAnd との併用

関連ページ
Android の上の開発環境: UserLAnd
Android の上の開発環境: Termux

関連エントリ
Android で動く Linux 環境 UserLAnd が XServer XSDL に対応
Oculus Go を文章書き&開発マシンにする
UserLAnd とブラウザ
Android 上の開発環境と UserLAnd
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd

Snapdragon 835 と 845 のコンパイル時間の比較&浮動小数点演算能力

Snapdragon 835 (MSM8998) のデータを追加しました。コンパイル時間と VFP Benchmark の結果を載せています。ついでに Oculus Go でもコンパイル時間を調べてみました。(前回1) (前回2)

●コンパイル時間の比較 (Termux+clang)

Smartphone SoC RAM Thread Time 速度比
Pixel 3 Snapdragon 845 4GB 8/8 32 4.2x
Essential Phone Snapdragon 835 4GB 8/8 38 3.6x
Galaxy S6 Edge Exynos 7420 3GB 8/8 77 1.8x
ZenFone AR Snapdragon 821 8GB 4/4 111 1.2x
Nexus 5X Snapdragon 808 2GB 6/6 135 1.0x
Oculus Go Snapdragon 821 3GB 4/4 275 0.5x

・Time (秒) が小さい方が高速。

●浮動小数点演算能力ピーク値 (VFPBenchmark)

Smartphone SoC RAM Thread big/L GFLOPS
Pixel 3 Snapdragon 845 4GB 8/8 84/55 139.3
Essential Phone Snapdragon 835 4GB 8/8 75/59 134.5
Galaxy S6 Edge Exynos 7420 3GB 8/8 56/47 102.6
Nexus 5X Snapdragon 808 2GB 6/6 29/45 74.0
ZenFone AR Snapdragon 821 8GB 4/4 37/25 62.7

・GFLOPS が大きい方が高速。

演算ユニットの数が同じなので浮動小数点演算ピーク値はクロック数に比例した結果となっています。特に Total 値では 835 と 845 の差が少なくほぼ同じくらいの数値です。

それと比べるとコンパイル時間の方には若干差が付きました。CPU 自体も 2 命令 decode の Out-of-order から 3 命令 decode Out-of-order に増えていますので、Snapdragon 845 は big core のクロック差だけでなく IPC も向上しています。ベースとなった CPU core は ARM によると 20% 以上速いとのこと。UserLAnd + Termux を使っていても VNC 経由なのに十分満足できるもので、過去に使った Nexus 7 (2012) や Nexus 5 の Linux とは別物です。

Oculus Go で動く UserLAnd や Termux はどこでも大画面で作業場が作れるので魅力的なのですが、ビルドは残念ながら低速です。同じ Snapdragon 821 の Zenfone AR と比べても 2.5 倍時間がかかりました。使用したのは Oculus TV + Termux です。VR 空間の描画にパフォーマンスが取られているのだと思われます。VR 描画は両眼分必要で、また処理落ちは酔いにつながるため VR 描画が優先されます。

●スマートフォン以外のデバイスを含めたコンパイル時間の比較

他のデバイスとの比較表も更新しました。835 も十分速いです。ただし条件が一定ではないので参考程度にお願いします。特に Windows 10 PC は仮想環境を使っています。

Device SoC/CPU RAM Thread Time
Desktop W10+VMware Ryzen 7 1800X 16GB 16/8 24
Desktop W10+WSL Ryzen 7 1800X 32GB 16/8 26
Desktop W10+VMware Core i7-6700K 16GB 8/4 29
Pixel 3 Snapdragon 845 4GB 8/8 32
Desktop W10+VMware Core i7-4790K 8GB 8/4 35
Essential Phone Snapdragon 835 4GB 8/8 38
Desktop W10+VMware Core i7-4770 8GB 8/4 39
MacMini 2012 Core i7-3615QM 16GB 8/4 43
Galaxy S6 Edge Exynos 7420 3GB 8/8 77
Desktop Linux A10-7870K 8GB 4/2 82
Chromebook C101PA RK3399 4GB 6/6 87
MacBook Pro 2013 Core i5-3210M 8GB 4/2 97
Desktop Linux Celeron J1900 8GB 4/4 108
ZenFone AR Snapdragon 821 8GB 4/4 111
Nexus 5X Snapdragon 808 2GB 6/6 135
Tegra Note 7 Tegra 4 1GB 4/4 148
Note W10+WSL Atom x7-Z8700 4GB 4/4 200
Chromebook C720 Celeron 2955U 4GB 2/2 222
Nexus 9 Tegra K1 2GB 2/2 272
Nexus 7 2013 Snapdragon S4 Pro 2GB 4/4 275
Oculus Go Snapdragon 821 3GB 4/4 275
MeMO Pad 7 ME176C Atom Z3745 1GB 4/4 312

・Time (秒) が小さい方が高速。

関連ページ
VFP Benchmark Log 計測結果まとめ

関連エントリ
Snapdragon 845 の浮動小数点演算速度
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
ARM CPU 上の開発環境とコンパイル時間の比較
AMD CPU Ryzen とコンパイル時間の比較 (2)
AMD CPU Ryzen とコンパイル時間の比較
ARM CPU の浮動小数点演算能力まとめ
HTC 10 Snapdragon 820 Kyro の浮動小数点演算能力
iPhone SE, Apple A9 の浮動小数点演算速度
Raspberry Pi 3 の速度比較, Cortex-A53 の速度
ARM Cortex-A53 の浮動小数点演算速度とコンパイル時間の比較
2955U vs N3150/J1900/Athlon5350 (コンパイル時間の比較)
iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
Raspberry Pi 2 で速くなったコンパイル時間の比較
iPad Air 2 (Apple A8X) の浮動小数点演算能力
BayTrail vs Kabini (Celeron J1900 vs Athlon 5350)
コンパイル時間の比較 BayTrail
Atom vs Core i7

Android/Oculus Go/Daydream の画面をミラーリングするツールを作ってみた

HTC Vive や Oculus Rift など、PC 向け VR HMD ではモニタ画面にもゲームの映像が出ます。周囲からも VR 内部がどんな状態なのかある程度は見えるようになっています。モバイルやスタンドアロンタイプの VR HMD だと本人にしかわからないので、デモなど人に見せたい場合は何らかの手段が必要です。

Android に標準で用意されている Chromecast や Miracast を使うのが簡単です。Oculus Go の場合もシェアボタンからリンクされているスマートフォンや Chromecast に出力できるようです。

下記は Daydream を Miracast で出力したものです。モニタ直撮り。使用した Miracast アダプタは Microsft Wireless Display Adapter

Miracast

また Windows 10 には Miracast 機能があるので、アダプタがなくても Wi-Fi があれば直接 PC に表示することができます。

(1) 設定→システム→この PC へプロジェクション

 「セキュリティで保護されたネットワーク上のどこでも利用可能」

(2) スタートメニューから「接続」というアプリを起動。

この状態で HDMI の Miracast アダプタと同じように繋がります。なおこの PC は Wi-Fi を内蔵していますが LAN には有線接続しました。(Wi-Fi は Miracast 専用)

↓実際に ZenFone AR + Daydream でつないだところ。(Pixel 3 は Miracast 非対応でした)

Windows10 Miracast

他にもアプリを使う方法があります。様々なサイトで Vysor というソフトが紹介されていました。このソフトは画面のミラーリングだけでなく PC から操作もできるようです。

ただし接続に adb を使っており開発者モードを有効にする必要があります。ワイヤレス接続も adb の tcp 接続を使っているようです。

VR では PC からの操作は不要なのと、adb を使うなら python で作れそうな気がしたので作ってみました。

GitHub: android_mirrortool

下記は android_mirrortool を使って Oculus Go を Windows PC にミラーリングしたところです。

android_mirrortool

Android には画面を録画する機能があります。それを adb 経由でストリーミングしているだけです。python の opencv を使っています。音は出ません。Windows と Linux で動きます。

● Windows の場合

(1) Android SDK を install し adb.exe にパスを張っておく

  AndroidStudio をそのまま install した場合はこの辺です。
  C:/Users/<USERNAME>/AppData/Local/Android/sdk/platform-tools

(2) python 3.x を install

(3) パッケージ pywin32 と opencv-python を install する

pip をを使ってインストールする場合

pip3 install pywin32
pip3 install opencv-python

●使い方

(1) 開発者モードにして adb でつないでおきます。

(2) 「 python android_mirror.py 」を実行します。

画面に動きがないと Mirror Window が表示されないので最初はいろいろ操作して画面を動かしてみてください。終了は ESC キーです。

デフォルトで Full HD になります。VR が処理落ちする場合、または Wi-Fi で adb 接続する場合はレートやサイズを落としてください。

python android_mirror.py --bitrate 4m --size 1280x720

●Linux の場合

下記の操作は Debian 系

$ sudo apt install python3 python3-pip
$ pip3 install opencv-python
$ sudo apt install adb

開発者モードにして adb でつながったら

$ python3 android_mirror.py

●スクリーンキャプチャ

-c をつけるとスクリーンキャプチャになります。png で保存します。

python android_mirror.py -c

関連エントリ
Oculus Go で一般 Android アプリを起動できるランチャーを作ってみた
Oculus Go を文章書き&開発マシンにする
Gear VR のヘッドセットの種類のまとめ
Oculus Go は VR ができる新しい携帯ゲーム機

Android で動く Linux 環境 UserLAnd が XServer XSDL に対応

root 無しで簡単に Linux を起動できる UserLAndXSDL (X11 Server) との連携に対応しました。SSH, VNC 同様メニューから選べるようになったので試してみました。スマートフォンは ZenFone AR (ZS571KL) Android 7.0 を使っています。

Google Play ストアから UserLAnd をインストール。起動すると Linux Distribution を選択できます。今回の手順は Debian を選択しています。

UserLAnd

Distribution を選択すると共有ストレージへのパーミッションを求めてきますが、これは /sdcard をマウントするため。

ユーザー名とパスワードの設定をします。

UserLAnd

新しく XSDL が選択できるようになっています。

UserLAnd

XServer XSDL をインストールしていない場合はここで Play Store に飛びます。先にインストールしておいた方が良いかもしれません。Bluetooth Keyboard と Bluetooth Mouse も先にペアリングしておくことをお勧めします。

インストールしたらもう一度 UserLAnd から Debian を選択。XSDL が起動し、一瞬切り替わったあと↓この画面で止まったように見えますがそのまま待ってください。

XSDL

暫く待つと起動が終わり、左上に小さいターミナルウィンドウが出ます。止まったように見えたのは背景画像が残ってしまっているため。

XSDL

xterm のウィンドウが小さいのは Native 解像度 (上の例は 2560×1440) で起動しているからです。

● XSDL の解像度変更方法

解像度の変更は XSDL 起動時の下記の画面で、カウントダウン中に画面をタップします。

null

↓選択画面になるので 1280×720 あたりを選択。

null

↓次にフォントスケールの選択。潰れて読めないけど X0.7~X0.4 あたりを選択。いろいろ試して見やすいように調整してください。

null

↓ウィンドウが大きくなりました。

null

● lxde を使う方法

UserLAnd から起動すると twm + xterm の最小限で立ち上がります。Desktop を使うには Script の書き換えが必要でした。

Desktop lxde の install 手順

一旦 SSH でログインしておきます。(Distribution 名長押し→ App Stop → App Info)

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install lxde

下記のファイルを編集します。

/support/startXSDLServer.sh

元の内容

#! /bin/bash

if [[ -z "${DISPLAY}" ]]; then
  DISPLAY=:4721
fi

if [[ -z "${PULSE_SERVER}" ]]; then
  PULSE_SERVER=localhost:4721
fi

if [[ -z "${INITIAL_USERNAME}" ]]; then
  INITIAL_USERNAME="user"
fi

until env DISPLAY=:4721 ; do sleep 1 ; done

nohup twm & echo $! > /tmp/xsdl.pidfile

while [ ! -f /tmp/xsdl.pidfile ]
do
  sleep 1
done

su $INITIAL_USERNAME -c 'xterm -geometry 80x24+0+0 -e /bin/bash --login &'

下記のように書き換える

#! /bin/bash

if [[ -z "${DISPLAY}" ]]; then
  DISPLAY=:4721
fi

if [[ -z "${PULSE_SERVER}" ]]; then
  PULSE_SERVER=localhost:4721
fi

if [[ -z "${INITIAL_USERNAME}" ]]; then
  INITIAL_USERNAME="user"
fi

until env DISPLAY=:4721 ; do sleep 1 ; done

# ここから下を改変
sleep 20

su $INITIAL_USERNAME -c 'startlxde &'
su $INITIAL_USERNAME -c 'xterm -geometry 80x24+0+0 -e /bin/bash --login &'

sleep の部分は適当に調節してください。これで XSDL に切り替えて起動すると、しばらく待ったあとに青い画面から下記のような desktop 画面になります。起動は気長に待ってください。

null

日本語化等の情報はこちらを参照してください。

Hyperでんち: UserLAnd

●いくつかの問題点

・XSDL が Android 9 で動かない。
・lxde 起動には script 書き換えが必要
・Android で物理キーボードのレイアウトに日本語配列を選択していると一部のキーが入力できない

Android 9 Pie では XSDL が restart を繰り返してしまい起動しないので、UserLAnd 上でも選択できないようになっています。

関連ページ
Android の上の開発環境: UserLAnd

関連エントリ
Oculus Go を文章書き&開発マシンにする
UserLAnd とブラウザ
Android 上の開発環境と UserLAnd
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd

Oculus Go で一般 Android アプリを起動できるランチャーを作ってみた

前回 Oculus Go で UserLAnd を呼び出せるアプリを作ったのですが、せっかくなので何でも呼び出せるように普通のランチャーアプリも作ってみました。Oculus Go 上で様々な Android アプリが動きます。

TVLauncherGo TVLauncherGo

任意の Android アプリを apk で直接 Install するだけで↑のようにランチャー画面にアイコンが並びます。

もちろん前回の TVWrapperUL 同様 UserLAnd や VNC Viewer、Android 設定画面も呼び出せます。(前回の記事はこちら「Oculus Go を文章書き&開発マシンにする」)

↓Firefox

Firefox

↓AnyDesk で Windows 10 にログインしてさらに VMWare で Ubuntu

AnyDesk

↓Kindle も動きましたがテキストタイプの書籍はフォントサイズが大きすぎます。ページを画像データとして持つ雑誌や漫画のような本は大丈夫そう。サイズ調節が難点。

Kindle

Amazon App Store が動きました。ただし事前に提供元不明アプリのインストールを許可しておく必要があります。(詳細はあとで)

Amazon App Store

●TVLauncherGo Install 方法

Oculus TV 上で動くランチャーです。下記からダウンロードした TVLauncherGo の apk を install してください。Oculus TV の中から起動します。

GitHub: TVLauncherGo1.0.apk

例えば adb を使って install するなら

1. Oculus Go を Developer Mode にする
2. Android SDK を install する (adb.exe にパスを通しておく)
3. PC と USB で接続する (必要なら adb ドライバを入れる)
4. adb install で apk をインストールする

adb install TVLauncherGo1.0.apk

TVLauncherGo が入れば、あとは設定画面や内蔵ファイラーが呼び出せるので Oculus Go 本体でアプリインストールもできるようになります。

●使い方

1. Oculus ストアから “Oculus TV” をインストールしておく
2. Oculus TV を起動
3. 画面の下の方にある “TVLauncherGo” を起動する (↓の赤枠)

TVLauncherGo

起動するとインストールされている一般 Android アプリのアイコンが並ぶのでクリックで起動できます。アイコン長押しでアプリの詳細画面に飛ぶのでアンインストールもできます。

●注意点

事前に Bluetooth Keyboard をペアリングしておくことをお勧めします。ペアリングは Oculus TV → TVLauncherGo → 設定 → Bluetooth から行ってください。

TVLauncherGo 経由ではなく、アプリが直接他のアプリを呼び出してしまう場合があります。VR 空間ではなく 2D でアプリやダイアログが表示されると Controller では操作できなくなるので注意が必要です。Keyboard があれば [ESC] や [Enter] キーで脱出できるかもしれません。

●一般の Android Apk をインストールする方法

さまざまな方法が使えます。

・adb で PC 経由で install
・Dropbox などオンラインストレージ経由で転送して、内蔵ファイラーでインストール
・Amazon などストアアプリ経由のインストール

など。

ブラウザで直接ダウンロードできる場合もありますが apk のインストールに関しては自己責任でお願いします。

●adb を使った PC 経由の install

Oculus Go が adb でつながっているなら PC から install するのが簡単です。TVLauncherGo.apk と同じように

adb install  アプリ.apk

でできます。

●オンラインストレージ経由での apk 転送

Dropbox のようなオンラインストレージを経由して apk ファイルを転送することもできます。Dropbox 上で apk を直接開かないようにしてください。ダイアログが 2D 描画されてしまい操作できなくなります。

メニューからエクスポートを使って一旦ローカルストレージに保存します。その後内蔵ファイラーを使ってインストールしてください。

●内蔵ファイラーを使ったインストール方法

Oculus Go 上に転送した apk をインストールするには下記の手順に従ってください。

1. インストールを許可

 Oculus TV → TVLauncherGo → 設定 → セキュリティ → 提供元不明アプリのインストールを許可する

2. 内蔵ファイラーを起動する

 Oculus TV → TVLauncherGo → 設定 → ストレージ → 外部メディア

3. apk のインストール

 ファイラーが起動したら、本体ストレージ(Pacific) を選択します。例えば Download フォルダにあるなら Pacific → Download を開きます。apk file をクリックすると install できます。

●ストアアプリ経由のインストール

Amazon App Store を使ったインストールもできます。ただしいくつか注意が必要です。

インストール許可の設定画面が 2D 描画になるので、必ず先に「TVLauncherGo → 設定 → セキュリティ → 提供元不明アプリのインストールを許可する」で許可しておいてください。

Amazon App Store の「インストールしますか」のダイアログが左右の目で矛盾した描画になりますが操作はできます。片目で操作してください。

インストールしたアプリはストアから直接開かないで、一旦戻って TVLauncherGo から起動してください。

●apk ファイルを入手するには

手持ちの Android スマートフォンから install してある apk file を取り出すことができます。apk を取り出す script を作ってみました。

GitHub: apk_get.py

1. PC に Python 3.x を install しておきます。
2. スマートフォンを Developer Mode にして PC と adb と接続します。
3. python apk_get.py を実行します。

python apk_get.py

これでインストールされているアプリの apk file をすべて取り出すことができます。

●VR 空間での起動と Oculus TV での起動の違いについて

VR 空間で直接 Android アプリを起動してしまうと問題が生じることがあります。一度起動して Activity が残っていると、以後 Oculus TV から呼び出しても VR 空間のままになる場合があるので注意が必要です。

(1) 例えば設定画面の場合、↓が VR 空間に直接描画されている状態です。少々わかりにくいですが周囲が真っ暗で部屋がありません。

VR Space

↑この状態だと一部のダイアログで操作できなくなる場合があります。例えば Bluetooth のペアリング削除画面ではまります。また一部の画面で固まったり落ちたりします。アプリ一覧画面、レイアウト変更画面など。

(2) Oculus Go 起動直後に Oculus TV → TVLauncherGo → 設定 で呼び出すと ↓ のようになります。部屋の中にウィンドウが配置されています。

Oculus TV Space

↑こちらは普通の Android と同じ操作が可能でダイアログも問題が出ません。物理キーボードのレイアウト変更もできました。↓

Layout

もし (1) の状態なってしまった場合は、Activity を完全に終了させるために一旦 Oculus Go を再起動することをお勧めします。電源ボタンの長押しでできます。

また前回の記事で書いたような adb コマンドを使った設定画面呼び出しは確実に (1) の状態になるので注意してください。adb を使った起動はしないで Oculus TV (TVLauncherGo) 経由で設定を呼び出すことを強くお勧めします。

外部のアプリを呼び出すアプリにも注意が必要です。Dropbox や Amazon App Store など、外部アプリや設定画面が呼ばれると Oculus TV を経由せずに直接 VR 空間や 2D 描画されてしまう場合があります。

再起動しても画面が真っ暗で操作できなくなったら、近接センサーが中途半端な状態になっている場合があります。Oculus Go の HMD 内部、中央上部の近接センサーに触れてみてください。

関連エントリ
Oculus Go を文章書き&開発マシンにする
Gear VR のヘッドセットの種類のまとめ
Oculus Go は VR ができる新しい携帯ゲーム機