Asial Blog

Recruit! Asialで一緒に働きませんか?

Linuxでディスプレイに表示中のXに対してVNCする(X11VNC)

カテゴリ :
バックエンド(インフラ)
タグ :
Tech
Linux
X-window-system
VNC
Debian
今回は、知っているとちょっと便利かもしれないコマンドというか、アプリケーションを紹介します。

X11VNCとは?


ディスプレイに表示している内容をそのままVNCで表示できるVNCサーバです。

他のVNCサーバは、表示しているものとは別にXサーバを立ち上げることにより、複数人で使用できるようにします。
逆に言えば、物理ディスプレイに表示中の画面を拾うことができません。
これが利点であり欠点でもあります。

それを逆にしたものがX11VNCです。

表示中の画面が拾えるのが利点ですが、
例えば、会社PC(もちろんLinux)のlibreofficeでドキュメントを開いたままで帰ってしまい、自宅で編集できなくなってしまった場合(たまにありますよね)
sshでログインして、kill発行して強制終了するなどの荒業もありますが、保存前のデータがなくなる可能性があります。
出来れば安全に保存して終了させたい・・・そんなときに役立ちます。

その他、
・会社でIRCクライアントを開いたまま帰り、自宅でその内容を確認したい時
・会社PCにしか入っていないGUIアプリケーションを開いたまま(ry
・どうしても遠隔で動画を流す必要があるとき
・深夜に作業中の人を驚かせたい
などにも役立ちます。

または、サーバ用途の場合にも役立ちます。
例えば、
・DCのサーバに遠隔ログインして、起動中のアプリケーションを触る必要がある
・DCで作業中の担当者から、操作方法がわからないと言われたときに、実際に画面を動かして教える
・スクリーンショットを取るようなアプリケーションを動かしていて、その様子を見る必要があるとき
などでも役立ちます。

インストール


大抵は、apt-getかyumで入るので割愛。
  1. $ sudo apt-get install x11vnc
どうしてもソースから入れる人はググッてください。

使い方


一言で言えば、
  1. $ x11vnc
以上。

5900番ポートで待ち受けますので、別のPCから適当なVNCクライアントでつなげば画面を表示できると思います。
なお、一度セッションが切れると終了するのでご注意ください。

manページ見てみたら、色々とオプションがあるようですので、興味があれば調べてみてください。

遠隔からの起動方法


通常、普段使っているときは起動せずに、必要になってから起動するかと思います。

とは言っても、普通のXアプリケーションなので、これだけです。
  1. $ x11vnc -display :0
:0は起動中のX番号

遠隔からの接続方法


もし、ファイアウォールなどで5900などのポートが遮断されている場合や、経路が安全で無い場合について。
sshで入れている時点で、問題はないかと思います。いつものようにポートフォワードします。

  1. $ ssh host_name -L 5900:localhost:5900
で、localhostに対してvncviewer起動。


使用感


普通のvncサーバです。gnomeとかkdeなら普通に使えると思います。

自分の場合は、サーバでもクライアントでもstumpwmを常用している関係で C-t が送れないため(C-t tとしても送れない)
stumpish 'gselect 2' などを毎回発行するとか、面倒なことになっていますが、非常用なのでこれでよしと。

おまけ


wakeonlan
言わずと知れた(?)遠隔起動のパケットを投げるコマンド。
スリープして帰った場合などに便利に使えると思います。

起動したいPCのBIOSで、下記設定をします。
・電源をつないでおく
・WakeOnLanを有効に
・場合によっては、ethtoolでwolを有効にする必要がある
  1. $ sudo ethtool -s eth0 wol g
※このeth0は、有線LANが確実につながっているNICを指定してください。

次に、eth0のMACアドレスをメモしておきます。(ifconfigを打ち、HWaddrの値)

起動したいマシンを、スリープかシャットダウンしてから、同じセグメントの別マシンで、
  1. $ wakeonlan 起動したいマシンのMACアドレス
と打てば、起動するはずです。
起動しない場合は、下記を確認してみてください。
・LANケーブルが抜けている
・電源が完全に落ちている(NICに電源が供給されていない。古いマシンだと、WOL用の端子があるので、それを接続する)
・wakeonlanが投げるパケットはブロードキャストなので、同じセグメントでないと起動しません。
・その他起動しない理由はいくつかあるようなので、ググッてください。