Uxplay + Raspberry 自動啟動 autostart

最近在弄 UxplayRaspberry Pi 4 B 上面的自動啟動遇到的一些問題和解決方式筆記一下 (好喔 上次寫在 blog 筆記也好幾年了www)

首先 Uxplay 安裝其實很簡單

Raspberry 如果安裝的 image 是 Desktop 的版本

只要簡單的使用 apt 安裝就好了

sudo apt install uxplay

問題是幾乎沒用過 Linux desktop 了,所以超不熟wwwww

安裝完 uxplay 直接執行

uxplay -bt709

參數要加上 -bt709 是因為我用的是 raspberry 4B 和 raspberry OS(debian)

其他的 OS 或是硬體不一定需要加這個

這細節很多 詳情可參考 uxplay 的 README 這邊不再贅述

當測試完啟動投影是正常之後,接下來是自動啟動的問題

方法大概是兩種(擇一)

  • debian 系統的 systemd
  • 視窗系統的 autostart

systemd

這個訪法其實比較通用,因為系統改版不太會改這個架構,而採用視窗系統的 autostart 比較容易跟系統版本推進採用不同視窗系統,以至於方法有所變動。

首先先建立並編輯一個服務檔

sudo vi /etc/systemd/system/uxplay.service

內容如下

[Unit]
Description=Uxplay autostart
After=graphical.target

[Service]
ExecStart=/usr/bin/uxplay -bt709
Environment=DISPLAY=:0
User={your_login_id_for_desktop}

[Install]
WantedBy=graphical.target

其中 User= 後面要改成你登入視窗介面用的 user

然後測試啟動

sudo systemctl start uxplay.service

停止

sudo systemctl stop uxplay.service

設置自動啟動

sudo systemctl enable uxplay.service

這樣就完成了

視窗系統的 autostart

寫這篇主要是因為摸這個一直弄錯wwwww

首先先要搞清楚 raspberry 的 desktop 環境組成到底是誰組成

是 X11 ? LXDE ? wayland ? wayfire ? labwc ?

搞到最後才知道原來現煮時 (2024.12.08) 是使用 Wayland + labwc

當知道是這兩個組成的話,事情就變超簡單的了 只是我搞了三個小時才弄清楚wwwww

來看一下 labwc 官網說明文件 搜尋 autostart 就找到方法了

首先 labwc 設定檔都放在 ~/.config/labwc 資料夾

如果找不到就開一個

mkdir -p ~/.config/labwc

然後編輯一個自動執行檔

vi ~/.config/labwc/autostart

內容其實就是一般的 shell script ,官網也有 範例可參考 ,但這範例沒有我們要用的東西

我們自己編輯 內容如下

export DISPLAY=:0
/usr/bin/uxplay -bt709

這樣就可以了

測試就重開機一下吧

更新: 放在 /etc/xdg/labwc/autostart 也是可以

備註

以上兩種方法都以最簡單的方式啟動 uxplay

如果您要增加額外的參數或是做錯誤輸出之類的請自己處理嚕

測試環境

Raspberry Pi 4b

Raspberry Pi OS (64bit) Debian bookworm with Desktop 2024.11.19

AD GPO 隱藏討人厭的搜尋方塊和沒用的摳他那(cortana)

Windows 搜尋功能自古以來按下 win-key 直接打字就有,不過麻瓜們都不知道,所以在最近這幾版的 Windows 10 改成預設就是個大搜尋框,超礙事的,直接拿掉怕麻瓜們不方便,留個放大鏡圖示好了,至於 Cortana 就根本是沒用的東西,直接拿掉。

老樣子,打開 gpmc.msc 編輯你要改的 GPO 找到 使用者設定 / 喜好設定 / Windows 設定 / 登錄
記得這邊不要用”電腦設定”,要用”使用者設定

新增登錄
搜尋方塊是
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Search\SearchboxTaskbarMode
值設定為 1 ( 0隱藏 / 1圖示 / 2 整個方框 )

Cortana 圖示是
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowCortanaButton
設定值為 0 ( 0隱藏 / 1 顯示)

