2022-12-30

Linux Live系統20年

從開始接觸KNOPPIX開始到現在,大概20年有了,我一直都是使用Live的Linux,而不是把Linux系統以『正常』方式(system tree有幾千幾萬個檔案)安裝到電腦裡,就是我用的整個Linux系統只有單一個檔案,這個檔案可能是用squashfs或其他方式壓縮的單一檔,這樣的系統也叫做frugal installation。

Live的系統還可以把它整個丟到RAM裡面跑,速度很快,就是在boot option加上一個toram的參數,它就會全部都copy進RAM裡,不過以ubuntu系統來說,它會把整個儲存體(例如整支USB碟)都copy,這不是我要的(因為可能RAM比我的USB碟小),我在單一USB碟裡面可能裝了好幾個不同的Linux,所以需要改一下initrd裡面的scripts/casper,讓它在copy時只把存放我要的Linux的目錄copy到RAM裡。

以ubuntu的initrd裡面的scripts/casper來說,就是
parse_cmdline() 加上一個
usize=*) export USIZE="${x#usize=}" ;;

copy_live_to()
把原本的
size=$(fs_size "" ${copyfrom} "used")
改成
size="${USIZE}000"

把原本的
cp -a ${copyfrom}/* ${copyto}
改成
cp -a ${copyfrom}/$LIVE_MEDIA_PATH/ ${copyto}

do_snap_copy ()
也跟上面一樣改一下成為
size="${USIZE}000"

然後在boot option 加上 usize=NNNN 例如: usize=1630
就是先du 一下你的Linux目錄看多少?例如 1620360 再少掉三位數,再加一點。

這樣就不會把整個USB碟全都copy進RAM。但是這裡還是有一個很大的浪費,就是
/lib/modules/
/lib/firmware/
這兩個目錄下真正用到的東西很少,可能不到百分五,所以如果只把用得到的放在系統裡,可以省下不少空間,特別是要丟到RAM裡跑的話,以squashfs壓縮檔來說可以縮小500MB以上。

要怎麼知道系統用到哪些/lib/modules/跟/lib/firmware/下的東西呢?
lsmod看看就知道了!
lsmod|awk '{print $1}' 可以找出用到哪些kernel modules
從找出來的list再經由modinfo來查
modinfo $MODULE|grep filename:|cut -b17- 找出在 /lib/modules/ 的對應位置
建立一個名單,再用tar 把名單裡的東西全都打包

要找/lib/firmware/ 之下哪些東西是有用到?一樣是先問lsmod
從找出來的list裡去問modinfo大神
modinfo $MODULE|grep ^firmware:|awk '{print "/lib/firmware/"$2}'
就知道系統用到哪些firmware

frugal大概就這樣玩!

2022-11-30

聽CNN的RTTY新聞

RTTY原本是發射端把文字轉成高低高低的數位聲音,透過無線電發射出去。
RTTY的接收端是把收到的電波轉成高低的數位聲音,但RTTY不是摩爾斯碼,人耳是聽不懂的,需要再轉成文字,就可以閱讀。但是這篇短文是要用電腦語音合成軟體再把文字轉成語音用耳朵聽。

有人把 CNN 的新聞轉成 RTTY 然後在網路上廣播,這就不必依賴無線電,只要有網路就可以通連了。

以下講的都是在終端機軟體裡進行的,例如用terminator或是gnome-terminal之類。

首先我們在電腦裡(這裡是用Linux環境)建立一個pulseaudio的virtual sink, 指令為

pacmd load-module module-null-sink sink_name=Virtual_Sink sink_properties=device.description=Virtual_Sink

CNN的RTTY的URL 如下,我們用mpv來播放,指令就是

mpv http://internet-tty.net:8000/ITTY

但是它的尖銳聲音耳朵聽起來不悅耳,所以來找看看mpv是輸出到pulseaudio的哪一個sink, 然後把它從原本的sink轉到前面建立的virtual sink就不會聽到吵雜的聲音了,指令為

INPUT=$(pacmd list-sink-inputs|grep -B18 "ITTY"|grep "index:"|awk '{print $2}')

再來把得到的這個INPUT塞到Virtual_Sink,指令是

pacmd move-sink-input $INPUT Virtual_Sink

然後就可以用minimodem來收看,它會解碼成文字,指令為

minimodem rtty -rai

參數rtty是說我們要用minimodem來接收RTTY協定
參數-rai
r 是接收
a 是自動對正載波頻率
i 是高低反向

如果你只要用看的,那到這裡就可以,它會一直打出英文文字來,如果要用聽的,就要再把文字丟給語音合成器espeak,指令是

minimodem rtty -rai| espeak -g9 -s120

-rai 後面是一個 pipe "|"

espeak的參數
-g 9 是字與字的間隔時間
-s 120 是句子的播放速度

2022-10-30

哪些廠商對Linux使用者友善與否?

 最近透過網路買了幾個電腦產品,以過程來看,DELL對Linux使用者是不友善的。網路購買,在七天猶豫期過後,要進行產品注冊,DELL的註冊方式,要先下載一個軟體來偵測使用者的硬體,問題是DELL提供的軟體只有Windows用的,下載也不能在Linux環境下使用,結果就無法註冊了。

 https://www.dell.com/support/retail-registration/zh-tw

後來再重新看那個連結裡,找找看有沒有別的連絡方法,但沒有,倒是有一個『所有權移轉』,然後點進去試試看,變成要用『自己移轉給自己』的方式,可以填寫買到的產品序號,算是註冊了。

但是那個『所有權移轉』的表格填寫過程,並沒有讓填表者上傳發票,所以最後它列出來的保固日期並不是以我的購買日期計算,所以保固期間比我購買日期應該有的期間短少了大約兩個月,以後除非不得已,不會想買DELL的產品。

一樣是透過網路平台買的,Lenovo產品註冊就沒有對作業系統的歧視, 

https://pcsupport.lenovo.com/tw/zh/regemail

到這個連結進去填表,並且上傳發票檔,從我購買日算出來的的保固期間無誤。

不過Lenovo跟DELL的『BIOS更新』都只提供Windows下的工具,這點倒是很公平的對待所有Linux使用者一樣都不友善! XD

然而技嘉的『BIOS更新』工具除了提供Windows用的之外,還提供UEFI mode的方式跟程式,UEFI mode算是universal的,不用任何OS也可以進入使用,這比Lenovo或DELL來得有誠意公平對待所有使用者。

2022-09-30

RTL-SDR接收L-Band衛星訊號

 最近拿到一支L-Band flat antenna, 這個天線有含LNA所以要有主動電源,才能把收到的訊號放大,所以接這支天線的SDR必需有BiasT才可以,像是RTL-SDR.COM自家生產的RTL-SDR V3,或是RSP1A都俱有這項功電功能。


 常用的gqrx, cubicSDR, QRadiolink 在操作介面上都沒有BiasT的控制按鈕,目前看來只有SDR++才有這項控制鈕。不過gqrx有個穩藏控制方式,就是在Confirgure I/O device --> Device string 在原本的 rtl=0 後面再加上",bias=1", 所以在Device string這一欄的字串就變成 "rtl=0,bias=1", 這樣就是啟動BiasT供電給SDR,這是最方便的方法,不然就要用指令控制,針對RTL-SDR的有"rtl-biast -b 1" 來啟動供電,"rtl-biast -b 0" 中止供電。

https://github.com/rtlsdrblog/rtl_biast

樣子像以下這樣:

RTL-SDR Blog Active L-Band 1525-1660 Inmarsat to Iridium Patch Antenna Set 

 但是RSP1A 找不到有 rsp_biast 的控制工具?

 可以用三用動錶來量一下接在SDR饋線的中心跟外圍,就能確認是不是有正常供電,或是看著waterfall 當BiasT啟動後waterfall裡的訊號明顯變強,就能確認供電功能是否正常了。

 不過啟動BiasT來給天線供電有一項小麻煩,就是如果你去接了一個迴路是短路的天線,例如J型天線,長時間供電(好幾天)的結果有可能會對SDR本身電路造成損害,但網路上也看到有人提到說SDR裡面有保險,不會造成損壞,不確定是不是對的?

 接收L-Band訊號大概還是要在空曠地方比較有機會,如果是在屋子的窗邊幾乎沒什麼訊號。基本上1545MHz這一帶會有APRS的飛機訊號,開動接收之後大概等幾分鐘就能聽到『嗶』聲,看到有飛機被紀錄到了。