UltraVNC

AndroidにDebianをインスコ

YouTubeGYAO!等の動画視聴くらいにしか利用しなくなったドコモ dtab d-01G(Android 4.4.4 KitKat)に、Debian norootというLinuxデスクトップ環境をインストールしてみた。インストール自体はGoogle Playストアから行うだけなので簡単。しかし、実際にDebianを起動すると初期設定をしようにも画面が小さくて操作しづらい。そこで、同じローカルLAN内にいるWindows PCから(Debian PCからでも良かったのだが)VNCでDebianに接続し、リモートデスクトップで運用することにした。

VNC環境の構築

d-01Gはroot化していない。Debian noroot(Debian 8 Jessie + Xfce)にインストールするVNCサーバーはTightVNCで、Windows Vista PCにインストールするVNCビューアーはUltraVNC(TightVNCやTigerVNCでも動作)。まず、d-01GのDebian norootでVNCの準備。がんばってタッチパネルでマウスカーソルを動かしてデスクトップのRoot Terminalからターミナルエミュレーターのxtermを起動したら、USB OTGのキーボードから以下のとおりコマンドし、文字化けしないようロケールを一時的に英語に指定後、リポジトリーを修正。

# export LANG=C LC_ALL=C LANGUAGE=en
# nano /etc/apt/sources.list

そして、このファイルの内容を以下のとおり修正。

deb http://http.debian.org/debian jessie contrib main non-free
#deb-src http://http.debian.org/debian jessie main contrib

deb http://security.debian.org/ jessie/updates contrib main non-free
#deb-src http://security.debian.org/ jessie/updates main contrib

deb http://http.debian.org/debian jessie-updates main contrib non-free
#deb-src http://http.debian.org/debian jessie-updates main contrib

deb http://http.debian.org/debian jessie-backports-sloppy contrib main non-free
#deb-src http://http.debian.org/debian jessie-backports-sloppy main contrib

deb http://http.debian.org/debian jessie-backports contrib main non-free
#deb-src http://http.debian.org/debian jessie-backports contrib main

deb http://www.deb-multimedia.org/ jessie main non-free
deb http://www.deb-multimedia.org/ jessie-backports main

次に、テキストエディターのnanoを上書き保存後に閉じたら、以下のとおりコマンド。

# apt update && apt upgrade && apt-get clean

必要に応じyで進む。次に、必要なパッケージをインストールし、ロケールを修正。

# apt install locales debian-keyring deb-multimedia-keyring xfonts-intl-japanese fonts-takao tightvncserver && apt-get clean
# nano /etc/locale.gen

インストールでは必要に応じyで進む。/etc/locale.genではen_US.UTF-8 UTF-8ja_JP.UTF-8 UTF-8のコメントアウト(先頭の#)を削除して外し、nanoを上書き保存後に閉じる。次に、以下のとおりコマンドし、ロケールを反映後、システム環境変数を設定。

# locale-gen
# nano /proot.sh

ここでは、export TZから始まる行を以下のとおりコメントアウト(行の先頭に#を追加)し、その直下に4行追加。LC_ALLが空白だと何故か英語表記になり、しかもPerlに怒られる。

#export TZ="`getprop persist.sys.timezone`"
export TZ="Asia/Tokyo"
export LANG="ja_JP.UTF-8"
export LC_ALL="ja_JP.UTF-8"
export LANGUAGE="ja"

nanoを上書き保存後に閉じたら、exitとコマンドしてRoot Terminalを終了。次に、デスクトップのTerminalからxtermを起動したら、以下のとおりコマンドし、文字化けしないようロケールを一時的に英語に指定後、ユーザーフォルダーに遷移し(u0_a192というユーザー名は一例)、~/.Xresourcesを新規作成。

$ export LANG=C LC_ALL=C LANGUAGE=en
$ cd /home/u0_a192
$ touch .Xresources
$ nano .Xresources

~/.Xresourcesの内容は以下のとおりで、これでxtermの日本語の文字化けが解消する(Xterm - ArchWikiより)。

xterm*faceName: Droid Sans Mono
xterm*faceNameDoublesize: TakaoGothic
xterm*faceSize: 10

nanoを上書き保存後に閉じたら、~/.Xresourcesをリロードし、xtermのロケールを日本語に戻した後、一度TightVNCサーバーを起動する。途中、パスワードの新規設定を尋ねられるので、設定後、すぐにTightVNCサーバーを閉じ、VNCサーバーが呼び出すXの起動スクリプト(~/.vnc/xstartup)を変更する。

$ xrdb .Xresources
$ export LANG=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8 LANGUAGE=ja
$ vncserver :1
$ vncserver -kill :1
$ cd .vnc
$ nano xstartup

xstartupは最後の行を以下のとおりコメントアウト(行の先頭に#を追加)し、その直下に4行追加(xfce - How to run xfce4 on debian on VNC startup? - Stack Overflowより)。DebianとXfceには慣れ親しんだつもりだったが、これは知らなんだ。

#/etc/X11/Xsession
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &
xrdb $HOME/.Xresources

いざVNC接続

nanoを上書き保存後に閉じたら、以下のとおりコマンドしてローカルIPアドレスを確認後、再度TightVNCサーバーを起動(1280x800は画面サイズの一例)。

$ ip -4 addr
$ vncserver :1 -geometry 1280x800 -depth 24

wlan0のinetに続く数字がd-01GのローカルIPアドレス(仮に192.168.XXX.XXXとする)。今度はWindows側。UltraVNCをインストールしたら、UltraVNC Viewerを起動し、Auto serect best settingsにチェックを入れたら、Computer:の入力欄に192.168.XXX.XXX:1と入力し、Connectボタンを押下。途中、VNCサーバーのパスワードを求められるので、先ほど新規設定したパスワードを入力し、Log onボタンを押下。

冒頭の画面はVNC経由でsynapticを起動したところ。synapticはデスクトップ上のアイコンからインストールできるが、インストールでコケるようだったら、コマンド中の-y--force-yesにしてやればいい。以上、初めてのVNCにしては上手くいったので、これからDebian  norootの用途を考えていきたい。

XRDPは断念

最初はDebian norootでXRDPを起動し、Windows側からリモートデスクトップ接続で運用するつもりだった。しかし、XRDPの設定ファイルをどう弄ってもWindowsから接続できなかったので、諦めた。

そもそもVNCを利用しない方法

前述のとおり、VNCで運用することにしたのは、d-01Gの画面が小さかったから。だったら最初からAmazon Fire TVボックスに導入すればよかった。これには外付け液晶モニターをHDMI接続させているし、Bluetoothキーボード・マウスをペアリングさせているしで、仮にDebian norootをインストールしてもVNCを設定する手間は不要だった。ちなみにこの場合、導入はGoogle PlayストアからではなくSourceForgeから行う(まだ試してないけど)。