●從硬碟或是隨身碟進行開機 多準備一張 micro sd 卡 執行 Raspberry Pi Imager (1.8.5↑) 操作系統選「Misc utility Images→Bootloader(Pi 5 family)→NVMe/USB Boot」 用此張記憶卡開機,等待螢幕變成綠色,那就可以關機了。 然後,放上 USB隨身碟 或 NVMe的硬碟,再開機就可以了。 ●複製目前作業系統與資料 執行 Accessories→SD Card Copier 選取來源與目地,按下Start就可以了。 注意,複製需要許多時間,甚至以天計算。 ●變更密碼 [terminal] passwd ●關機,重新開機 [terminal] sudo poweroff [terminal] sudo reboot ●取得主機名稱 [terminal] hostname ●變更主機名稱 [terminal] sudo raspi-config (從選單中慢慢找) ●取得IP位址 [terminal] hostname -I [terminal] ifconfig ●透過SSH連線 windows→putty raspberry pi os→ssh ip -l pi ●安裝網路印表機 [terminal] sudo apt update [terminal] sudo apt install cups (RPI5 預設已裝) [terminal] sudo usermod -a -G lpadmin pi (RPI5 預設已有) http://localhost:631 Administration→Add Printer→...... ●指令介紹(在 terminal 視窗內) pwd (print working directory) cd ~ (回到家目錄) echo "Hello, world!" > test.txt (輸出到文字檔) cp test.txt /home/pi/....../ (複製單一檔案) cp -r dir1 dir2 (recursive copy) mv file1 file2 (移動或是重新命名) mv dir1 dir2 (移動或是重新命名) cat filename (觀看檔案) more filename (分頁觀看檔案) less filename (分頁觀看檔案) touch filename (建立空檔案) mkdir dirname (建立目錄) rm filename (移除檔案) rm -r dirname (移除目錄) sudo sh (進入系統管理員狀態,輸入 exit 可離開) (檔案權限 user,group,other)(read=4,write=2,execute=1) chmod u+x filename (user 添加 x 權限) chmod 777 filename (rwxrwxrwx) chown root:root filename (變更檔案擁有者) scrot filename.png (螢幕截圖,儲存到 filename.png。在 RPI5 預設的 wayland 底下,會是一張全黑的圖。) grim filename.png (RPI5 預設的 wayland 底下,用此指令截圖,儲存到 filename.png)(jpg好像會有格式問題) sudo apt update (更新清單) sudo apt upgrade (升級軟體) sudo apt install ...... (安裝軟體) sudo apt remove ...... (移除軟體) sudo apt search keyword (搜尋可安裝的軟體) sudo apt autoremove (自動移除未使用的套件) sudo apt clean sudo apt install python3-pkgname (RPI5 用 pip3 install pkgname 常常失敗,改用 apt 安裝才成功) (例如 sudo apt install python3-opencv) wget url (從 http 下載檔案) git clone https://......git (用 git 提取原始碼) ●開機時自動執行程式 sudo geany /etc/rc.local 在 exit 0 之前,加上類似下面這一行的指令,儲存後即可 /usr/bin/python /home/pi/Desktop/a.py & (& 代表背景執行) ※注意,沒有編輯好,可能會導致無法開機 ●將程式自動啟動為服務(較為複雜) [terminal] cd /etc/init.d [terminal] sudo geany jiaje 檔案裡面,前五行不可省略,大小寫也不可錯。 #! /bin/sh ### BEGIN INIT INFO # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO date >> /home/pi/Desktop/jiaje 儲存之後。 [terminal] sudo chmod +x jiaje (這是加上執行權限) [terminal] sudo update-rc.d jiaje defaults (這是加入到清單中) [terminal] sudo update-rc.d jiaje remove (這是從清單中移除) ------ 若是要完整一點的檔案內容,則可參考下面範例 #! /bin/sh ### BEGIN INIT INFO # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO case "$1" in start) echo "Starting jiaje" date >> /home/pi/Desktop/abcdefg-start ;; stop) echo "Stopping jiaje" date >> /home/pi/Desktop/abcdefg-stop ;; *) echo "Usage: /etc/init.d/jiaje {start|stop}" date >> /home/pi/Desktop/abcdefg-other exit 1 ;; esac exit 0
要讓別人能夠輕鬆地通過 composer require
下載你設計的函數庫,你需要將你的函數庫發布到 Packagist 上,這是 Composer 預設使用的包管理倉庫。以下是具體步驟:
確保你的函數庫已經準備好,可以作為一個 Composer package 使用:
Composer 配置檔案:在你的函數庫根目錄下建立一個 composer.json
檔案,這是 Composer 的配置檔案,描述了你的函數庫的基本信息和依賴項。例如:
json { "name": "your-vendor-name/your-package-name", "description": "A short description of your library", "type": "library", "require": { "php": ">=7.4" }, "autoload": { "psr-4": { "YourNamespace\\": "src/" } } }
PSR-4 自動加載:確保你的程式碼使用 PSR-4 自動加載標準,這樣其他人安裝後可以輕鬆使用你的函數庫。
將你的函數庫推送到 GitHub,GitLab 或 Bitbucket 等 Git 代碼托管平台上。
在 GitHub 上為你的函數庫創建一個版本標籤(tag)。Packagist 將自動檢測並更新這個版本。
例如,在 GitHub 上,你可以通過命令行創建一個版本標籤:
bash
git tag v1.0.0
git push origin v1.0.0
現在,其他人可以通過 composer require your-vendor-name/your-package-name
來安裝並使用你的函數庫了。
這樣就完成了!你的函數庫現在可以輕鬆地被其他開發者使用了。
<?php // 設定字體路徑(確保路徑正確) $strFontPath = './NotoSansTC-Regular.ttf'; $strContent="這個是第一行\r\n來到第二行囉,帥吧!\r\n接下來是第三行!呵呵!許蓋功氷。"; $straContent=explode("\r\n", $strContent); // 設定字體大小 $iFontSize = 20; $fMaxWidth=0; $fMaxHeight=0; $iMarginBottom=6; foreach($straContent as $iIndex => $strLine) { // 設置背景矩形的大小 $oTextBox=imagettfbbox($iFontSize, 0, $strFontPath, $strLine); $fMinX=min(array($oTextBox[0],$oTextBox[2],$oTextBox[4],$oTextBox[6])); $fMaxX=max(array($oTextBox[0],$oTextBox[2],$oTextBox[4],$oTextBox[6])); $fMinY=min(array($oTextBox[1],$oTextBox[3],$oTextBox[5],$oTextBox[7])); $fMaxY=max(array($oTextBox[1],$oTextBox[3],$oTextBox[5],$oTextBox[7])); $fTextWidth = $fMaxX-$fMinX; $fTextHeight = ($fMaxY-$fMinY)*1.5; if($fTextWidth>$fMaxWidth) { $fMaxWidth=$fTextWidth; } $fMaxHeight += $fTextHeight + $iMarginBottom; } // 創建一個真彩色的圖片 $oImage = imagecreatetruecolor($fMaxWidth, $fMaxHeight); // 設定背景顏色為白色 $oBackgroundColor = imagecolorallocate($oImage, 255, 255, 255); imagefill($oImage, 0, 0, $oBackgroundColor); // 設定文字的初始位置 $fXLeft = 0; $fYTop = 0; // 定義不同段落的背景顏色 $oBackgroundColors = [ imagecolorallocate($oImage, 255, 228, 225), // 淡粉色 imagecolorallocate($oImage, 240, 255, 240), // 淡綠色 imagecolorallocate($oImage, 224, 255, 255) // 淡藍色 ]; // 在圖片上繪製每行文字及其背景 foreach ($straContent as $iIndex => $strLine) { // 設置背景矩形的大小 $oTextBox = imagettfbbox($iFontSize, 0, $strFontPath, $strLine); $fMinX=min(array($oTextBox[0],$oTextBox[2],$oTextBox[4],$oTextBox[6])); $fMaxX=max(array($oTextBox[0],$oTextBox[2],$oTextBox[4],$oTextBox[6])); $fMinY=min(array($oTextBox[1],$oTextBox[3],$oTextBox[5],$oTextBox[7])); $fMaxY=max(array($oTextBox[1],$oTextBox[3],$oTextBox[5],$oTextBox[7])); $fTextWidth = $fMaxX-$fMinX; $fTextHeight = ($fMaxY-$fMinY)*1.5; $fYTopBase=$fYTop+$fTextHeight*2/3; // 繪製背景矩形 $oBGColor = $oBackgroundColors[$iIndex % count($oBackgroundColors)]; imagefilledrectangle($oImage, $fXLeft, $fYTop, $fXLeft+$fTextWidth, $fYTop+$fTextHeight, $oBGColor); // 繪製文字 $oTextColor = imagecolorallocate($oImage, 0, 0, 0); // 黑色文字 imagettftext($oImage, $iFontSize, 0, $fXLeft, $fYTopBase, $oTextColor, $strFontPath, $strLine); $fYTop+=$fTextHeight+$iMarginBottom; // 調整行距 } // 設定 header,顯示圖片 header('Content-Type: image/png'); // 輸出圖片 imagepng($oImage); // 釋放記憶體 imagedestroy($oImage); ?>