Ubuntu 12.04 (LTS)に VNC(正確にはXDMCP?)でログインする
最近の Ubuntu は,デスクトップマネージャ(DM)にGNOMEのやつ(GDM)を使っていないらしく,デフォルトはLightDMだったので記録しておく(ネットにある情報はだいたいがわざわざgdmを入れさせてるので).
環境は以下のとおり.
今のところの問題点はクリップボード(コピペ)まわりがうまくいかないこと.具体的には
- クライアント側でコピーして,サーバ側で,ペーストが出来ない.そもそもコピーした内容がサーバ側に渡ってない様子.
- 逆に,VNCサーバ側でコピーして,クライアント側でそれを受け取ってペーストは出来るが,日本語は文字化けする.例:サーバ側で「あいうえお」をコピーする→クライアント側でペーストすると「¥u3042¥u3044¥u3046¥u3048¥u304a」となる.(単に文字コードが変なだけな気がする)
てな具合.それ以外は概ね良好.
以下は導入の手順.ただしクライアント側はMacなのでデフォルトでOK *1.
1. Ubuntu 上で,vnc4server と xinetd *2を入れる.
$ sudo apt-get install vnc4server xinetd
(vnc4server だけでもVNCは出来るけど,その場合は常にユーザがログインした状態になるか,もしくはsshでまず入ってvnc4serverを起動してからVNCすることになる.それでもいいならUbuntuでVNC使えるようになるまでメモ - i_aose(旧polaroidoon)の日記 に従えばできる)
2. 次は xinetd の設定.
xinetd は
ポート監視用のデーモンプログラムで、あるポートに対してアクセスがあると、設定ファイル (/etc/xinetd.d/ 等) を元にポートに対応したサービス (ftp 等) を起動します。この際、ポートとサービスの関係は、/etc/services によって導かれます( xinetd の設定 )
とある通り,以下で,/etc/services に VNCのポートを追加して,そのポートにアクセスがあった場合の挙動を /etc/xinetd.d/xvnc に指定する.
2. 1. VNC用の監視ポートを登録する.
$ sudo vim /etc/services
とかで開いて,最終行にでも以下を追加する.
xvnc 5902/tcp # VNC server
※ポート番号5902は,他とかぶってなかったら好きに替えてもいいはず.
2. 2. VNC用の設定ファイルを作成する.
$ sudo vim /etc/xinetd.d/xvnc
とかして(好きな)エディタで以下を入力する.
service xvnc
{
disable = no
socket_type = stream
wait = no
user = nobody
group = tty
server = /usr/bin/Xvnc
server_args = -inetd -geometry 1920x1200 -depth 24 -query localhost -once PasswordFile=/etc/passwd_vnc
}
ただし"-geometry 1920x1200"はVNCしたときの画面の解像度になるので,自分の好きに指定する.
3. VNCサーバにアクセスするためのパスワードを用意する
$ sudo vncpasswd /etc/passwd_vnc
$ chown nobody:tty /etc/passwd_vnc
とか打ってみる.これは(詳しくは)知らない.知ってるひとは教えてください.
4. LightDM の XDMCP を有効化させる
これも詳しくは分からないが,以下の設定をしてないと,ちゃんとGUIが起動しなかった.VNC でマルチユーザー・ログインを可能にするとか,Xディスプレイマネージャ - Wikipediaとかを参照して勉強して,理解したら教えてください.
作業自体は
$ sudo vim /etc/lightdm/lightdm.conf
とか打って,/etc/lightdm/lightdm.conf *3を開いて,最後に
[XDMCPServer]
enabled=true
と追加する.
5. LightDM と xinetd を再起動する.
$ sudo /etc/init.d/xinetd restart
$ sudo /etc/init.d/lightdm restart
6. クライアント側からアクセスしてみる.
以上で導入完了.うまくいったかチェックしてみる.
Finder で ⌘ + k とするか,「移動 > サーバへ接続…」として,vnc://xxx.xxx.xxx.xxx:5902 とかしてアクセスしてみる. (当たり前だけど xxx.xxx.xxx.xxx はサーバのIPアドレスで,192.168.0.10 とかそんなの.5902 も 2.2 で指定したポート番号にすること)
捕捉. ちゃんとLISTENしてるか一応,確認
netstat -a | grep vnc
tcp 0 0 *:xvnc *:* LISTEN
となっていたら良い. もしかすると grep 5902 じゃないとヒットしないかもしれない.
捕捉その2.SSHでトンネルして接続する.
これについては,セキュリティ面でやっておくべき.ヒントはMacからSSH経由でVNCを使う|mattintosh note (跡地)とか.
これを書いてから,そもそもなんで xinetd が入ってないのか疑問に思って調べてみたら,upstart ってのが最近は主流らしい.これについての情報があんまりないので,どうすれば良いかは調べてみないと分かんないけど,たぶん xinetd の部分は全部 upstart で置き換えられると思う.