SVX日記
2014-03-29(Sat) さくらのVPSを借りて、今、仮想の、デスクトップ!
どうも、オイラは「ぼぉーとゲームしてるのは性に合いませんね」というか、なんというか。のんびりしていると、むしろ「何かせねば」という強迫観念に襲われてストレスを感じる性格なのである。まぁ、別に「何か」といっても、さほどスゴいコトをやるわけでも、さほどスゴいモノを作るわけでもないのだけれどもさ。
で、イザ借りてみると、ちょっと前から、サーバの設置場所を選べるようになったとは聞いていたが、任意のISOイメージによるOSインストールもできるようになっていた。こりゃ、死角なしだな。今回は、ちょっと高いが、2Gプランを借りてみよう。ほぼデータを失う可能性がないストレージが200GB。高いといっても月に1500円弱だし、携帯電話の月額に比べりゃ安いもんだ。
インストールするOSは、せっかくなので最新のFedora20。どうも、ちょっとMINT15を味見したりしてるうちに、かなり様相が変わってしまっているらしい。もうすぐRHEL7が仕事の主戦場になることだし、多少は感覚を養っておかねば。
そもそも、Fedoraから離れてみようかと思ってしまった理由のひとつに、GNOME3のイマイチさがあったわけだが、いつの間にかFedoraでもMATEが使えるようになっているのは本当に助かる。ほとんどブラウザと端末作業ばかりのオイラだが、GNOME3はウィンドウを切り替えるだけでも苦痛だったんだよなぁ。
さくらのサイトから、ISOイメージインストールを呼び出し、sftpでFedora-20-x86_64-netinst.isoをアップロードする。systemdやfirewalldにとまどいつつ、手探りで「よく通る場所をけもの道に」しつつ、openvpnを導入……と、ふと、ここでなにげに「xrdpを導入して、リモートデスクトップ環境を構築」してみるのも楽しいのではないか、と思いついてしまった。
ところが、軽い気持ちでrdpを導入したが……接続はされるもののデスクトップ画面が現れない……なんじゃこりゃ。んじゃ、元祖のvncならどうか……こっちもダメ。うーむ、オイラ、GUI関係の仕組みについては弱いんだよな。結局、あちらこちらの情報を元に、問題の根っこが「デスクトップ環境にMATEを使っていること」であることを突き止めた。
デフォルトとはいえ、どうせみんなGNOME3なんか使わずにMATEの一択なんだろ、と思っていたのだが、こんなマイナバグが平気で残っているところをみると、そうでもないのか……オイラはマイノリティなLinux使いの中でも、さらにマイノリティなMATE使いなのか……というわけで、以下が、正しいvncの設定方法である。
・vncサーバ導入
# yum install tigervnc-server
・起動スクリプトを配置すべき場所だけ確認
# systemctl enable vncserver@:1.service
# rm /etc/systemd/system/multi-user.target.wants/vncserver@:1.service
・起動スクリプトを配置
# cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/multi-user.target.wants/vncserver@:1.service
・利用ユーザを設定
# vi /etc/systemd/system/multi-user.target.wants/vncserver@\:1.service
# diff /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/multi-user.target.wants/vncserver@:1.service
40,41c40,41
< ExecStart=/sbin/runuser -l -c "/usr/bin/vncserver %i"
< PIDFile=/home//.vnc/%H%i.pid
---
> ExecStart=/sbin/runuser -l user -c "/usr/bin/vncserver %i"
> PIDFile=/home/user/.vnc/%H%i.pid
・利用ユーザにスイッチ
# su - uesr
・vncパスワードを設定
$ vncpasswd
・デスクトップ環境の起動設定(MATEの場合はこれがキモ!)
$ vi .Xclients
$ cat .Xclients
#!/bin/bash
exec mate-session
$ chmod 755 .Xclients
$ exit
# systemctl daemon-reload
・vncサーバ起動
# systemctl start vncserver@:1.service
$ vncviewer 10.8.0.x:1
・vncサービス起動
・/home/user/.vnc/xstartupの実行……の中で、
・/etc/X11/xinit/xinitrcがあれば実行……の中で、
・/home/user/.Xclientsがあれば実行……が、ない(※)ので、
・/etc/X11/xinit/Xclientsがあれば実行……の中で、
・GNOMEかKDEならデスクトップセッション起動
・おぃ……ちょっとMATE?
・rdpサーバ導入
# yum install xrdp
・rdpサーバ起動
# systemctl start xrdp
xrdpの場合は、クライアントからのxrdp接続のあと、/etc/xrdp/startwm.shの実行の中で、/etc/X11/xinit/xinitrcが実行され、上記と同じルートを通るので、vnc設定の中で行った.Xclientsの設定により、こちらの問題も同時に解決されるのであった。
$ rdesktop 10.8.0.x
今回の試行を行う前、rdpはプロトコル上、サウンドも扱えることを知っていたので、ちょっと期待していたのだが、実はrdpは、ほぼvncのラッパーに過ぎず(実際、内部でvncを起動して通信している)、そのような機能はないことに気づいた。
うーむ、それではリモートデスクトップ環境として、いかにも片手落ちではないか……と、ここで思いついてしまった。確か、pulseaudioにはリモートでサウンドデバイスを扱える機能があったような……というわけで、以下が、pulseaudioの設定方法である。
・デスクトップマシン(音声受信→スピーカー)側の設定
・一般ユーザでログインしてから
$ cd .config/pulse
$ cp /etc/pulse/default.pa .
$ vi default.pa
・外部からのtcp接続を受け入れる設定
$ diff /etc/pulse/default.pa default.pa
85c85
< #load-module module-native-protocol-tcp
---
> load-module module-native-protocol-tcp auth-anonymous=1
・デスクトップからログアウト、再度ログインすると、ポート4713が開かれる
$ netstat -anp | grep pulse
tcp 0 0 0.0.0.0:4713 0.0.0.0:* LISTEN xxxx/pulseaudio
tcp6 0 0 :::4713 :::* LISTEN xxxx/pulseaudio
・リモート(アプリ→音声送信)側の設定
・一般ユーザでログインしてから
$ cd .config/pulse/
$ cp /etc/pulse/client.conf .
$ vi client.conf
・デスクトップマシンへtcp接続するための設定
$ diff /etc/pulse/client.conf client.conf
24c24
< ; default-server =
---
> default-server = 192.168.0.x
・vncサーバを立ち上げると、ポート4713へ接続される
# systemctl start vncserver@:1.service
# netstat -anp | grep 4713
tcp 0 0 10.8.0.x:xxxxx 192.168.0.x:4713 ESTABLISHED xxxxx/mate-volume-c
tcp 0 0 10.8.0.x:xxxxx 192.168.0.x:4713 ESTABLISHED xxxxx/mate-settings
$ vncviewer 10.8.0.x:1
# yum install sox
$ play /usr/share/sounds/alsa/Front_Center.wav
# systemctl start xrdp.service
・手元のマシンからrdpクライアントで接続してから、ポート4713へ接続される
$ rdesktop 10.8.0.x
# netstat -anp | grep 4713
tcp 0 0 10.8.0.x:xxxxx 192.168.0.x:4713 ESTABLISHED xxxxx/mate-volume-c
tcp 0 0 10.8.0.x:xxxxx 192.168.0.x:4713 ESTABLISHED xxxxx/mate-settings
# rpm -ivh flash-plugin-11.2.202.346-release.x86_64.rpm