X11を用いてSSH経由でownCloudを（むりやり）同期させる

# はじめに
急にQiitaデビューしたくなったので初投稿です．愛知の隅っこでコンピュータビジョンとか深層学習の研究しています．

リモートサーバのownCloudをSSH経由でなんとか同期したくていろいろ触ってたらできたのでメモです．

## 背景
わが研究グループには深層学習用サーバがサーバルームに置かれており，みんなSSHでログインして使っています．それと同時に，ownCloudのサーバも稼働しています．みんなコードはローカルで書いて，SCPとかSFTPでサーバにアップして学習するのですが，いちいちSCP使ってたらやってられないということでCyberDuckとかYummyFTPとか使って同期しています．

僕はコードをownCloudに置いているので（よくGitを使えと言われています．．Gitも一応使ってます．），ownCloudのクライアントを各サーバに置いているのですが，これX11が動いてるときじゃないと同期されないんですよね．SSH経由だと手動同期が必要になってダルいです……．

ということで，なんとか自動同期できないものか？と思ったところで，あることを思いつきました．

**「もしかしてX11のフォワーディングでownCloudのGUIを開ければ自動同期できる……？」**

ということでやってみました．

## ご注意
深層学習用サーバは学内およびVPN経由でアクセスすることが前提なので，セキュリティについてはあまり深く考えていません．もしご自身の環境でやるときはご注意ください．もっともSSHを使っているので大丈夫だとは思いますが……．

それから，手順だけでなく簡単な説明をつけておきますが，詳細が気になる方はご自身でお調べください（手抜き）．

# 準備すること
サーバにはOpenSSHで接続できること，すでにX11のクライアントが入っていることを前提としています．X11は鯖鞍が逆でややこしいので，SSHで接続するサーバを「リモートホスト」，接続に使うクライアントを「ローカルホスト」と呼ぶことにします．

追加で，次の準備が必要です．

* リモートホスト側でX11Forwardingを有効
* リモートホスト側でowncloud-clientをインストール
* ローカルホスト側のX11サーバ（XQuartz，xmingなど）を用意

## リモートホスト側でX11Forwardingを有効
`/etc/ssh/sshd_config`に`X11Forwarding yes`があることを確認します．

```
$ cat /etc/ssh/sshd_config | grep X11
X11Forwarding yes
X11DisplayOffset 10
```

なければ`sudo vim /etc/ssh/sshd_config`とかで開いて`X11Forwarding yes`を追記しましょう．
追記したら，sshdをリスタートさせておきます．

```
$ sudo service sshd restart
```

これにより，X11フォワーディングが利用できます．X11フォワーディングを用いることで，X11クライアントがGUIアプリケーションを表示するX11サーバを変えることができます．普段ならGUIアプリを起動すると起動したマシンの画面に出てきますが，フォワーディングを用いることでアプリが出てくる画面を変えられるということです．もちろん，アプリケーション自体は起動したマシンで動いています．

## リモートホスト側でowncloud-clientをインストール
もちろんSSH経由でOKです．OSによってはリポジトリの登録が必要なので注意してください．
Ubuntu 14.04/16.04では不要で，インストールするだけでOKでした．

```
$ sudo apt install owncloud-client
```

あいにく他のディストリビューションは手元にないため検証していません，各自で調べてください．
（追記）ほとんどのディストリビューションはここで探せると思います→https://software.opensuse.org/download/package?project=isv:ownCloud:desktop&package=owncloud-client

## ローカルホスト側でX11サーバを用意
フォワーディングするには，受ける側のX11アプリ（サーバ）が必要になります．

そこで，ローカルホストのOS用のX11サーバをインストールします．macOSなら[XQuartz](https://www.xquartz.org/)，Windowsなら[Xming](https://ja.osdn.net/projects/sfnet_xming/)あたりが良いかと思います．



# やりかた
SSHにリモートホストで接続するときに，オプション`-X`をつけます．

```
$ ssh username@remotehost -X
```

これでX11フォワーディングを有効にして接続できます．SSH経由で起動したGUIアプリはすべてローカルホストのX11サーバで起動します．
また，`-X`でできない場合は`-Y`でできることがあります．このとき，接続先をTrustedとして接続するので信頼できないホストに対してこれを行うとセキュアでない場合があります．詳しくはTrusted X11Forwardingとかで調べてみてください．

接続できたら，ownCloudを起動します．コマンドのあとに` &`をつけることでバックグラウンドで動作させます．間違えてつけずにフォアグラウンドでやってしまった場合はCtrl+Zでバックグランドにできます．

```
$ owncloud &
```

初回起動時は，接続先を入力する画面が出てきます．
当然ですが，LAN外のownCloudサーバに接続する場合はリモートホスト側にインターネット接続が必要です．

<img width="811" alt="スクリーンショット 2018-06-11 16.25.38.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/142728/8f067295-a3fb-c054-c550-d9d82b7586c5.jpeg">

アドレスとログインユーザ名とパスワードを入力すると，次のように同期するフォルダやローカルフォルダの選択画面が出ます．

<img width="604" alt="スクリーンショット 2018-06-11 16.26.20.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/142728/22ea957f-56bf-f462-d35c-54ef1122f5d5.jpeg">

設定すれば完了です．この設定は初回のみで，次回以降はパスワード入力のみでOKです．

ちなみに，設定完了画面に「ブラウザで開く」とか「ファイルを開く」というボタンがあると思いますが，クリックするとちゃんとFirefoxとNautilusが開きます（macOSでNautilusを開くとなぜか背景がリモートホストのデスクトップ背景になります）．


# 結果
うまく同期できれば成功です．
ちなみに，ownCloudのウィンドウが消えてしまった場合はもう一度`owncloud &`で開く事ができます．「既に起動しています」と言われますが，return叩けばプロンプトに戻れます．

<img width="807" alt="スクリーンショット 2018-06-11 16.27.59.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/142728/4ba9238a-5996-60e2-6b5a-54d19bf2cb30.jpeg">

また，ポップアップウィンドウも出てきます．たまに消えなくなりますが……．
<img width="366" alt="スクリーンショット 2018-06-11 16.35.13.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/142728/68f64280-4a83-ee46-f8f9-2119ef0eec91.jpeg">

Dropbox等と比較すると同期が若干遅いので，コンフリクトさせないように注意しましょう．


# おわりに
今回はSSH経由でX11のフォワーディングを使ってownCloudを無理やり同期させる方法を紹介しました．これをやりたくていろいろ調べたのはもう半年ほど前なので，現在はもっといいやり方があるかもしれません．コメント等歓迎です．よろしくお願いします．