# 登入ThinLinc 互動式繪圖節點和操作範例說明
[TOC]
## ThinLinc Client 工具安裝和連線說明
::::success
1. 請依照您用來連線的個人電腦(或筆記型電腦)作業系統版本(Windows, Linux或macOS),先下載與安裝合適的ThinLinc Client軟體於您的個人電腦。
軟體下載網址為:https://www.cendio.com/thinlinc/download。

2. 開啟 ThinLinc Client。

(本文件將以Windows作業系統環境為範例,在ThinLinc Client軟體安裝完畢之後,即可開啟ThinLinc Client連線程式。)
3. 請先點選Options按鈕,調整預設。

3.1. 點選Display分頁,勾選++Windowed++,點選++OK++。

3.2 點選Security分頁,預設++22為SSH Port++,點選++OK++。

3.3 點選Advanced分頁,在Reconnect policy中選取++Always ask how multiple sessions should be handled項目++。

4. 輸入Server IP、主機帳號、2FA認證 ,按下 Connect。
> Server:nano5.nchc.org.tw
> Username: 輸入“<unix_account>”(iServcie主機帳號)
> Password: 2 (輸入1~3。選擇2FA的其中一種方式登入)

:::info
延伸2FA的三種登入方式
:fast_forward:選擇 1. Mobile APP OTP
手機IDEpert軟體會出現登入請求,點擊左下角選項’OPT’,輸入你看到的驗證碼,按enter完成認證。
:fast_forward:選擇 2. Mobile APP PUSH
手機IDEpert軟體會出現登入請求,點擊左下角選項’推播’後,點擊:heavy_check_mark:完成認證
:fast_forward: 選擇 3. Email OTP
信箱會有"登入驗證碼通知信",輸入你看到的驗證碼,按enter完成認證。
:::
4.1 若2FA輸入1或是3,則需要輸入OTP,點選OK。

4.2 若2FA輸入2則需要輸入主機密碼,點選OK後手機需要點擊’推播’。

5. 開啟互動式節點的桌面環境
點擊"Activities",點擊"Terminal",即可開啟終端機。

::::
## 前情提要
::: info
(1)完成ThinLinc連線之後,接下來請點擊"Forward"。
如果點擊"Quit",將會關掉連線,重新打開ThinLinc Client進行連線即可。

(2)點擊"Start"

(3)閒置過久會被桌面登出,按鍵盤上任一按鍵,和重新輸入您的主機密碼,即可登入桌面。
:::
## 範例一、阻尼振盪器觀看位移的變化
此範例可透過ThinLinc GUI 桌面環境執行它,使用滑桿即時調整「質量 m」「彈力 k」「阻尼 c」,並看到振盪變化。
:::success
1. 打開thinlink的terminal
2. 建立環境
a. 建立一個資料夾,獨立放相關資料。
b. 在此環境需要安裝pyqt matplotlib scipy numpy,建議使用miniconda的方式安裝,並針對不同的使用環境建立專門的環境,盡量避免在同一個環境下安裝大量的tools。
```
[user@cbi-lgn01 ]$mkdir oscillator && cd oscillator
[user@cbi-lgn01 oscillator]$ml load miniconda3
(base)[user@cbi-lgn01 oscillator]$conda create -n oscillator_gui -c conda-forge pyqt matplotlib scipy numpy -y
...
# To activate this environment, use
# $ conda activate oscillator_gui
# To deactivate an active environment, use
# $ conda deactivate
#base轉換成剛剛建立的環境oscillator_gui
(base)[user@cbi-lgn01 oscillator]$conda activate oscillator_gui
#列出已經建好的conda環境,曾經建立過的吳需重建,直接activate即可。
(base) [u5846412@cbi-lgn01 ~]$ conda env list
# conda environments:
#
oscillator_gui /home/u5846412/.conda/envs/oscillator_guii
base * /work/HPC_software/LMOD/miniconda3/miniconda3_app/24.11.1
#執行範例 顯示於底下的note
(oscillator_gui)[user@cbi-lgn01
oscillator]$python damped_oscillator_gui.py
```
3. 顯示oscillator_gui畫面
可拖動滑桿改變質量(m)、阻尼(c)和彈力(k)。
會即時看到從振盪 → 臨界 → 阻尼的變化。

