Raspberry Pi 4 + Ubuntu 19.10 server + X2Goで快適リモートデスクトップを実現してみた.

先日入手したRaspberry Pi 4 Model B (4GBメモリ)の性能は,本学学生の必携パソコンに求められる条件を(OS,メモリを除き)ほぼ満足しています.少し手を加えれば安価なLinuxサーバを自作することも可能だと思い,Ubuntu 19.10 server + X2Goをインストールしてリモートデスクトップ環境を実現してみました.本稿は,その過程を備忘録としてまとめたものです.他の環境での動作を保証するものではありませんので,予めご了承ください.

謝辞 本作業を進めるにあたり,日経Linux2020年3月号の特集記事「ラズパイ4のすべて」他,インターネット上の多くの情報を参考にさせていただきました.

目次

  1. ハードウェア
  2. 準備
  3. インストール
    1. イメージファイルの書き込み
    2. MicroSDカードから起動
    3. キーボードの設定
    4. ネットワークの設定
    5. システムの更新
    6. デスクトップ環境のインストール
    7. 日本語環境の設定
    8. X2Goのインストール

 

ハードウェア

  • Raspberry Pi 4 Computer Model B (4GB RAM)
  • MicroSDカード(64GB)
  • MicroSDアダプタ
  • HDMI-MicroHDMI変換コネクタ
  • USB-CーUSB-Aケーブル(給電用)
  • LANケーブル
  • USBキーボード
  • USBマウス
  • モニタ
  • ケース(なくてもよい)

 

準備

  • ラズパイ4の電源供給用USB-CコネクタとMicroHDMIコネクタとは隣接していて,一般的なUSB-CケーブルとHDMI変換コネクタでは互いに干渉してしまいました.そのため,HDMI変換コネクタをカッターナイフで削る作業が必要となりました.
  • MicroSDカードのフォーマットはFAT32形式です.私はmacOS付属のDisk Utilityで行いましたが,後で紹介するアプリRaspberry Pi Imagerでも可能です.
  • HDMI-MicroHDMI変換コネクタやUSB-CーUSB-Aケーブル,LANケーブルは100円ショップで入手可能です.

 

インストール

  • イメージファイルの書き込み
    • Raspberry Pi財団のウェブサイト からRaspberry Pi Imagerを入手.私の場合は,macOS用をダウンロード・インストールして使いました(他に,Windows用,Linux用があります).
    • Raspberry Pi Imagerを使って,MicroSDカードにUbuntu 19.10 server (64bit)のイメージを書き込みました.以前のようにddコマンドを使う必要が無くなりました.これは朗報です.
    • ただし,私の環境では起動時にHDMIディスプレイが認識されませんでしたので,イメージファイルと同じ場所に存在する設定ファイルuserconfig.txtの中に以下の行を追加しました(参考:日経Linux 2020年3月号,p. 78).

    hdmi_force_hotplug=1

    hdmi_group=2

    hdmi_ignore_edid=0xa5000080

    hdmi_mode=82

  • MicroSDカードから起動
    • イメージファイルを書き込んだMicroSDカードをラズパイ4に挿して起動させます.
    • ユーザ名「ubuntu」,パスワード「ubuntu」でログインすると,パスワードの変更が求められますので,設定します.

 

  • キーボードの設定
    • デフォルトではキーボード設定は英語になっています.ネットワークの設定でvimエディタを使うので「:」の位置を修正しておく必要があり,先にキーボードの設定を変更しておきました.

    sudo dpkg-reconigure keyboard-configuration

    • 設定画面が表示されたら,日本語環境を設定して,再起動

 

 

  • システムの更新
    • ようやくネットワークが接続されたので,ここでシステムを最新の状態に更新

    sudo apt update

    sudo apt dist-upgrade

  • デスクトップ環境のインストール
    • 普段使っているデスクトップ環境Xfceをインストールしました.

    sudo apt install xfce4

  • 日本語環境の設定
    • 日経Linux 2020年3月号,p. 87に従って,ロケールを「jp_JP.UTF-8」を設定し,タイムゾーンをTokyoに設定.再起動すると,デスクトップ画面が現れます.
    • システムのアップデートを行った後,日本語入力も設定しておきました.
  • sudo apt update
    sudo apt upgrade
    sudo apt install fcitx-mozc

  • X2Goのインストール

    sudo apt-add-repository ppa:x2go/stable
    sudo apt update
    sudo apt install x2goserver x2goserver-xsession

    • 手元のPCでクライアントを起動し,うまく接続されれば成功です.

Screen Shot 2020-04-03 at 9.21.21

本研究室の研究成果が公開されました.

残念ながら新型コロナウィルスの感染拡大を受けて中止となりましたが,日本機械学会北陸信越支部第57期総会・講演会および日本機械学会北陸信越学生会第49回学生員卒業研究発表講演会の講演論文が公開されました.

