VNCを使って、Lubuntu 18.04をリモート操作する

私のように、デスクトップ型PCを買ってしまった人は、一度はこの問題に直面してしまうのではないだろううか。それは、「テレビも見たいけど、パソコンでしなければいけないことがある。」である。この問題は、パソコンをおいた部屋にテレビがあるか、テレビのあるリビングにパソコンがあれば問題ないが、私のように、パソコンとテレビを別々の部屋においてしまった人は、この問題はいささか重要なものであろう。

そこで、VNCを利用して、Lubuntu 18.04をリモートで操作してみることにした。リモートで操作できれば、パソコンの目の前にいなくても、パソコンを操作することができるはずだ。

リモート接続に関する解説は検索すれば多くがヒットするものの、それらはほとんど、Ubuntuのものであり、GNOMEの設定を利用したものが多く、Lubuntuで実現できない解説が多く、結果手探りという形になってしまった。よって、私が手探りで得たやり方を、ここに書き記しておくことにする。

#そもそも VNC ってなんだろう?
「Virtual Network Computing」という、リモートデスクトップソフトのことらしい。詳しい説明を書くと量が多そうなので、気になる人は、検索してみてほしい。とりあえず、Wikipediaのページを貼っておくことにする。
[・Wikipedia "Virtual Network Computing"](https://ja.wikipedia.org/wiki/Virtual_Network_Computing)

#まずはセットアップ
今回は、「vnc4server」パッケージを利用することにした。なぜこのパッケージかというと、他に比べて複雑な設定がなく、比較的簡単に利用できる(と、個人的に思った)からだ。

##リポジトリの追加
まず、Lubuntuの、「ソフトウェアとアップデート」から、「universe」リポジトリからのダウンロードを有効にする必要がある。
メニューの、「設定」の、「ソフトウェアとアップデート」を開き、「コミュニティによってメンテナンスされるフリー/オープンソースソフトウェア (universe)」にチェックを入れ、「終了」を押そう。
「利用可能なソフトウェアの情報が古くなっています。」と表示されたら、「再読込」で、更新する。

##インストールしてみる
では、リポジトリの設定が終わったので、パッケージ「vnc4server」をインストールしてみる。 
インストールはとても簡単だ。aptですぐにインストールできる。

```shell
sudo apt install vnc4server
```

これだけでインストールは完了。

#早速使ってみる。
ここからは、接続される側を「サーバ」、接続する側を「クライアント」と呼ぶことにする。

##サーバ側の設定
インストールが完了したら、以下のコマンドを入力するだけで実行できる。

```shell
vncserver :1
```

このコマンドを実行すると、パスワード設定することになる。パスワードを求められるので、6文字以上、8文字以下のパスワードを設定する。
これだけ。あとは、サーバ側のIPアドレスをメモしておく。IPアドレスを調べるには、ipコマンドを利用するのが一般的だが、Lubuntuの場合、パネルの右下の、接続アイコンをクリックし、「接続情報」を押せば、簡単に見ることが出来る。

##クライアント側の設定
クライアントソフトは、とりあえずなんでもよい。ソフトによって、設定方法が異なるので、**ここではクライアント側の設定は割愛させていただくことにする。**
ただ、多くのクライアントソフトは、IPアドレスと、ポート番号、そして、パスワードを入力するようになっているはずだ。IPアドレスには、先程調べたものを入力する。また、ポート番号には、「**5901**」を指定しよう。そして、先程決めたパスワードを入力する。

#では、使ってみよう。
上記の手順を実行し、クライアント側で接続すると...

![SubXWindow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648261/42d3f161-4272-f8f5-6333-98ba30d4312b.png)


このように、灰色の背景に、マウスカーソルと、「VNC config」というウィンドウがある画面が表示される。
どうやら、サーバー側の画面が複製されるわけではなく、クライアントはクライアントで別の画面が用意されるようだ。同じユーザーに、別々の画面からログインするといった具合であろうか。(違うかもしれない、よくはわからないが。)

##パネルを起動
この一見何もなさそうな状態からどうするのかというと、実は、もうすでに、OpenBoxウィンドウマネージャーが起動しており、ある程度のことはできる。ただし、ちょっぴり使いづらいので、パネルを起動して、アプリの起動や切り替えが楽になるようにしてみる。
画面上の適当な場所を右クリックすると、
![OpenBoxMenu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648261/fd046b03-cdd4-d01c-80ab-c850eabf4180.png)
このように、アプリケーションを起動できるメニューが出現する。そこで、一番上の「Terminal emulator」を選択する。すると、デフォルトの端末が起動するので、

```shell
lxpanel
```

で、パネルを起動する。すると、
![lxpanel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648261/51a5b606-0cff-11e7-d4a6-7863aafd8d9d.png)

このように、パネルを起動することができた。

#使い終わったら
使い終わったら、クライアント側で切断したあと、サーバ側で端末を開き、以下のコマンドを入力する。

```shell
vncserver -kill :1
```

これで、vncserverは停止される。

#次回以降使うとき
次回以降は、また同じような手順で接続すればよい。ただし、パスワードは再設定する必要はないので、vncserver :1と入力するだけですぐにサーバは起動する。

#セキュリティのためのヒント
##サーバ側の画面をロックしておく
リモート接続している間は、サーバー側の画面は使わないだろう。よって、サーバ側の画面をロックしておくことをおすすめする。サーバ側をロックしてしまっても、クライアント側に表示されている画面はロックされず、動いたままなのでそのまま利用できる。サーバ側で、メニューから、「ログアウト」を押し、「スクリーンのロック」で画面ロックしておこう。
##たまにパスワードを変える
パスワードはあとからでも変更可能。

```shell
vncpasswd
```
これを入力すると、パスワードを尋ねられるので、再度設定すれば変更完了だ。

#おまけ
##画面サイズを変える
デフォルトのままでは、画面の比率は4:3であり、また、画面も小さめであるため、狭く感じるだろう。よって、画面サイズを適切なものに変更することができる。

###起動時に指定する
最も簡単な方法は、起動時に、「-geometry」オプションを指定することだ。このオプションは、以下のように使う

```shell
vncserver -geometry 1920x1080 :1
```

このようにすると、画面サイズを1920 x 1080に設定可能だ。
ちなみに、「1920x1080」の、「x」は、アルファベットの「エックス」である。

ただし、この方法では、毎回オプションを設定する必要があるため、少々面倒だ。
よって、一時的ではなく、恒久的に変更する方法もある。

###デフォルトの起動時の画質を変更する
まず、既存のvncserverの動作を終了しておく。
root権限で、テキストエディタを開き、「/usr/bin/vncserver」を開く。このファイルはPerlで記述されており、標準的なテキストエディタで簡単に編集することが可能だ。

ファイルを開くと

```perl:vncserver
$geometry = "1024x768"
```

のような行がある。その行を、例えば、横1280、縦720のサイズにする場合、以下のように書き換える。

```perl:vncserver
$geometry = "1280x720"
```

これで、再度サーバをスタートさせ、接続すれば、画面サイズが変わっているはず。

##日本語入力をする
まず、ログイン中であれば、一旦ログアウトする。
Lubuntuでログインする前に、セッションとして、Lubuntuではなく、Openboxを指定する。ログイン画面上部のバーに、Lubuntuのロゴのマークがあると思うが、あれをクリックすると、選択肢が出てくる。あの中から、「Openbox」を選択してからログインする。しばらくすると、何もないデスクトップが表示されるので、右クリックして、「Terminal emulator」を押して、端末を起動したら、今までと同じように、vncserverをスタートさせる。
クライアント側において、まず、今まで通り、端末エミュレータを起動したら、

```shell
lxpanel &
fcitx
```

を行う。これにより、半角/全角を押すか、サポートされていない環境では、パネルのトレイに常駐しているFcitxアイコンをクリックすることで、日本語入力が可能である。

ちなみに、実は、Fcitxは、Flatpakアプリケーションとの相性が悪く、一部のFlatpakアプリケーションでは、Fcitxによる日本語入力ができない。そのため、IBusが利用できないかやってみたものの、VNC上では、残念ながらIBusは起動はするも、機能しなかった。

#最後に
これを利用すれば、パソコンの前にいなくても、パソコンを操作できるようになる。スマートフォンや、ノートパソコンなどで接続すれば家中色んな場所で一つのPCを操作できる。ちょっと工夫が必要かもしれないが、これらは強力なツールとなるだろう。