發表文章

Ubuntu 24.04 XRDP狀況(黑畫面+閃退)

 我在使用Ubuntu 24.04 XRDP時, 碰到許多問題, 一開始是用遠端桌面連線工具程式連入時, 畫面卡住, 只看到滑鼠遊標變成X, 就是所謂的黑畫面。找了一下, 有人說是將/etc/xrdp/startwm.sh加入以下幾行: unset DBUS_SESSION_BUS_ADDRESS unset XDG_RUNTIME_DIR . $HOME/.profile 一開始, 還管用, 但不久又出狀況, 用遠端桌面連線工具程式連入時, 打完帳號密碼, 就立刻閃退。又找了一下, 網上有人說, 可以在client端的機器, 找default.rdp這個檔案, 把檔案的這行: use redirection server name:i:0 改成 use redirection server name:i:1 試了一下, 可以哦! 連進去了。 但好景不常, 沒幾天, 它自己斷線, 然後就再也連不進去了, 一直閃退!  所以開始和Copilot一起找問題: 1. 先看/etc/xrdp/xrdp.ini, /etc/xrdp/sesman.ini, 沒什麼特別問題 2. 查看/var/log/xrdp-sesman.log, Copilot看完後說: " XRDP session 啟動順利地完成使用者驗證並啟動了 Xorg,但在 window manager 啟動階段卻快速崩潰。這是造成 session 秒斷的主要原因。" 然後它建議我檢查 /etc/xrdp/startwm.sh, 我就直接把這個.sh檔案內容給它看。它回答看起來就是預設的寫法, 依賴/etc/X11/Xsession來啓動桌面環境。並建議我大改/etc/xrdp/startwm.sh, 我覺得不知道在改什麼, 就告訴它, 重開機就可以連進去, 但一段時間後會斷線, 然後就連不進去。於是它要我試試:   2-1 檢查之前連線殘存的lock file     ls -la /tmp/.X11-unix/     ls -la /tmp/.X*-lock   2-2 session是否沒斷乾淨, 可以重開服務     sudo systemctl restart xrdp-sesman   ...

Windows AD裡若有多台DC, 當其中一台出現問題時, 解決過程! (考古文)

 沒錯! 2025年了, 還在用Windows 2003 server的AD網域。所以, 最新版的Windows AD應該已經不會有這些問題了吧! 我不知道! 但是windows 2003的AD, 就已經可以有多台DC, 當然是為了防止單一台主機故障, 我們辛苦一筆一筆建立的使用者帳號就不見了。有了多台DC, 就可以把這些帳號資料同時存在不同的DC, 萬一有一台機器壞了, 還有其他DC保存個這些資料。   那麼平常使用AD帳號登入機器時, 自然也是去DC查詢帳號密碼對不對。是不是多台DC環境下, 只要有一台DC正常運作, 就可以了呢? 很多人都會理所當然的這麼想的, 但在2003, 其實不是這樣的。我們有一台主機, 在登入畫面, 當選擇登入AD網域時, 一直出現 "無法登入, 因為無法連線到網域" 的錯誤訊息。因為之前已經檢查了相關主機狀況, 所以我知道多台DC中有一台有點問題。它出現了以下幾個徵狀:     1. 在Active Directory使用者及電腦, 要查找使用者時出現問題     2. 查看事件檢視器的目錄服務分類, 看到一些複寫的錯誤及警告, 例如: ------------------------------------------------------------------------------------------------------------------------ 這個伺服器是下列 FSMO 角色的擁有者,但並不認為它是有效 的。對於含有 FSMO 的磁碟分割,這個伺服器自從重新啟動後即 未以任何它的協力電腦成功複寫過。複寫錯誤正阻礙這個角色的 確認。   要求連絡 FSMO 操作主機的操作將會失敗直到這個問題被更正 為止。   FSMO 角色: CN=RID Manager$,CN=System,DC=princo,DC=com,DC=tw   使用者動作:   1. 初始同步處理是系統啟動時所做的第一個早期複寫,初始 同步處理失敗可能說明了為什麼無法確認 FSMO 角色。這個程序 已在 KB article 305476 中說明。  2. 這個伺服器擁有一 或多個複寫協力電腦...