這樣乾淨多了(菸~

在 AD 環境中 Firefox 的群組原則管理

要在 AD 環境中透過群組原則 (GPO) 來管理 Firefox 可以從 https://github.com/mozilla/policy-templates/releases 下載群組原則樣板 (ex: policy_templates_v2.4.zip)。

解開來裡面找到兩個檔案

  • nwindows\firefox.admx 這是群組原則樣板檔
  • windows\zh-TW\firefox.adml 這是樣板的中文語言檔

admx 檔和之前做 chorme / new edge 的 adm 檔操作方式不同,
admx 檔是放在本機,然後操作群組原則的時候會自動抓來用,但是你換到沒有admx 的電腦操作就看不到哩,但是群組原則效果還在。
adm 檔則是掛進去到處都看得到。

firefox.admx 複製到本機(要執行 gpmc.msc 的機器)的 C:\Windows\PolicyDefinitions\ 底下(此範例以 windows 10 為例,如果是 windows 版本較舊,像是 windows7, server 2012 則資料夾可能不同)

firefox.adml 語言檔則放在 C:\Windows\PolicyDefinitions\zh-TW\ 底下。
以上兩個檔案 (addx/adml) 放好了就完成環境準備了,這時候執行 gpmc.msc 開或是新開你要的群組原則來編輯,就可以看到在系統管理範本內有 firefox 的選項了,admx 檔案會直接出現,不會像 adm 檔出現在傳統系統管理範本的分類。

自動安裝擴充元件

本範例以 uBlock Origin 為例,先到擴充套件的官網,找到網址的識別名稱,這邊是 “ublock-origin” 先把這字串記起來,下個步驟會用到。

打開群組原則編輯器,找到 電腦設定\原則\系統管理範本\Firefox\擴充套件\要安裝的擴充套件 啟用他,然後按下 “顯示…” 的按鈕,編輯要安裝的檔案來源列表。

注意! 這邊的值要直接可以找到要安裝的 xpi 檔,如果你去複製官網的按鈕連結,你會得到的是 https://addons.mozilla.org/firefox/downloads/file/3663488/ublock_origin-1.30.6-an+fx.xpi

這其實不 OK! 因為這路徑有限定版本,以後官網更新不就會裝到舊版….

所以這路徑不能直接複製官網按鈕,不過還好官網有作對應,我們只要用 https://addons.mozilla.org/firefox/downloads/latest/<擴充元件識別名稱>/latest.xpi 就可以直接對應到最新版本,範例如下:

擴充套件網頁 https://addons.mozilla.org/zh-TW/firefox/addon/ublock-origin/
擴充套件最新版本檔案 https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi

我們就直接把下面這行貼到值裡面,按下確定就好了。

關閉新通知

打開群組原則編輯器,找到 電腦設定\原則\系統管理範本\Firefox\權限\通知\封鎖傳送通知的新請求 把它啟用就好了。

讀者可能會想,上面不是有個封鎖的網站,為何不打開來填個萬用字元* 就好了嗎?
這其實不行,以目前版本 2.4 版官網說明 有提到

> Because these are origins, not domains, entries with unique ports must be specified separately. This explicitly means that it is not possible to add wildcards.

所以是不能用萬用字元的。

範例就這兩個,其他就不贅述了,祝各位躺的愉快。

AD 環境下把新版 Edge 搞得跟 Chrome 一樣(欸 不是)

新版 Edge 本來就是被 MS 改醜改難用而且無法登入 Google 同步的 Chrome 啊啊
雖然教了同事改預設瀏覽器,但是懶麻瓜眾多,就是有人會直接使用,只好把這改得稍微能用
承接昨天的廢文 在 AD 環境中 Google Chrome 的管理 ,這次我們要換用 Edge 的政策範本 來處理

首先先到 這裡 下載 Policy Files ,如果是禁止符號表示你的版本和平台沒有選定,請依照您的環境選定版本。
下載是一個 MicrosoftEdgePolicyTemplates.cab 的檔案,打開會有個 MicrosoftEdgePolicyTemplates.zip

然後一樣打開群組原則編輯設定 ( gpmc.msc ) 建立新的群組原則連結到你要部署的組織,然後在群組原則的 系統管理範本 右鍵新增範本,把 msedge.adm 抓進來
另外一提,如果您不是 AD 環境,也想要改掉新分頁的鬼 bing 可以用 本機群組原則編輯器(gpedit.msc) 處理

然後在傳統系統管理範本內就有 Edge 的範本了

接下來我們要改
* 設定 Microsoft Edge 為預設瀏覽器 – 關閉
* 設定新索引標籤頁面 URL – 改為 google 首頁
* 預設搜尋提供者搜尋 URL – 改為 google 搜尋
* 安裝擴充功能 – 安裝 ublock origin
* 預設通知設定 – 關閉

關閉檢查 Edge 為預設瀏覽器

Microsoft Edge / 設定 Microsoft Edge 為預設瀏覽器 : 已停用

設定新索引標籤頁面為 Google 首頁

如果沒有藉由群組原則改,由 Edge 設定介面怎麼找都改不掉新分頁的 bing 首頁

Microsoft Edge / 啟動、首頁和新索引標籤 / 設定新索引標籤頁面 URL : 啟用並設為 https://www.google.com

預設搜尋引擎改為 Google

bing 真的難用,預設搜尋當然是要 Google

Microsoft Edge / 預設搜尋提供者 / 啟用預設搜尋提供者 這個要先啟用才有效
接這設定搜尋 URL
Microsoft Edge / 預設搜尋提供者 / 預設搜尋提供者搜尋 URL 啟用 並把右方說明的 google 區塊貼過來,前後的單引號不用

{google:baseURL}search?q={searchTerms}&{google:RLZ}{google:originalQueryForSuggestion}{google:assistedQueryStats}{google:searchFieldtrialParameter}{google:searchClient}{google:sourceId}ie={inputEncoding}

安裝擴充元件 – 以 ublock origin 為例

新版 Edge 的擴充元件要來 https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home 找

找到後把網址的 id 複製起來

Microsoft Edge / 擴充功能 / 控制哪些擴充功能會默默地安裝
啟用並點擊 選項 / 顯示 把剛複製的 id 放在這邊
另外一提,新版 Edge 是可以安裝 Google Chrome 商店的擴充元件,也就是說你把 Chrome 擴充元件的 id 貼過來他也會安裝
像是本範例的 ublock origin 兩邊都有,你如果把兩邊的 id 都貼過來,他會裝兩套 ublock origin………

關閉通知

瀏覽器通知這個鬼東西真的很討厭,麻瓜們沒事就會中招,超煩

Microsoft Edge / 內容設定 / 預設通知設定 : 啟用並設定為 2. 不允許任何網站顯示桌面通知

在 AD 環境中 Google Chrome 的管理

要在 AD 環境中使用群組原則管理 Chrome 要先到 官網 下載 Chrome 政策範本 policy_templates.zip

解壓縮後找到 windows\adm\zh-TW\chrome.adm

再打開 群組原則編輯器 (gpmc.msc) 到 系統管理範本 新增剛解壓縮出來的 chrome.adm 這個範本檔
就可以讓群組原則處理 Chrome 的設定

範例一 : 幫網域上的 Chrome 都裝上 uBlock Origin

這個擋廣告軟體 這超好用 也可以擋掉 youtube 剛開始播放時的廣告
首先先去 uBlock Origin 的官網 記住網址的後面代號

然後再群組原則管理裡面 對你想要改的組織設一個群組原則然後編輯它

找到 系統管理範本 / 傳統系統管理範本(ADM) / Google / Google Chrome / 擴充功能 / 設定強制安裝的應用程式和擴充功能清單

啟用它並由下方選項顯示編輯清單,裡面的值就打上上面複製來的 擴充功能 id (例如 cjpalhdlnbpafiamejdnhcphjbkeiagm )

按下確定後 所有符合此群組原則的電腦就會自動裝上你指定的擴充功能了

範例二 : 讓所有電腦的桌面通知都關閉

系統管理範本 / 傳統系統管理範本 / Google / Google Chrome / 內容設定 / 預設通知設定
把它停用

以後就不會莫名其妙亂跳通知了

[iPad管理] iOS 批次重新命名


[iPad管理] iOS 批次重新命名

當使用 Apple MDM 管理方案 (ASM + profile management) 管理 iPad,每當裝置重置,裝置名稱又會回到 “iPad” ,原本預期裝置名稱可以由 Server 端設定,重置後會自己抓回來,不過我沒有找到這個功能,以至於每次重置都要重新一台一台重設,相當麻煩。

這麼麻煩的事情,應該有人做自動化吧,在網路上逛了一圈,果不其然有人已經造好輪子了,因為這個版本是吃英文版的 apple configurator 2 所以就順手 fork 回來改成中文版匯出直接可用的版本


環境準備:


製作 CSV 檔案:

將數台 iPad 透過 USB hub 連接到 macOS 機器上並打開 AC2

rename device from AC2

如果你的裝置名稱還是預設,請先在 AC2 上面先把該重新命名的裝置做第一次命名,當然也可以從 iPad 上面直接設好名稱再接過來。

輸出資訊

全選(⌘+A),右鍵 輸出 / 資訊 …

選擇輸出資訊

輸出資訊至少要勾選 “名稱” 其他欄位隨意。

選擇儲存檔案名稱

選擇輸出CSV檔檔名,本範例以 ipad_b.csv 為檔名,檔案存放在與rename_ios_devices.py 相同的資料夾(如不同,執行時請自行加上路徑)。

csv 檔案內容

使用文字編輯器查看 ipad_b.csv 內容,第一行標題必須包含 UDID名稱 兩個欄位,如您的 CSV 標題為英文,請使用英文版本的程式或是將其內容改為中文名稱。


使用本程式批次重新命名:

打開 終端機.app 或是 iTerm2.app 切換工作目錄到 rename_ios_devices.py 與 ipad_b.csv 的資料夾。本範例以桌面為例

cd ~/Desktop

執行重新命名程式 (使用 ipad_b.csv 為其資料來源)

python rename_ios_devices.py ipad_b.csv

搞定收工

OpenSIPS 建置筆記

使用 opensips 建立一個 sip server 給內部使用

本文以 debian 9.5 為例 ( opensips v2.2)

安裝 mariadb 當資料庫

apt-get install mariadb-server
mysql_secure_installation

Enter current password for root (enter for none):
Set root password? [Y/n] y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y

安裝 opensips

apt-get install opensips opensips-mysql-module

設定

設定監聽 IP

vi /etc/opensips/opensips.cfg

修改監聽 ip 這邊不可以用 127.0.0.1 一定要用你的 ip
然後 alias 設定為 hostname

listen=udp:192.168.1.88:5060
alias=udp:sip.hsps.tp.edu.tw:5060

設定 domain 與資料庫

vi /etc/opensips/opensipsctlrc

SIP_DOMAIN=your.domain.name #設定你的domain
DBENGINE=MYSQL #使用 mysql/mariadb
DBHOST=localhost #資料庫主機
DBNAME=opensips  #資料庫名稱
DBRWUSER=opensips  #SQL帳號
DBRWPW="opensipsrw" #更改為你想設定的密碼

依照上面設定建立 sql 帳號與資料庫

opensipsdbctl create

MySQL password for root: 輸入 mysql root 密碼
Enter character set name: latin1
Install presence related tables? (y/n): y
fraud_detection emergency? (y/n): y

新增 SIP 帳密 (for client)

opensipsctl add 101 101
opensipsctl add 102 102

帳號資料會建立在 table opensips.subscriber

然後就可以通了

設定系統服務

設定開機自動啟動

 systemctl enable opensips

平常操作就

啟動 systemctl start opensips

重啟 systemctl restart opensips

查看狀態 systemctl status opensips

HP Win10 更新後出現 WDF VIOLATION 無法開機

WDF_VIOLATION
今天公司的 HP 桌機 Windows 10 更新重開之後就出現 WDF VIOLATION 錯誤

auto repair gg
然後重開自動進修復又失敗

這是因為更新與 HP 的鍵盤快速鍵驅動衝突
解決方法請在這個畫面按下面 “進階選項” 然後選 “疑難排解” / “進階選項” / “命令提示字元”

切換到你安裝 windows 的磁碟 以下以 C: 磁碟為例
依序打下列指令 把原本的驅動更改名稱使其不啟動

c:
cd windows\system32\drivers\
ren HpqKbFiltr.sys HpqKbFiltr.sys.old

重開機之後就 ok 了

XenServer 轉移至 Proxmox (PVE)

XenServer 轉移至 Proxmox (PVE)
本文亦可適用於 xcp-ng

準備工作

XenServer 匯出 xva

用 ssh 登入 xenserver

使用以下指令匯出 xva

xe vm-export vm={你的虛擬機器名稱} filename={匯出的檔名.xva}

( 可以用 xe vm-list 列出所有的 vm 名稱)

轉換映像檔

這個部份我是在 pve 上面做,所以先把 xva 檔丟過來或是用 nfs 之類的其他方式掛載

解壓縮 xva 檔

tar xf xen_vm.xva

解開會得到

  • 檔案 ova.xml
  • 資料夾 Ref:990 (數字不盡相同)

再用 xenmigrate.py 將資料夾 Ref:990 轉換為 raw image (以下以 vm_raw.img 為例)

注意 轉換成 raw 的時候會佔滿原本該虛擬硬碟原本分配的硬碟大小, 而非 thin 大小

python xenmigrate.py -c Ref:990 vm_raw.img

產生出的 vm_raw.img 即為 raw image

如果需 qcow2 檔案則可以用 qemu-img 轉換 (以下以輸出 vm.qcow2 為例)

 qemu-img convert -f raw -O qcow2 vm_raw.img vm.qcow2

建立虛擬機器

登入 pve web ui 建立一個虛擬機器

ex: id=101 disk=qcow2(32G)

虛擬機器不要開

ssh 進去 找到虛擬硬碟實際位置 (ex: /mnt/pve/NAS/images/101/vm-101-disk-1.qcow2)

本機儲存請找 /var/lib/vz/images/{vm-id}

把轉出來的 qcow2 覆蓋掉剛建立的 vm-101-disk-1.qcow2

mv -f vm.qcow2 /mnt/pve/NAS/images/101/vm-101-disk-1.qcow2

修改設定檔磁碟容量 /etc/pve/qemu-server/101.conf

#virtio0: RS_PVE_NFS:101/vm-101-disk-1.qcow2,size=32G
virtio0: RS_PVE_NFS:101/vm-101-disk-1.qcow2,size=250G

開機測試沒問題後,就可以把先前產生的 xva / img / ova / Ref 檔案砍一砍了

Ref:

  • https://pve.proxmox.com/wiki/Xenmigrate
  • https://github.com/derekjhyang/xenserver_to_xen

gitea 安裝筆記

gitea

安裝 mariadb

sudo apt-get install mariadb-server
sudo systemctl start mysqld
sudo mysql_secure_installation

如果已設密碼,但用無法登入 (MySQL Workbench / Sequel Pro)

mysql -u root -p
UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;

建立 gitea 資料庫

mysql -u root -p
CREATE DATABASE gitea` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

建立使用者 gitea 並賦予 gitea 資料庫權限

mysql -u root -p
CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'newpassword';
GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost';

安裝 gitea

使用一般 user 登入

mkdir gitea
cd gitea
wget -O gitea https://dl.gitea.io/gitea/1.3.2/gitea-1.3.2-linux-amd64
chmod +x gitea
./gitea web

測試 http://{your_ip}:3000

第一個註冊使用者為最高權限

安裝 nginx

sudo apt-get install nginx

在 /etc/nginx/sites-available 建立一個網站設定檔 gitea.conf

vi gitea.conf

server {
        listen 80;
        listen [::]:80;
        server_name your.host.name;

        root /var/www/html;
        index index.html;
        location / {
                proxy_pass http://127.0.0.1:3000;
        }

連結到啟動區 並移除預設網站 重新啟動 nginx

cd /etc/nginx/site-enable
sudo ln -s ../sites-available/gitea.conf gitea.conf
sudo rm default
sudo systemctl restart nginx

設置 https

安裝 certbot 並執行 certbot

sudo apt-get install python-certbot-nginx
sudo certbot --authenticator webroot --installer nginx

gitea 關閉註冊

cd gitea/custom/conf/
vi app.ini

DISABLE_REGISTRATION  = true

改為服務啟動

/etc/system/gitea.service

[Unit]
Description=Gitea
After=syslog.target
After=network.target

[Service]
Type=simple
User=alexw
WorkingDirectory=/home/your_id/gitea/
ExecStart=/home/your_id/gitea/gitea web
Restart=always
RestartSec=2s

[Install]
WantedBy=multi-user.target

啟動服務

sudo systemctl start gitea.service

設定開機自動啟動服務

sudo systemctl enable gitea.service