# 登入ThinLinc 互動式繪圖節點和操作範例說明 [TOC] ## ThinLinc Client 工具安裝和連線說明 ::::success 1. 請依照您用來連線的個人電腦(或筆記型電腦)作業系統版本(Windows, Linux或macOS),先下載與安裝合適的ThinLinc Client軟體於您的個人電腦。 軟體下載網址為:https://www.cendio.com/thinlinc/download。 ![](https://man.twcc.ai/_uploads/B1hN8inSee.png) 2. 開啟 ThinLinc Client。 ![](https://man.twcc.ai/_uploads/Hkgp3IIrJl.png) (本文件將以Windows作業系統環境為範例,在ThinLinc Client軟體安裝完畢之後,即可開啟ThinLinc Client連線程式。) 3. 請先點選Options按鈕,調整預設。 ![](https://man.twcc.ai/_uploads/rk9sk23Sle.png) 3.1. 點選Display分頁,勾選++Windowed++,點選++OK++。 ![](https://man.twcc.ai/_uploads/BkS1x2nrgl.png) 3.2 點選Security分頁,預設++22為SSH Port++,點選++OK++。 ![](https://man.twcc.ai/_uploads/By1nl22rle.png) 3.3 點選Advanced分頁,在Reconnect policy中選取++Always ask how multiple sessions should be handled項目++。 ![](https://man.twcc.ai/_uploads/BylB8W3nHee.png) 4. 輸入Server IP、主機帳號、2FA認證 ,按下 Connect。 > Server:nano5.nchc.org.tw > Username: 輸入“<unix_account>”(iServcie主機帳號) > Password: 2 (輸入1~3。選擇2FA的其中一種方式登入) ![](https://man.twcc.ai/_uploads/H1juRs3rgl.png) :::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。 ![](https://man.twcc.ai/_uploads/r1CmL3nSxg.png) 4.2 若2FA輸入2則需要輸入主機密碼,點選OK後手機需要點擊’推播’。 ![](https://man.twcc.ai/_uploads/BygOhrn2rgl.png) 5. 開啟互動式節點的桌面環境 點擊"Activities",點擊"Terminal",即可開啟終端機。 ![](https://man.twcc.ai/_uploads/Hyex4Oh3Sel.png) :::: ## 前情提要 ::: info (1)完成ThinLinc連線之後,接下來請點擊"Forward"。 如果點擊"Quit",將會關掉連線,重新打開ThinLinc Client進行連線即可。 ![](https://man.twcc.ai/_uploads/S1LK3iCB0.png) (2)點擊"Start" ![](https://man.twcc.ai/_uploads/SJ23J2ArA.png) (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)。 會即時看到從振盪 → 臨界 → 阻尼的變化。 ![](https://man.twcc.ai/_uploads/r1bqf4fLee.png) :::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檔案 ![](https://man.twcc.ai/_uploads/SyaFd5VIle.png) 2.選擇2D的data,點擊'Create Plot',選擇'Create'。 ![](https://man.twcc.ai/_uploads/rkgXftc48xx.png) 3.調整日期即可觀看地表每月的平均降水量。 ![](https://man.twcc.ai/_uploads/ryzI5cV8ex.png) :::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/ ![](https://man.twcc.ai/_uploads/SyxDIms48ee.png) :::::