【日本機械学会北陸信越学生会第49回学生員卒業研究発表講演会】

  • 後藤 啓太・中山 勝之・大嶋 元啓・坂村芳孝,“OpenFOAMを用いた衝撃波に誘起される物体運動の数値シミュレーション” 日本機械学会北陸信越学生会第49回学生員卒業研究発表講演会講演論文集(2020)
  • 中野佑亮・大嶋 元啓・坂村芳孝,“大気圧誘電体バリア放電プラズマ流れにおける窒素分子の放射特性に関する研究” 日本機械学会北陸信越学生会第49回学生員卒業研究発表講演会講演論文集(2020)

【日本機械学会北陸信越支部第57期総会・講演会】

  • 坂村芳孝・中山 勝之・大嶋 元啓・後藤 啓太,“伝播する衝撃波によって誘起される剛体の運動” 日本機械学会北陸信越支部第57期総会・講演会講演論文集(2020)

 

流体工学シンポジウム2019で研究成果を発表しました。

2019年12月14日(土)、富山県立大学で開催された流体工学シンポジウム2019(主催:北陸流体工学研究会)におきまして、本研究室の研究成果を発表しました。

  • 演題:重合格子法によるブラフボディと衝撃波との干渉の数値計算
  • 著者:後藤啓太(登壇者)、中山勝之、大嶋元啓、坂村芳孝

 

IMG_0292

 

32nd International Symposium on Shock Wavesで研究成果を発表しました.

2019年7月14日〜19日の間シンガポールで開催されている32nd International Symposium on Shock Wavesにおいて,本研究室の研究成果を発表しましたので,ご報告します.

熱力学こぼれ話

本日の講義「エネルギー変換工学」の中で,以下の熱力学関係式を使いました.

T = \left( \frac{\partial H}{\partial S} \right)_p \qquad \cdots (1)

ここで,Tは温度,Hはエンタルピー,Sはエントロピー,pは圧力です.授業後に回収した大福帳(コミュニケーションカード)に質問があったので,式(1)の導出過程を示しておきます.

まず,エンタルピーは状態量ですから2つの状態量の関数となります.ここでH=H(S, p)とみなせば,その全微分は

\mathrm{d}H = \left( \frac{\partial H}{\partial S}\right)_p \mathrm{d}S + \left( \frac{\partial H}{\partial p}\right)_S \mathrm{d}p \qquad \cdots(2)

と表すことができます.一方,熱力学の第1法則から,

\mathrm{d}H = T \mathrm{d}S + V \mathrm{d}p \qquad \cdots (3)

が成り立ちます.ここで,Vは体積です.

式(2)と(3)の右辺を見比べてみれば,式(1)ならびに

V = \left( \frac{\partial H}{\partial p} \right)_S \qquad \cdots (4)

が成り立つことがわかります.

ところで,式(1)をみると,示量性状態量Hを示量性状態量Sで微分したものは示強性状態量Tになっていることがわかりますね.一方,式(4)からは,示量性状態Hを示強性状態量pで微分したものが示量性状態量Vになることがわかります.だから何だと言われればその通りなのですが,何かのときに役立つかもしれませんww.

上述した示強性状態量と示量性状態量の関係性は,原島鮮先生の教科書「熱力学・統計力学(改訂版)」培風館(1978),p. 78に紹介されています.この本には他にも多くのユニークな「こぼれ話」が紹介されていて,まるで講義を聴いているように読み進めることができる,お薦めの教科書です.

Juliaに傷心(ハートブレイク)

2019年5月18日(土)に富山CiCビルで開催された第72回オープンCAE勉強会@富山で,プログラミング言語Juliaに関する話題提供を行いました.その内容をざっくり纏めてみましたので,ご紹介します.

報告内容

  • Juliaとは?
  • Juliaのインストール
  • Jupyterでの利用
  • Pythonとの速度比較(暫定版)
  • まとめ

Juliaとは?

Juliaは2012年に発表された新しいプログラミング言語であり,個人的には次のような特徴が気に入っています.プログラミングの導入教育には最適だと考えられます.

  • Python同様動的型付け言語だが,静的型付け言語に迫る実行速度を持つらしい.
  • 計算実行時にコンパイルするJIT(Just-In-Time)コンパイラを採用しており,PythonやRuby等のインタプリタと同じように簡単に利用できる.
  • Python同様,Jupyterをインターフェイスとして利用できる.

Juliaのインストール

公式サイトで各種OS用のインストーラが配布されています.私はmacOS版を手元のMacBookにインストールして使っています.

Mac版Juliaは,通常のアプリケーションとして登録されますので,ダブルクリックするとターミナル上でREPL (Read-Eval-Print Loop)環境が動作します.パッケージの追加・アップデートはこの環境で行うことができます.さらに,”?”をつけてコマンド等を入力すると詳しいヘルプ画面が表示されます.

Jupyterでの利用

私にとって最大のJuliaの魅力は,Jupyter notebookやJupyter lab上で実行できることです(そもそもJupyterの”Ju”はJuliaを指しているらしいので,当たり前と言えば当たり前ですが).

