Android端末をLinuxマシンのディスプレイにする anchor.png

Android端末をLinuxマシンのディスプレイにする方法。

今回は,VNCを使って,Android端末をLinuxマシンのディスプレイにしてみる。

Linuxマシンは,VMware Workstation Playerで動かしているUbuntu 20.04を利用している。

Page Top

Linuxマシンでのマルチディスプレイ anchor.png

Linuxマシンで複数のディスプレイデバイスを接続して使用するマルチディスプレイを構成する方法は,いくつかの方法がある。
Linux/Unixでは,GUIとしてX Window Systemを使用している。ここでのマルチディスプレイは,GUI(X Window System)での構成方法を説明している。

  • スクリーンを分割する方法
    X Window Systemでマルチディスプレイを構成する最も古い方法。
    物理ディスプレイのそれぞれにXのスクリーンを割り当てる。このため,各スクリーンは独立して動作する。
    XのディスプレイにはDISPLAY環境変数によって:0のようにIDが一つだけ指定されるが,マルチディスプレイでは各スクリーンを指定する場合に,DISPLAY環境変数で指定する。
    一番目のスクリーンは:0.0,二番目のスクリーンは:0.1といったようにアサインされる。
    この方法の場合は,ウィンドウを別のスクリーンに移動させることは出来ない。GIMPやEmacsなどこの方式のマルチディスプレイに対応しているアプリケーションでは出来るようになっている。
    ほとんどのアプリケーションでは,DISPLAY環境変数により表示するディスプレイを変更する。
  • Xineramaを使用する
    Xineramaも,Xのマルチディスプレイを実現する古い方法。
    Xineramaでは,全てのディスプレイを単一のスクリーン(:0)にまとめて管理するので,複数ディスプレイ間を移動したりすることが出来る。
    Xの設定ファイルをマルチディスプレイに静的に設定することで動作する。RandRのように動的に制御することは出来ないです。
  • RandRを使用する
    RandR(Rotate and Resize)は,Xのスクリーンを動的に変更(リサイズ,回転など)出来るようにするためのX Window Systemの拡張機能。
    RandRでは,xrandrコマンドを使って動的にセッションの設定をしたり,xorg.confファイルを使って静的にも設定することが出来る。
    RandRでは,複数の物理ディスプレイを仮想のディスプレイにマッピングして管理するので,アプリケーションの画面を自由にディスプレイ間を移動したりすることが出来る。
  • TwinViewを使用する
    TwinViewは,nVidiaのビデオカードが持つ複数のディスプレイを1つのディスプレイと管理するX Window System拡張。
    nVidiaのビデオカード(チップ)を搭載したマシンでないと使用できない。
Page Top

Android端末をLinuxマシンのディスプレイとして使用する(ミラー表示) anchor.png

Linuxマシンにディスプレイが接続されていて,同じ画像をAndroid端末にミラー表示させる。Android端末を独立したセカンドディスプレイとして使うのではない。

これは,VNCでリモートデスクトップを行う方法と何も変わらない。

Page Top

Linuxマシン側にVNC Serverをインストールする anchor.png

LinuxマシンにはVNC Serverをインストールする。Ubuntu 20.04の場合は,最初からVNC Serverであるvinoがインストールされている。

もしインストールされていない場合は,以下のようにしてインストールする。

# apt install vino

次にVNC Serverの設定をする。

  • Ubuntuのデスクトップで右クリックして,設定>共有を開く
  • 右ペインの共有の右にあるスイッチをオンにする
  • 画面共有のスイッチをアクティブにする
    コンピューター名には,マシン名がデフォルトで入っている。
  • 接続設定の画面が表示される
    「このスクリーンの操作する接続を許可する」をマークする。
    接続するときに使用するパスワードを設定する。

この設定を行うと,/etc/xdf/autostart/vino-server.desktopがセットアップされる。これでGNOME環境にログインすると自動的にvinoが起動される。

この後,Android端末とVNCで接続するには暗号化接続が使用できないので,ターミナルを起動し,

$ gsettings set org.gnome.Vino require-encryption false

として,暗号化した接続を使用しないようにしておく。

Linuxマシンが使用しているNetworkのIP Addressを以下のようにして調べておく。(ブリッジ接続)

$ ifconfig
Page Top

Android端末側へVNC Viewerをインストールする anchor.png