在Windows 2003 server裡備份檔案, 使用ShadowSpawn + robocopy (考古文)

 時光來到2025, 還在用Windows 2003 server, 大家就知道我的年資不少了。反正, 基於各種原因, 就是要用Windows 2003就對了。而且有備份檔案的需求, 上網找了一下可能的方案, 發現robocopy有不少愛好者, 評價很好。所以就想用, 而robocopy在windows 2003是透過resource kit提供。沒想到微軟的網站上, 已經找不到這個resource kit了, 所幸在Archive網站仍然可以找到。 Windows 2003 Resource Kit x86 Internet Archive的連結 注意一下, 似乎只支援x86, 還好的是我使用的那台機器是x86。安裝方法很簡單, 下載下來的 rktools.exe檔直接執行, 然後一直下一步就可以了。預設會在C:\Program Files\Windows Resource Kits\Tools目錄下安裝許多工具程式, 其中也包括robocopy。 Robocopy的使用方法, 可以參考這個網站:  Robocopy使用詳例 ********************************************************** 接著, 我發現了一件事: 有些檔案因為被鎖定, 所以一直沒有被robocopy備份到! 才想到要做Shadow copy! 又研究了一下, 發現ShadowSpawn的評價不錯, 它的網址:  Candera/shadowspawn  是GitHub的一個公開專案, 可是專案owner Candera說已經十多年沒認真使用Windows平台了, 目前也沒心力再支援這個專案了, 也希望有心人可以fork它的專案來接手維護。而且, 之前的已編譯好的可執行程式目錄也不見了。所以只能自己編譯了(還好有source code), 但我試了一下, 發現我編出來的程式, 沒辦法在Windows 2003上面跑, 因為使用的微軟開發環境太新了!  所幸, Candera有指出明路:  關於可在Windows 2003執行的ShadowSpawn可以在那裡找的討論文 , 所以下載這支程式, 不用安裝, 直接放到HD, 再安裝vcredist-2010_x86.exe (如果原本沒裝過的話...

在Ubuntu 24.04上使用nsd安裝一台Authoritative DNS Server

 我發現安裝Ubuntu 24.04 Server後預設會有systemd-resolved service在跑, 使用netstat -l指令查看, 會看到127.0.0.53之類的socket出現, 還有使用ls -l /etc/resolv.conf, 會發現這個檔案變成軟連結。問了Copilot, 它說: "127.0.0.53 是 Linux 系統(特別是使用 systemd 的發行版,如 Ubuntu)中 systemd-resolved 的本地 DNS stub resolver。它的作用是作為本機 DNS 中介,將應用程式的查詢轉發給實際的上游 DNS 伺服器。"而systemd-resolved的上遊是那台DNS server呢? 應該是放在 /etc/systemd/resolved.conf 這個設定檔, 這個檔可以如下設定: [Resolve] DNS=8.8.8.8 FallbackDNS=1.1.1.1 然後, 下指令: sudo systemctl restart systemd-resolved 重啓systemd-resolved, 應該就可以正常的ping的到主機名稱了。  問題是, 我要安裝nsd時, 會發現port 53已經被佔用, 不能安裝了。所以第一個動作, 我必須先禁用systemd-resolved, 改回使用原本的/etc/resolv.conf檔的老方法。Copilot告訴我的詳細作法: ------------------------------------------------------------------------------------------------------- 關閉 systemd-resolved 的完整步驟: - 停止並禁用服務 sudo systemctl disable --now systemd-resolved - 移除 /etc/resolv.conf 的符號連結(symbolic link) 預設這個檔案其實是連到 /run/systemd/resolve/stub-resolv.conf sudo rm /etc/resolv.conf - 建立一份你自己的 resolv.conf 檔案 你可以手動指定 DNS,例如使用 Google DNS: ...

Khadas VIM3 開發板Android的源碼編譯好後,如何燒錄?

 在Khadas community找到的文章 vim3-vim3l-aosp-android-14-0-upside-down-cake , 以下試著照做看看! 1﹒ 先跳過自行編譯源碼的部份,直接下載他們已經編好的影像檔   2﹒ 準備燒錄工具 pyamlboot 直接在命令列,下以下指令: pip3 install pyamlboot  結果出現錯誤訊息:error: externally-managed-environment,找了一下,有一文 stackoverflow ,很多人在討論並提出很多解法。我採用python venv的做法: (1)  先安裝venv: sudo apt install python3-venv (2)  建立一個venv: python3 -m venv .venv (3) 啟動這個venv:  source .venv/bin/activate (4) 在這個venv下安裝pyamlboot: (.venv) $ pip3 install pyamlboot    3. 讓VIM3開發板進入USB upgrade mode (1) 供電 (2) 在2秒內,快速按F鍵3次,放開 (3) 藍色LED燈會閃3秒,然後熄滅, 這樣就進入 USB upgrade mode          

Khadas VIM3 開發板Android的源碼編譯

圖片
 續上篇, 完成源碼的下載後, 如何編譯呢? 首先要把相關的工具準備好, 官網有文章 install-toolchains 說明, 有2個方法, 第一個方法是直接在ubuntu下一些指令, 另一個方法是利用Docker, 把預先弄好的Docker Image抓下來, 再跑起來, 就可以在裡面進行編譯Android源碼的動作。 因為我之前在電腦上已經裝過編譯Orange Pi的Android 12的工具, 不想2個開發板的環境混在一起, 加上想試一下Docker怎麼使用, 所以選擇了第二個方法。 基本上依文件的指令下就可以, 但裝Docker的部份, 若要取得最新的版本, 可能要去查一下Docker的文件。接著取得 wesion / khadas_android:v0.6 這個Image, 然後把它跑起來。 文件上寫下這個指令: sudo docker run --privileged -i -t -v / home / you_name: / home / android wesion / khadas_android:v0.6 bash 全部照抄就可以, 但是/home/you_name:/home/android這個部份要改一下, 前面我們下載Android源碼時, 文件有叫我們建一個工作目錄, 我使用/home/ops/work這個目錄名稱, 所以整個Android源碼的程式都放置在這個目錄下。為了讓Docker跑起來後, 可以存取到Android源碼目錄, 指令的這個部份我改為/home/ops/work:/work (用來取代前面提到的/home/you_name:/home/android)。改成這樣, 下指令, 會看到命令提示字元變成類似: root@3458795s8df812:/work# 這樣就進去Docker這個環境了, 如果要離開, 只要下exit指令就可, 同樣命令提示字元會回到原來的樣子。在這個環境裡下df指令, 就可以看到可以存取的目錄有那些, 我們只要關心是不是有/work這個目錄就可以了。有的話, cd進去, 然後照著官網的 build-android 文件做就可以。 以編譯Android 9 64位元為例: 分為2個步驟: 1. 先編譯bootloader $ cd /home $ cd bootloader / ubo...

Khadas VIM3 開發板的Android源碼下載

 最近在學習Khadas VIM3這個開發板, 特別是跑Android, 第一個問題就是要先下載源碼。官網有文件 download-android-source-code 說明。以下記錄依文件操作所碰到的問題和思考如何解決, 但可能我的想法也不見得是最好的! 1. 先安裝git-lfs工具 查了一下, git-lfs是git的擴充套件, 針對大型檔案儲存對git造成的問題提供解法, 主要是大型檔案就放在雲端, 本地端就放指標就好。看了git-lfs官網說明, 建議要升到3.6.1版本。Khadas的文件仍叫我們安裝2.3.4的版本。如果要試安裝3.6.1版, 可以使用以下網址連結。 https://github.com/git-lfs/git-lfs/releases/download/v3.6.1/git-lfs-linux-amd64-v3.6.1.tar.gz 下載並解壓縮, 下 sudo ./install.sh 指令, 會出現錯誤訊息, 就下git init指令, 再重下 sudo ./install.sh 就不會有錯誤訊息了。 2. 建立工作目錄, 並下載manifest, 為什麼要下載這個檔案呢? 我問了ChatGPT, 他提到在同步特定Android設備的源碼時, 有些部份是特定廠商的Git Repo(也就是該設備特有的檔案物件), 不同的設備使用不同的manifest檔案來區別要同步的源碼。Khadas VIM3維護了3個不同的Android版本, 我先試用主要維護版本Android 9 64位元版。 下以下指令: $ repo init -u https: // github.com / khadas / android_manifest.git -b khadas-vim3-p-64bit 3. 開始同步源碼, 下 repo sync -c -j4, 這裡我才想到, 為什麼不是用git, 而是用repo呢? 同樣問ChatGPT, 他說repo是Google開發的一種git repo管理工具, 主要用於管理多個git repo的Android源碼。它是git的一個封裝工具, 簡化管理多個git repo的操作。這樣我就理解了, 主要是Android源碼太大, 分散放在不同的git repo, 所以要同步所有源碼時, 總不能每個git r...