3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(Linux)コンソールに表示されているデスクトップ画面をVNC(x11vnc)で操作する

(Linux)PuppyにVNCサーバを入れるや、(Linux)VNCサーバ構築LinuxVPNサーバを構築する方法をかきました。

Linuxで普通にVNCサーバ立てると、VNCリモートセッションはローカルログインセッションと異なります。VNCリモートセッションを複数張るとそれも別々のセッションとなるので、表示される画面もセッション毎に異なります。

複数ユーザ使用を強く意識したUnixの影響と思われますね。

ところがWindowsのクライアントOSは同時に1セッションが基本なので、VNCもローカルログオンしているユーザの画面が表示されます。

ヘルプサポートするときには便利ですね。

今回したい要件は、WindowsVNCのようにコンソール上に表示されている(ローカルログオンしている)デスクトップ画面をVNCでリモートするというものです。

x11vnc というソフトを使えばその要件が可能なようです。

x11vnc のpetパッケージを探したんですが見つからなかったので、例のごとく Ubuntudeb パッケージを使うことにしました。

x11vnc 0.9.3 を使います。0.9.3はUbuntu9.10(コードネームkarmic)の時のものです。10.04(lucid)で使われてる0.9.9を使おうとするとlibc6(共通Cランタイムライブラリ GLIBC?)2.7以上が必要ということで動きませんでした。無理やりlib6の新しいバージョンを入れましたが、そうするとあちこちでおかしくなるのでお勧めできません。ちなみに、Puppy4.31に入っているlibc6のバージョンは2.6.1のようです。

ということで、x11vncパッケージを下記Ubuntuのサイトよりダウンロードし、インストールます。

http://packages.ubunut.com/karmic/x11vnc

しかし、実行しようとすると依存する複数のライブラリが無いということで実行できません。

それで、下記依存ライブラリをUbuntuよりダウンロードしてインストールします。

libvncserver0 0.9.3

libavahi-common3 0.6.25

libavahi-client3 0.6.25

libdbus-1-3 1.2.16

これで、プロンプトで x11vnc を実行すると起動します。

VNCクライアント側からは VNC Viewer で、IPアドレス:0 と指定するとアクセスできます。(ディスプレイ番号は0になります。)

後はパスワードの設定が必要ですよね。下記のようにします。

# x11vnc -storepasswd

Enter VNC password: ←パスワードを入力

Verify password:

Write password to /root/.vnc/passwd? [y]/n

Password written to: /root/.vnc/passwd

そして、パスワード認証付きでx11vncを実行するには下記のようにします。

# x11vnc -rfbauth /root/.vnc/passwd

x11vncはクライアント側でセッションを閉じると、終了してしまうのでx11vncを終了させたくない場合は、オプションで-foreverをつけてx11vncを実行します。

# x11vnc -forever

さて、よーやく使えるようになった x11vnc ですが、これをOS起動時に自動的に立ちあがっても欲しいです。

Puppyの場合は、/root/Startup/ に自動実行したいファイルのシンボリックリンクを張ればいいようです。

ということで、x11vnc を起動するシェルスクリプトを作成し、そのシンボリックリンクを張りました。

# vi /root/.vnc/x11vnc_startup.sh

#!/bin/sh

x11vnc -rfbauth /root/.vnc/passwd -forever

:wqでシェルスクリプトファイル保存

# ln -s /root/.vnc/x11vnc_startup.sh /root/Startup/x11vnc

これで再起動してみたところバックグラウンドでx11vncがたちあがるようになりました。

-foreverオプションも付けているので、クライアントがVNC Viewer で切断しても x11vnc は動いているのでまた接続できます。

UbuntuベースのLinuxMint9でも試してみました。

apt-get install x11vnc でインストールできます。

後の使い方は基本的には上記で書いたPuppyと同じです。

異なるのは自動起動させたい時の設定でしょうか。

x11vnc を LinuxMint9 で自動起動させるには、/etc/rc.local の exit0 より前に下記の記述を入れます。

/usr/bin/x11vnc -rfbauth /home/root/.vnc/passwd -forever

※x11vnc 0.9.9 にはバグがあるので、-xkb オプションを付けるといいようです。

/usr/bin/x11vnc -rfbauth /home/root/.vnc/passwd -forever -xkb

詳しくは、(Linux)X11VNCでShiftキーを使っての記号が入力できないを参照。

参考:

linuxやるブログ x11vnc:

puppy linux起動時にxonclockを自動起動させる - kazu9hateの日記

KNOPPIX6.2にVNC接続 (SSH転送) ある痴れ者の日記

追記:

2013/11現在http://packages.ubunut.com/karmic/x11vncはコンテンツがなくなっているようです。

RPMforge を使ったインストールのほうが簡単なので、それをメモしておきます。

RPMforge を http://packages.sw.be/rpmforge-release/ からダウンロードし、リポジトリのインストールを行います。

# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el5.rf.i386.rpm

# rpm ihv rpmforge-release-0.5.3-1.el5.rf.i386.rpm

CentOS Baseのリポジトリ優先度を1にします。(rpmforgeよりも優先にするため)

# vi /etc/yum.repos.d/CentOS-Base.repo

↓[base]や[updates],[addons],[extras]などそれぞれに下記行を追加します。

priority=1

RPMforgeのリポジトリの優先を CentOS Baseのリポジトリ優先度より低くします。(今回は10)

# vi /etc/yum.repos.d/rpmforge.repo

[rpmforge]に以下追加。

priority=10 ←追加

yumでx11vncのインストールを実行します。

# yum install x11vnc

また、CentOS5でのx11vncの自動起動ですが、/etc/rc.local ファイルに /usr/bin/x11vnc -rfbauth /root/.vnc/passwd -forever を書いたのではダメでした。

それで xinetd 経由で起動することにしました。

以下のファイルを作成します。

# touch /etc/xinetd.d/x11vnc

# vi /etc/xinetd.d/x11vnc

service x11vnc

{

port = 5900

protocol = tcp

disable = no

socket_type = stream

wait = no

user = root

server = /usr/bin/x11vnc

server_args = -inetd -o /var/log/x11vnc.log -display :0 -rfbauth /root/.vnc/passwd -forever -bg -shared -enablehttpproxy -nolookup -auth /var/run/lightdm/root/:0

}

次に、サービスに対応するポートを設定します。

# vi /etc/services

↓を末尾に追加。

x11vnc 5900/tcp # VNC Server

# service xinetd restart

これで使えるようになりました。