Android端末側には,VNC Viewerをインストールする。
Google Playからインストールするか,ADBからインストールする。
今回はADBを使って,

> adb install vncviewer_3.7.1.44443.apk

としてfilevncviewer_3.7.1.44443.apkをインストールした。

Android端末でVNC Viewerを起動し,

  • +で接続先を追加する
  • 接続先としてLinuxマシンのIPアドレスを設定する。接続名に適当な名前を付ける。
  • 接続にはパスワードを聞かれるので,Linux側で設定したパスワードを入力する。
  • View onlyスイッチをonにする。

その他は,デフォルトのままで大丈夫だった。

接続するポート番号は,デフォルトの:5900となる。

Page Top

Android端末からVNCで接続する anchor.png

Android端末でVNC Viewerを起動し,接続用のパスワードを使ってLinuxマシンのIP Addressに接続する。
Remember passwordをonしておくと,次からパスワード入力はしなくて済む。

接続できると,Linuxマシンのディスクトップ画面がAndroid端末に表示(ミラー)されます。
セカンドディスプレーとして使わなければ,これでAndroid端末をディスプレイとして使用できる。

Page Top

Android端末をLinuxマシンのセカンドディスプレイにする anchor.png

Ubuntu 20.04に最初からインストールされているvinoは,標準ディスプレイをミラー化したX Windowを使用するリモートデスクトップを実現するVNC Server。なので,VNCで接続する別のセカンドディスプレイとして(例えば:1)のVNC Serverとしては利用できない。

VNCで接続する別のセカンドディスプレイを作るために,別のVNC Serverであるtightvncserverをインストールして使用することにした。
tightvncserverはユーザーモードのみで動作するVNC Serverで,通常のデスクトップ環境はもちろん,デスクトップ無しの単なる表示のみといった環境も作成できる。
注意することとして,tightvncserverはRANDR拡張には対応していない。 RANDR拡張を利用する場合はtightvncserverをフォークして開発されているtigervncが使用できる。

tightvncserverは以下のようにしてインストールした。

# apt install tightvncserver

物理ディスプレイを使用しているなどでミラー化したVNC Serverが必要なければ,画面共有のスイッチはオフにする。
また,ミラー化VNC Serverのvinoと別ディスプレイとしてのVNC Serverであるtightvncserverは共存できる。

必要であればx2vncをインストールする。x2vncはキー操作やVNCに転送したり,マルチスクリーン管理をする。表示だけ行えればいいのであれば,x2vncは必要ない。

# apt install x2vnc

そして,インストールしたVNC Serverを起動する。

$ vncserver

最初に接続用のパスワード(max. 8文字)を設定する。

一度,vncserverを停止する。

$ vncserver -kill :1

VNCの接続パスワードを変更する場合は,

$ vncpasswd
Password: ********
Verify: ********

のようにする。

Page Top

VNC Serverを起動する anchor.png

現在のメインのディスプレイのDISPLAY番号を確認する。

$ echo $DISPLAY
:0

:0が現在のメインディスプレイのDISPLAY番号になっている。(:1の場合もある)

VNC Serverを起動する。

$ vncserver :1 -geometry 1080x1920

Android端末の解像度を-geometryで設定している。2個めのディスプレイ:1を指定している。もしメインディスプレイが:1の場合は,:2とかにする。

キー操作が必要な場合は,x2vncも起動しておく。

$ x2vnc -shared -west localhost:1

これで準備が出来た。

Page Top

Android端末でVNC Viewerで接続する anchor.png

AndroidのVNC Viewerでは,接続IP Addressに:5901を追加する。(vncserverを:1で起動した場合)
後は,connectで接続すれば,セカンドディスプレイとしてAndroid端末の画面が使用できる。

Page Top

Linuxからセカンドディスプレイに画像を表示する anchor.png

セカンドディスプレイに画像を表示して確認のするために,ImageMagickをインストールする。

# apt install imagemagick

ImageMagickのdisplayコマンドで画像を表示してみる。

$ display -display :1 xxxxx.bmp

Android端末の画面に画像が表示された。

これで,2画面のディスプレイが使用出来るのを確認できた。


新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

Front page   Freeze Diff Backup Copy Rename Reload   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Counter: 1400, today: 1, yesterday: 3
Last-modified: 2021-06-08 (Tue) 19:00:37 (JST) (652d) by yuji