Meta Quest 3 に termux でスタンドアロン Linux 環境を作る方法
元ネタ
- https://gist.github.com/kazuho/2432b0dce057b34488de4e5e7b356cad
- https://gist.github.com/legokichi/8c2e9219ede0a5cc207f3e42d8ee5b42
概要
- meta quest 3 本体(ハンドトラッキングあるのでコントローラ不要)と lenovo thinkpad trackpoint keyboard ii (英字配列(※日本語配列は quest 3 が対応してないため非推奨)) を用意する
- meta quest 3 に termux と termux-api, termux-x11 を入れて xfce4 環境を作る
- termux 内の xfce4 に firefox やら tigervnc やらを入れる
するとこうなる
Quest 3内のlinux (termux)、GPUとサウンド効いて、FirefoxでYouTube見ながらvscodeで開発できるようになった。日本語入力できるしtailscale vpnもつながってる。
— Kazuho Oku (@kazuho) October 25, 2023
Quest 3とキーボードとコントローラだけもってけば、どこでも大画面で仕事できる。完璧ちゃう? pic.twitter.com/HVGqBG5mL4
仕事環境これ pic.twitter.com/EmqO26Os6O
— legokichi (@duxca) June 16, 2025
じつは proot というのを使うと下記のややこしいことをしなくてもいいが、実行時オーバーヘッドがかかるので、この記事では生 termux でデスクトップ環境を作る(下記参照)
セットアップ手順
meta quest 3 に f-droid を入れる
細かい説明は省くが、meta quest を開発者モードにして、
- 方法1. Windows から SideQuest を使ってインストールする
- 方法2. Oculus Browser で f-droid の apk をダウンロードして VR Android File Manager for Quest からインストールする
meta quest 3 に f-droid で termux と termux api を入れる
説明略
- termux api は音を聞こえるようにするために必要
meta quest 3 に termux-x11 を入れる
termux-x11 の最新の termux-x11.apk (arm64)をリリースからダウンロードして、
- 方法1. Windows から SideQuest でインストールする
- 方法2. Oculus Browser で termux-x11 の apk をダウンロードしてインストールする
Android の Phantom Process Killer を止める
- これを止めておかないと X 内でプロセスぱかぱか立ててる Termux が丸ごと死ぬ
- termux から adb を使うには sidequest とか入れればできる
- むろん termux からじゃなく windows に adb を入れて実行しても ok
$ pkg install android-tools
$ adb devices
$ adb shell "/system/bin/device_config set_sync_disabled_for_tests persistent"
$ adb shell "/system/bin/device_config put activity_manager max_phantom_processes 2147483647"
$ adb shell settings put global settings_enable_monitor_phantom_procs false
出典
- https://github.com/Termux-Monet/termux-monet?tab=readme-ov-file#phantom-process-killer
- https://github.com/atamshkai/Phantom-Process-Killer
termux のセットアップ
パッケージの更新と 必要なリポジトリの追加
$ termux-change-repo
$ pkg update
$ pkg upgrade
$ pkg install termux-tools x11-repo root-repo tur-repo termux-api
$ pkg update
$ pkg upgrade
termux-x11 のセットアップ
$ pkg install termux-x11-nightly xfce4
$ termux-x11 :1 -xstartup xfce4-session
ここで termux-x11 のアプリを開いたら xfce4 のデスクトップが表示されるはず
日本語入力 (fcitx5 + anthy) のセットアップ
- mozc は termux 上で bazel ビルド構築するのが死ぬほど面倒なので anthy にする。
まず fcitx5 入れる
$ pkg install fcitx5 fcitx5-configtool
↑だけで十分なはずだが、この先の工程が動かなかったら↓も入れる
$ pkg install fcitx5-gtk2 fcitx5-gtk3 fcitx5-gtk4 fcitx5-qt
次にanthy-unicode を git pull して anthy-unicode.termux.patch あててビルドする
$ pkg install git libtool wget autoconf build-essential make binutils-is-llvm
$ git clone https://github.com/fujiwarat/anthy-unicode.git
$ cd anthy-unicode
$ wget https://gist.githubusercontent.com/kazuho/453311b4fba9b4c987a7edc7fe0ae7e4/raw/e7a8bd967116acbb51fd8b38528c8c22dedb2857/anthy-unicode.termux.patch
$ git apply anthy-unicode.termux.patch
$ autoreconf --install
$ ./configure --prefix=$PREFIX && make && make install
fcitx5-anthy もビルドする。パッチは不要。
$ pkg install extra-cmake-modules gettext
$ git clone https://github.com/fcitx/fcitx5-anthy.git
$ cd fcitx5-anthy
$ cmake -DCMAKE_INSTALL_PREFIX=$PREFIX && make && make install
このまま fcitx5 を terminal から起動すると /anthy.dic がないというエラーが出るはず。
これは termux 環境の dir 構成が通常の linux と異なるため anthy-unicode.conf を違うところへ探しにいってるからなので symlink で対処
$ ln -s $PREFIX/etc/anthy-unicode.conf $PREFIX/share/anthy-unicode
$ ln -s $PREFIX/share/anthy-unicode $PREFIX/share/anthy
再度 fcitx5 を terminal から実行してうまくいくこと確認。
うまくいかないなら strace fcitx5 2>&1 | grep unicode.conf とかして、どこに何を探しにいってるか確認するとよい。
xfce4 起動時に dbus が必要なので xfce4 を起動するときに以下の設定が必要。
startx.sh とか名前をつけておくとよい
#!/bin/bash
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export INPUT_METHOD=fcitx
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus
dbus-run-session termux-x11 :1 -xstartup xfce4-session
xfce4 デスクトップ内の fctix 5 configuration アプリで IME に anthy を追加
変換候補が表示されなかったりするが、とりあえずこれで日本語入力はできる。
thinkpad keyboard の ctrl-space で変換できないとき
termux-x11 アプリのバージョンによっては一秒くらい押しっぱなしにしないと反応しないことがある
↓対策してみること。
ちなみに かな-カナ-カナ 切り替えは anthy では Ctrl + .
GPUアクセラレーション(VirGL)
virgl_test_server_android を有効にすると x11 サーバの描画が高速化されるらしい
pkg install virglrenderer-android
meta quest3のチップ向けに設定した気がするが、この大量のオプションがどれほど有効なのかは不明。
virgl 関連だけ抜き出した start.sh はこうなる
#!/bin/bash
export MESA_NO_ERROR=1 MESA_GL_VERSION_OVERRIDE=4.3COMPAT MESA_GLES_VERSION_OVERRIDE=3.2 LIBGL_DRI3_DISABLE=1
virgl_test_server_android &
sleep 1
export XDG_RUNTIME_DIR=${TMPDIR}
export XDG_CONFIG_DIRS=/data/data/com.termux/files/usr/etc/xdg
export VK_ICD_FILENAMES=/data/data/com.termux/files/usr/share/vulkan/icd.d/wrapper_icd.aarch64.json
export MESA_SHADER_CACHE=512MB
export MESA_SHADER_CACHE_DISABLE=false
export vblank_mode=0
export GALLIUM_DRIVER=virpipe
termux-x11 :0 -xstartup "dbus-launch --exit-with-session xfce4-session"
サウンド (pulseaudio)
必要なパッケージのインストール
$ pkg install vim pulseaudio pavucontrol
次に vim $PREFIX/etc/pulse/default.pa を開いて以下が有効になるように編集
load-module module-device-restore
load-module module-stream-restore
load-module module-card-restore
### Enable ALSA sink/source (local, optional)
load-module module-alsa-sink device=default
load-module module-alsa-source device=default
### Enable TCP connections for clients
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1
足りないとおぼしきディレクトリの追加
mkdir -p $PREFIX/etc/pulse/default.pa.d
ここで、termuxをフロントで実行したままtermux-x11に切り替えるとX側でも音がなるはず。
pulseaudio 関連の設定だけ抜き出した start.sh はこうなる。
pulseaudio --start --verbose --exit-idle-time=-1&
export PULSE_SERVER=tcp:127.0.0.1:4713
termux-x11 :0 -xstartup "dbus-launch --exit-with-session xfce4-session"
マイクが使えない問題
まず前提として termux api のマイクアクセスを quest の設定アプリで許可する必要ある
しかし現状の horizon os v81 では termux-api は quest 3 のマイクをうまく扱えない
termux 単体で termux-microphone-record も無音になる
当然 pulseaudio で入力デバイスは認識していても無音になる
残念
startx.sh 最終形態
ここまで最低限使える termux desktop 環境が手に入る
#!/bin/bash
# fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export INPUT_METHOD=fcitx
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus
# pulseaudio
pulseaudio --start --verbose --exit-idle-time=-1&
# virgl
export PULSE_SERVER=tcp:127.0.0.1:4713
export MESA_NO_ERROR=1 MESA_GL_VERSION_OVERRIDE=4.3COMPAT MESA_GLES_VERSION_OVERRIDE=3.2 LIBGL_DRI3_DISABLE=1
virgl_test_server_android &
sleep 1
export XDG_RUNTIME_DIR=${TMPDIR}
export XDG_CONFIG_DIRS=/data/data/com.termux/files/usr/etc/xdg
export VK_ICD_FILENAMES=/data/data/com.termux/files/usr/share/vulkan/icd.d/wrapper_icd.aarch64.json
export MESA_SHADER_CACHE=512MB
export MESA_SHADER_CACHE_DISABLE=false
export vblank_mode=0
export GALLIUM_DRIVER=virpipe
# xfce
termux-x11 :0 -xstartup "dbus-launch --exit-with-session xfce4-session"
capslock を無効化したい
- 現状方法不明
各種アプリケーションのセットアップ
firefox
これでそのままつかえる
$ pkg install firefoz
中ボタンクリックで paste になる問題の対策
thinkpad trackpad keyboard だとマウスの wheel click が firefox 上で paste になるので、それを防ぐ方法
about:config -> middlemouse.paste を false にする
meta quest 3 上の termux 環境に ssh server を立てて pc からログインする方法
$ pkg install openssh
# OpenSSHサーバーの起動
$ sshd
# IP確認
$ pkg install iproute2
$ ip -4 a
## inet 192.168.1.x/24 という表記の192.168.1.xの部分がIPになります
# ユーザー名確認
$ id
## uid=xxxxx(u0_axxxxx) という表記のu0_axxxxxがユーザー名になります
# パスワード設定 これでパスワードを設定します、適当なパスワードを設定してください
$ passwd
pc から以下のようにすればログインできます
ssh u0a159@192.168.1.x -p 8022
参考
xfce4 の keyboard shortcut
変更方法は以下参照
- https://viva-linux.jp/xfce-keyboard-shortcut-window-tile-854
- https://qiita.com/kazoo04/items/6fb6eeb16e1213c1c15b
chromium browser
chrome は arm64 ビルドがなくて動かないので chromium
pkg install chromium-browser
brave-browser
- proot じゃないと動かない
- proot環境設定は別途調べて
proot-distro login --user legokichi "ubuntu" --shared-tmp -- eval "env DISPLAY=:0 XDG_RUNTIME_DIR=${TMPDIR} brave-browser --no-sandbox"
vscode
- proot じゃないと動かない
- proot環境設定は別途調べて
proot-distro login --user legokichi "ubuntu" --shared-tmp -- eval "env DISPLAY=:0 XDG_RUNTIME_DIR=${TMPDIR} code --verbose --no-sandbox"
quest3 から linux の VNC を使う方法
- ここまでデスクトップ環境を構築しても quest 3 の性能の限界を感じるとき(特にfirefox で notion.so などの超リッチな ui の web サイトを触っているとき)に使う
- cpuとメモリつよつよ linux 母艦に tigervnc を使う
- (termux repo にはなぜか tigervnc しか入ってない)
母艦 linux 側
母艦 linux には xfce4 と fcitx5-mozc を入れたデスクトップ環境 tiger vnc server で配信する想定
自宅のつよつよ母艦との ssh には tailscale とか cloudflare tunnel とか ssh over tor とか softether vpn azure とか使えば良い
インスコ
sudo apt install tigervnc-standalone-server xfce4 xfce4-goodies -y
サーバパスワード指定
vncpasswd
vncserver :1
vncserver -kill :1
vnc で Xfce4 を使うように設定
vim ~/.vnc/xstartup
chmod +x ~/.vnc/xstartup
~/.vnc/xstartup の内容
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export INPUT_METHOD=fcitx
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus
export XKL_XMODMAP_DISABLE=1
dbus-launch --exit-with-session xfce4-session
(母艦 linux pc の日本語環境は fcitx でなくともご自由に)
サーバ起動 (:1 は port 5901)
vncserver :1 -geometry 480x640 -depth 16 -FrameRate 15 -CompareFB 2 -ImprovedHextile 1
上記設定なら(LANではなく)インターネット超しでもそこそこ早くて通信量が少ないはず
quest 側
termux でサーバへつなぎ ssh ポートフォワーディングする
ssh hoge -L 5901:127.0.0.1:5901
termux-x11 の xfce4 の中で tigervnc をインストールして
$ sudo apt install tigervnc-viewer
起動
vncviewer -compresslevel 9 -qualitylevel 0 -lowcolourlevel 0 -PreferredEncoding tight -autoselect=0 -FullScreen -FullscreenSystemKeys 127.0.0.1:5901
こちらも 通信量が少なくなるような設定
-
-FullScreen -FullscreenSystemKeysで win key なども転送される - f8 key で FullScreen 解除できる
quest3 から android を操作する方法
quest3 の中で vnc で linux マシンをリモート操作するだけでは飽き足らず android もリモート操作したくなったときに使う
- quest3 に https://github.com/zwc456baby/ScrcpyForAndroid を入れる
- 操作対象の android で
- 開発者モードをon にする
- usb デバッグとwifi デバッグをonにする
- wifi デバッグの設定でpairing mode にする
- quest3(quest3でなくてもよいが) の termux で
-
adb pair [HOST]:[PAIR PORT]して操作対象の android とペアにする -
adb connect [HOST]:[ADB PORT]して操作対象の android にデバッグ接続する -
adb devicesして接続されているのを確認する -
adb tcpip 5555してポートを変える
-
- quest3 の ScrcpyForAndroid で接続する
- 参考: https://ivonblog.com/en-us/posts/termux-scrcpy/
この環境で 2 年ほど仕事をしてみた感想
- quest3 はコスパ最高
- でもそろそろメモリ足りないので Samsung Galaxy XR あたりが欲しいかも
- この記事の内容はそのまま AndroidXR でも動くはず
- 2026年に期待
参考情報
わからないことあったら↓を読むこと