既にJupyterがインストールされていれば,Jupyterとの連携は簡単です.私の環境(Mac+Anaconda)の場合,JuliaのREPL環境で”]”をタイプしてpkgモードにした後,次のようにしてIJuliaパッケージをインストールすれば,Jupyterのカーネル・リストにJuliaが追加され,利用できるようになりました.

(v1.1) pkg> add IJulia

Pythonとの速度比較(暫定版)

Pythonプログラムと,それをJuliaに移植したプログラムとで計算速度の比較を行ってみました.

計算対象は,Barba先生のCFD-Python Step 5で取り上げられている2次元線形移流方程式

\displaystyle {\partial u \over \partial t}+c{\partial u \over \partial x} + c{\partial u \over \partial y}=0

の差分近似

\displaystyle u^{n+1}_{i, j} = u^{n}_{i, j} - c \Delta t \left( {u^n_{i, j}-u^n_{i-1, j} \over \Delta x} + {u^n_{i, j}-u^n_{i, j-1} \over \Delta y} \right)

です.これを以下の初期条件,境界条件の下で解いてみました.

初期条件:

u(x, y, 0) = \left\{ \begin{array}{c} 2 \quad \mbox{for} \quad 0.5 \leq x, y \leq 1 \\ 1  \quad \mbox{for everywhere else} \end{array} \right.

境界条件:

u(x, y, t) = 1 \quad \mbox{for} \left\{ \begin{array}{c} x=0, 2 \\  y=0, 2 \end{array} \right.

空間の分割数はx, y方向ともに80分割(n_x=n_y=81)で,100タイムステップn_t=100の計算にかかる時間を計測しました.

CFD-Pythonのコードのコア部分は以下のようなものです.

for n in range(nt + 1):
un = u.copy()
for j in range(1, ny):
      for i in range(1, nx):
           u[j, i] = un[j, i] – c * dt*( (un[j, i] – un[j, i – 1])/dx+ (un[j, i] – un[j – 1, i])/dy)

これをJuliaに移植すると

for n in 1:nt
     un = copy(u)
     for i in 2:nx-1
          for j in 2:ny-1
               u[i, j] = un[i, j] – c * dt*((un[i, j]-un[i-1, j])/dx+(un[i, j]-un[i, j-1])/dy)
               u[1, j] = 1
               u[nx, j] = 1
          end
          u[i, 1] = 1
           u[i, ny] = 1
     end
end

シンプルで,初心者にも分かり易いコードだと思います.このコードで計算した結果,Pythonコードでは2.5 s程度掛かっていた時間がJuliaコードでは0.41 sに短縮され,6倍程度高速になりました.

元になったPythonコードの計算過程も分かり易いのですが,3重のfor-loopで書かれていて,ものすごく遅いため,普段Pythonを使っている人は配列操作(Array Operation)を用いるようです.実際,CFD-Pythonでも配列操作を利用するコードが紹介されていて,こちらで計算すると6 ms程度で計算が終了しました.私が書いたJuliaコード(3重のfor-loopを用いたもの)の60倍以上のスピードが出ています(速い!).

せっかくJuliaを使ったのに配列操作を使ったPythonに惨敗という結果になりまして,傷心気味だったのですが,@ceptreeさんの記事「Juliaの速さを体感する」を見つけ,メインループの関数化を試みたところ,Juliaでの計算時間を0.14 sにまで短縮することができました.それでもなお,配列操作を使ったPythonコードにスピードでは圧倒的に負けていますので,引き続き,Juliaの高速化について調べてみたいと思っています.

まとめ

  • Juliaはシンプルで使いやすい(あくまでも,個人の感想です).
  • Jupyterをインターフェイスとして使用できる.
  • Juliaはfor-loopを使ったPythonよりは速いが,配列操作を使ったPythonより遅かった.(引き続き,検討予定)
  • Juliaでは,関数内にfor-loopをまとめると計算速度が向上する.

OpenFOAM6をMacにインストールしてみました.

The OpenFOAM foundation Ltd.によって配布されているOpenFOAM 6を手元のMacにインストールしてみました.ESI-OpenCFD版と同様Dockerで配布されていますが,コンテナから直接ParaViewが使えて,超便利です!😆

OpenFOAM 6 for Macのイントールはこちらから

追記:コンテナから直接ParaViewが使えるのですが,私の使用環境(MacBook)では動作が遅くて,使いものにはなりませんでした.Mac版ParaViewから操作する方が快適でした.😅

本研究室の研究成果が国際会議プロシーディングスに掲載されました.

われわれの研究成果が国際会議プロシーディングスに掲載され,オンラインで公開されました。

Sakamura Y., Oshima M., Nakayama K., Motoyama K. (2019) Shock-Induced Motion of a Spherical Particle Floating in Air. In: Sasoh A., Aoki T., Katayama M. (eds) 31st International Symposium on Shock Waves 2. ISSW 2017. Springer, Cham