アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

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

今回は、知っているとちょっと便利かもしれないコマンドというか、アプリケーションを紹介します。

X11VNCとは?


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

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

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

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

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

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

インストール


大抵は、apt-getかyumで入るので割愛。


$ sudo apt-get install x11vnc

どうしてもソースから入れる人はググッてください。

使い方


一言で言えば、


$ x11vnc

以上。

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

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

遠隔からの起動方法


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

とは言っても、普通のXアプリケーションなので、これだけです。


$ x11vnc -display :0

:0は起動中のX番号

遠隔からの接続方法


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



$ 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を有効にする必要がある


$ sudo ethtool -s eth0 wol g

※このeth0は、有線LANが確実につながっているNICを指定してください。

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

起動したいマシンを、スリープかシャットダウンしてから、同じセグメントの別マシンで、


$ wakeonlan 起動したいマシンのMACアドレス

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

GeForceと4GBのメモリ

こんにちは。Windowsはゲーム専用な門脇です。
普段はDebian GNU/Linuxを愛用していますが、DirectXが(ry

先日、自宅PC(Athlon64 3800+, GeForce7900GTX, その他割愛)のメモリを増設して4GB(2GBx2 DualChannel)にしました。
最近メモリが安くなって、2GBx2でも6000円程度で買えるようになったのでつい衝動買いを・・・。

さっそくPCに搭載し、ゲーム専用になっているWinXP(32bit)を起動すると正常に動作。
(もちろん、3.4GBしか認識してません w)

次に、普段使い用Debianの方を立ち上げ、free -m の実行結果を見てニヤニヤ。
しっかり4GB認識しています。

とりあえず、メモリを食う作業でもしてみようかと、startxを実行・・・なぜかブラックアウト。
xorg.confを再生成してみてもブラックアウトか、緑色のノイズが表示されだけ。
vesaドライバを使うと正常に表示されるので、GPUが壊れているわけでもない。
Nvidia公式の最新ドライバをインストールしてもかわらず。

しばらく調べてみても解決せず、試しにググってみると・・・
なにやら、4GB以上認識しているとハングアップするらしい。

つまり、メモリの量が問題だったようです。

/boot/grub/menu.lstのkernel行に、


 mem=3900m

を追加してstartxをすると、無事に起動しました。

まさかこんな落とし穴があったとは・・・
これから増設しようとしている人は気をつけてください。
(Windowsな人の場合は3.4GB制限がなくのであまり問題にならなかったようです。もちろん、4GB以上認識させると起こります)


さて、せっかくメモリを4GBに増設したので(実質3900MBですが)、その恩恵を受けるためメモリを消費するプログラムを動かしたいと思います。
一番に思いつくのは画像処理。無駄に8000x6000位の画像を編集とか、レイヤを作りまくるとか・・・メモリは使うがはっきり言って無意味。(それ以前に絵が描けない orz)
あとはディスクキャッシュに・・・無意味ではないが地味。

簡単に思いつくのはramdisk。2.5GBくらい/tmpに割り当てても問題なさそうなので、


mount -t tmpfs -o size=2500m tmpfs /tmp

こんな感じで2500MB分確保します。(tmpfsなので使用した分だけ領域を確保します)
多少は体感速度が上がる・・・かもしれません。


そのうちに、Xenを入れてディスクイメージをramdiskに入れてみる実験をしてみようかと画策中。