:::info
:spiral_note_pad: damped_oscillator_gui.py 範例
(oscillator_gui)[user@cbi-lgn01 oscillator]$vi damped_oscillator_gui.py
```
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from scipy.integrate import odeint
from PyQt5.QtWidgets import (
QApplication, QVBoxLayout, QHBoxLayout, QWidget,
QSlider, QLabel, QGroupBox
)
from PyQt5.QtCore import Qt
# 定義阻尼簡諧震盪方程
def damped_oscillator(y, t, m, c, k):
x, v = y
dxdt = v
dvdt = -(c / m) * v - (k / m) * x
return [dxdt, dvdt]
# GUI 主視窗
class OscillatorGUI(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("🔁 Damped Harmonic Oscillator Viewer")
# 預設參數
self.m, self.c, self.k = 1.0, 1.0, 1.0
self.t = np.linspace(0, 20, 1000)
# 建立圖表
self.figure, self.ax = plt.subplots()
self.canvas = FigureCanvas(self.figure)
# 介面佈局
layout = QVBoxLayout()
layout.addWidget(self.canvas)
layout.addLayout(self.create_sliders())
self.setLayout(layout)
self.update_plot()
def create_sliders(self):
layout = QVBoxLayout()
# 建立單一滑桿區塊
def create_slider(label_text, init_val, callback):
box = QGroupBox(label_text)
hbox = QHBoxLayout()
label = QLabel(f"{init_val:.2f}")
slider = QSlider(Qt.Horizontal)
slider.setMinimum(1)
slider.setMaximum(100)
slider.setValue(int(init_val * 10))
slider.valueChanged.connect(lambda v: [label.setText(f"{v/10:.2f}"), callback(v / 10)])
hbox.addWidget(slider)
hbox.addWidget(label)
box.setLayout(hbox)
return box
layout.addWidget(create_slider("質量 m", self.m, self.set_m))
layout.addWidget(create_slider("阻尼 c", self.c, self.set_c))
layout.addWidget(create_slider("彈力 k", self.k, self.set_k))
return layout
def set_m(self, val):
self.m = val
self.update_plot()
def set_c(self, val):
self.c = val
self.update_plot()
def set_k(self, val):
self.k = val
self.update_plot()
def update_plot(self):
self.ax.clear()
y0 = [1.0, 0.0]
sol = odeint(damped_oscillator, y0, self.t, args=(self.m, self.c, self.k))
self.ax.plot(self.t, sol[:, 0], label="x(t) displacement", color='blue')
self.ax.set_title(f"Damped Oscillator (m={self.m:.2f}, c={self.c:.2f}, k={self.k:.2f})")
self.ax.set_xlabel("Time")
self.ax.set_ylabel("Displacement")
self.ax.grid(True)
self.ax.legend()
self.canvas.draw()
# 主程式
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = OscillatorGUI()
window.resize(800, 600)
window.show()
sys.exit(app.exec_())
```
:::
## 範例二、安裝Panoply工具,觀看地表每月平均降水量變化。
Panoply 是 NASA 出品的 NetCDF、HDF5、 GRIB 資料可視化 GUI 工具。
:::::success
1. 打開thinlink的terminal
2. 建立環境
a. 建立一個資料夾,獨立放相關資料。
b. 在此環境需要安裝pyqt matplotlib scipy numpy,建議使用miniconda的方式安裝,並針對不同的使用環境建立專門的環境,盡量避免在同一個環境下安裝大量的tools。
```
[user@cbi-lgn01 ]$
[user@cbi-lgn01 ]$mkdir panoply && cd panoply
[user@cbi-lgn01 panoply]$ml load miniconda3
# 建立 conda 環境並安裝 openjdk=11
(base)[user@cbi-lgn01 panoply]$conda create -n panoply_gui -c conda-forge openjdk=11 -y
...
# To activate this environment, use
# $ conda activate panoply_gui
# To deactivate an active environment, use
# $ conda panoply_gui
#base轉換成剛剛建立的環境panoply_gui
(base)[user@cbi-lgn01 panoply]$conda activate oscillator_gui
#列出已經建好的conda環境,曾經建立過的吳需重建,直接activate即可。
(base) [u5846412@cbi-lgn01 ~]$ conda env list
# conda environments:
#
panoply_gui /home/u5846412/.conda/envs/panoply_gui
base * /work/HPC_software/LMOD/miniconda3/miniconda3_app/24.11.1
# 若尚未安裝PanoplyJ於晶創主機,可以下滑至底下的note來執行安裝。
(panoply_gui)[user@cbi-lgn01 panoply]$./panoply.sh
#成功的話,就會透過 ThinLinc 跳出 Panoply 的 GUI 視窗。
```
:::info
:spiral_note_pad:互動式繪圖節點上無法直接安裝PanoplyJ
1.先下載PanoplyJ-5.3.1.tgz打包檔到本地端,再透過[資料傳輸節點(點擊教學連結)](https://man.twcc.ai/@AI-Pilot/SkDyJN4Gkl)的教學方式將檔案上傳到晶創主機的家目錄底下。
\$wget https://www.giss.nasa.gov/tools/panoply/download/PanoplyJ-5.3.1.tgz
2.再到晶創主機中,找到檔案進行解壓縮(建議放置於你一開建立的資料夾中)
(panoply_gui)\[user@cbi-lgn01 panoply]$tar zxvf PanoplyJ-5.3.1.tgz
\#看到PanoplyJ的資料夾。
(panoply_gui)\[user@cbi-lgn01 panoply]$ cd PanoplyJ
\#有panoply.sh的執行檔。
(panoply_gui)\[user@cbi-lgn01 panoply]$ ls
./panoply.sh
:::
3. 開啟檔案,顯示precip in chirps-v2.0.monthly畫面
1.Open可用的.nc檔案

2.選擇2D的data,點擊'Create Plot',選擇'Create'。

3.調整日期即可觀看地表每月的平均降水量。

:::info
:spiral_note_pad:此範例是來自美國加州大學聖塔芭芭拉分校(UCSB)氣候危機中心(Climate Hazards Center, CHC)所發布的資料。
(panoply_gui)\[user@cbi-lgn01 panoply]$ wget -c https://data.chc.ucsb.edu/products/CHIRPS-2.0/global_monthly/netcdf/chirps-v2.0.monthly.nc
若有自己的檔案,也可以透過[資料傳輸節點(連結)](https://man.twcc.ai/@AI-Pilot/SkDyJN4Gkl)的教學方式將檔案上傳到晶創主機目錄底下。
若有興趣想要下載nasa檔案,可自行註冊後,下載所需資料,並上傳到晶創主機,即可看到相關圖型。
https://modis.gsfc.nasa.gov/data/

:::::