リモートデスクトップ環境を改良した話
こんにちは!
以前、サーバー用のPCにリモートデスクトップを設定したという記事を書きましたが、実際に運用してみるとちょこちょこ不都合が生じていたので、少し運用をみなしして改良を行いました。今回はそれについて書いていきます。以前の記事はこちら↓
いつもと比べても少し小粒な内容ではありますが、実は次回以降に向けたちょっとした布石も含んでいたりするので、そういう意味でも書いておいて悪くないかなとw
x11vncの更新
過去の記事でも書いているように、サーバーマシンで使っているリモートデスクトップ用のソフトはx11vncというものです。Linux環境でリモートデスクトップを構築するものとしては一般的なソフトだと思います。詳しくはwikipediaを参照してください(日本語記事は書かれていないので英語ですが。。。)
これも前回の記事で書いたことですが、このx11vncはもともと公式リポジトリに登録されているものであり、他の多くのソフトウェアと同様にaptコマンドでインストール可能です。
sudo apt-get install x11vnc
実際にここから入手したものを設定し、利用していたわけですが、実際に使っているとソフトが突然クラッシュするという不具合がたびたび見られました。そこまで頻度が多いわけではないのですが、操作中とかにとつぜん落ちたりするのはかなり不便なものがあります。どうやら問題はx11vnc側に有り、sshは生きているようだったので、x11vncが落ちたらsshでリモートPCに侵入してx11vncを再び立ち上げればまた使えたわけですが、まあめんどくさいですよねw
調べてみると、このx11vncの最新版はGithubに公開されているらしく、aptの方のものは古いバージョンをベースにしているとのこと。最新版のGithubリポジトリはこちら。
今回参考にさせていただいた記事はこちら。実際の設定方法に関しても、ほぼこちらのページをトレースさせていただきました(感謝デス!)。
これによって、リモートデスクトップを安定的に動かせるようになりました!
初回起動時のクラッシュ
…が、しかし、こんどはまた別の問題が。それは、サーバー側パソコンを起動した直後にリモート接続しようとすると落ちるという事象が発生。やれやれですねw
あくまで落ちるのは一番始めの起動時のみであり、再度x11vncを立ち上げると問題なくつながることから、自動起動の設定の問題と判断。以前のリモートデスクトップの記事にも書いたとおり、このx11vncに対しては下記のようなシェルスクリプトを使って自動起動させるような設定にしていたのですが、おそらくここの問題です。
x11vnc -forever -display :0 -rfbauth ~/.x11vnc/passwd
おそらくシステムの起動のタイミングとx11vncの起動のタイミングで何か上手く行かないところがあったりする(依存関係上必要なプログラムがx11vncよりあとに起動してしまっている等)のかなぁと思い、応急処置として、このスクリプトの先頭に
sleep 10;
を追加したらうまく起動出来るようになりました。しかしまあ、これだと根本的な解決にはなっていないですし、なんとなくスマートじゃないのでもう少し改良します。
Systemdによる管理
考え方は以前vpnを設定したときと同じですが、このx11vncも「daemon化」してLinuxのsystemdによる管理になるように設定します。どうでも良いことですが、deamon(デーモン:守護神)ってなんとなく中二病っぽくていいですよねw
まずは下記の場所にサービスファイルを作成・編集します。
$ sudo vim /etc/systemd/system/x11vnc.service
編集内容は
[Unit]
Description=x11VNC
After=multi-user.target network.target graphical.target
[Service]
Type=simple
Restart=always
ExecStart=/usr/local/bin/x11vnc -forever -auth guess -loop -noxdamage -repeat -rfbauth /etc/x11vnc.passwd -display :0
[Install]
WantedBy=multi-user.target
こんな感じ。色々と試してみましたが、[Unit]のAfterの部分に「malti-user.target」、「network.target」「graphical.target」を追加すれば初回起動時のクラッシュは防げるようです。ちなみに、この[Unit]のAfterに記載しているのは、起動時のブート順位であり、このサービスを起動するのはAfterの処理が終わってからだということを指定するためのものです。やはり、初回起動時のクラッシュは起動順位の問題だったようですね。
ちなみにこれを動かすためには、x11vncのパスワードを/etc/x11vnc.passwdに格納している必要があるので注意ですね。
また、systemd管理にするメリットの一つは、何かが原因でクラッシュした際に自動的に再立ち上げしてくれるところですね。具体的には[Service]のRestartに「always」を指定することで、何かしらの理由でソフトが落ちたときも自動で再起動してくれます。
まとめ
今回はサーバーマシンのリモートデスクトップソフトとして使っている「x11vnc」の設定改良を行いました。aptからのインストールに慣れていると、ソースコードからのビルドはなかなかハードルが高いですが、参考になる情報があったので割とさくっと設定できました。こういうのはありがたい限りですね。
冒頭にもちらっと書きましたが、今回x11vncをsystemdの管理下においたのは、次回以降の布石だったりしますw おそらく、3記事ぐらいに分割することになるそこそこ大規模な企画だったりします。またこれまでとは少し違った方向性なので、楽しみにしていただければと思います!
それでは、また!