pockestrap

Programmer's memo

AndroidタブレットをLinuxのディスプレイにしよう

環境

  • Arch Linux(2014/01/18時点で最新)
  • Awesome WM v3.5.2
  • tigervnc 1.2.0-4
  • x2vnc 1.7.2
  • hostname: e732za12b
  • username: pocke

VNCを使ってAndroid端末をサブディスプレイにする - テクニカルプア
TigerVNC - ArchWiki
ひとつ目の記事を見てたら出来ましたが、数カ所異なってたとこがありました。

やりたいことは、Android端末をLinuxでサブディスプレイにしたいなー、って感じです。
WindowsとかMacとかだと専用のアプリがあるみたいですが、Linuxだとなさそうです。
そのため、LinuxVNCサーバーを立ち上げ、それをAndroid端末で表示してる感じです。
だからvnc用にWMがもうひとつ立ち上がっちゃうのですよねー…ぐぬぬ

vnc server のインストール

上記のブログではtightvncを使っていますが、tigervncがpacmanに入ってtightvncはyaourtにあるようなので、tigervncをインストールします。

$ sudo pacman -S tigervnc

Linux側から端末に映しているものを操作できるよう、x2vncをインストールします。
AURにあるのでyaourtを使います。

$ yaourt -S x2vnc

vnc server の設定

一旦vnc serverを起動します。

$ vncserver :1
You will require a password to access your desktops.

Password:
Verify:

New 'e732za12b:1 (pocke)' desktop is e732za12b:1

Creating default startup script /home/pocke/.vnc/xstartup
Starting applications specified in /home/pocke/.vnc/xstartup
Log file is /home/pocke/.vnc/e732za12b:1.log

パスワードの入力を求められるので、てきとーなものを入力してください。
タブレットなどから接続する時に必要なパスワードになります。

vnc serverの設定をするので、一旦vnc server を殺します。

$ vncserver -kill :1

~/.vnc/xstartupを編集します。.xinitrcみたいなものです。

### file: ~/.vnc/xstartup
#!/bin/sh

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
OS=`uname -s`
if [ $OS = 'Linux' ]; then
  case "$WINDOWMANAGER" in
    *gnome*)
      if [ -e /etc/SuSE-release ]; then
        PATH=$PATH:/opt/gnome/bin
        export PATH
      fi
      ;;
  esac
fi
if [ -x /etc/X11/xinit/xinitrc ]; then
  exec /etc/X11/xinit/xinitrc
fi
if [ -f /etc/X11/xinit/xinitrc ]; then
  exec sh /etc/X11/xinit/xinitrc
fi
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &

デフォルトだとこんな感じでした。
私の環境だと、/etc/X11/xinit/xinitrc が呼び出されてtwmが起動されていました。
これは本意ではなく~/.xinitrcを使いたいので、if [ -x /etc/X11/xinit/xinitrc ]; then行より前にしたのようなものを追加します。

if [ -f ~/.xinitrc ]; then
  exec sh ~/.xinitrc
fi

これで普段使っている.xinitrcがvnc serverでも使われます。

vnc server の起動

$ vncserver :1 -depth 16 -geometry 1024x768 -alwaysshared 

みたいな。

  • depthが色数、-geometry が画面サイズみたいです。好みで調整すればいいんじゃないですかね。
  • alwayssharedはAndroidのクライアントとx2vncの両方でログインするのに必要みたいです。
$ x2vnc -shared -east localhost:1
x2vnc: VNC server supports protocol version 3.8 (viewer 3.3)
Password: 

x2vnc: VNC authentication succeeded
x2vnc: Desktop name "e732za12b:1 (pocke)"
x2vnc: Connected to VNC server, using protocol version 3.3
x2vnc: VNC server default format:
screen[0] pos=3289
screen[1] pos=1924
Xinerama detected, x2vnc will use screen 1.
x2vnc: pointer multiplier: 1.860983

x2vncを起動します。

  • eastオプションの他にも-north -south -east -westオプションがあります。上下左右どこにディスプレイを拡張するか、って感じですね。

パスワードを要求されるので、さっき設定したものを入力します。
デーモンにはなってくれないみたいなので、このままターミナルは開いておきましょう。


こんな感じで後はAndroidvncクライアントから接続すればよい感じです。
vncクライアントは良さそうなものが見つかったら追記しようと思います。

xrandrでマルチディスプレイ環境にしているけどいい感じに動きました。神。
ただ、vncserverを:2でも立ち上げてもっとディスプレイを増やそうとしたら、x2vncの方がうまく動かない感じでした。残念。

ちなみにこんな感じです
f:id:Pocke:20140118154600j:plain