顯示具有 hardware 標籤的文章。 顯示所有文章
顯示具有 hardware 標籤的文章。 顯示所有文章

2026-07-29

kanata 一鍵多用途

今天的股價
0050: 93.50
0052: 54.35
比上個月跌了不少,要怎麼解釋這個價位?不管是相關公司的財報、台灣的經濟能量、或美國的股市並沒有出現什麼大問題,甚至表現仍是相當不錯,那就繼續看下去吧!
_________________

 來介紹kanata這個好用的鍵盤軟體的兩個特別用途。

一般在使用鍵盤時,一個鍵總是有一個固定功能,所以正常的滿功能鍵盤大概就是通稱的104鍵,體積很大。其實如果能一個鍵有兩個三個或更多功能,那根本不必用那麼大一個鍵盤,除了佔空間、沾灰塵,清潔上也麻煩。所以我推薦68鍵的,去除了最上面那一排,也不要右邊的數字盤,整個鍵盤變得精簡。

自從去年開始使用kanata, 覺得它的功能幾乎可以無限發想、組合出任何想要的功能,來說一下幾個基本又好用的設定。經過kanata的設定後,一鍵多用途,讓手指的移動變近、變快,不必去按遠遠的不方便鍵。

以68鍵的鍵盤來說,在去除最上面那一排之後,Esc移動到1的左邊,也就是沒有了「~`」這個鍵,而把位置給Esc用。那要打「~`」的兩個符號時怎麼辦?在68鍵的鍵盤上會有一個「Fn」鍵用來組合某個鍵,讓它打出「~」或「`」,但往往「Fn」的位置跟「~`」離得遠,不好按。

因此我組合了一個定義,讓Esc在短按一下的狀態它就是Esc的功能,而稍微長按一下的狀態下它就是「~」,短按兩下它就是「`」,都只要按同一個位置,不必搭配「Fn」來組合,就有三個鍵的不同用途。

 在deflayermap裡我是這麼定義的:
(deflayermap (main)
  esc (tap-hold 140 180 (tap-dance 140 (esc `)) S-`)
  xxx xabc
  yyy ydef
  zzz zjik
)
上面的 xxx yyy zzz 是其他按鍵的各別定義

這個tap-hold 就是用來定義當「短按」是當做什麼功用,長按時當做什麼功用。
tap-hold 時間 時間 功用一 功用二
而其中的「功用一」又拆成tap-dance 140 (esc `)) S-`

tap-dance 時間 功用一 功用二
的作用是
tap-dance 140ms 「Esc」 「`」

所以原本那一行就成為
esc (tap-hold 時間 時間 (tap-dance 時間 (「Esc」「`」)) 「~」)

在140ms時間內短按一下,就當「Esc」用, 短按兩下就當「`」用,而如果長按超過180ms就當成「Shift + `」(也就是「~」)用。

一般音量調整都是去按個「Fn」同時按最上面一排的某個鍵搭配來作用,我用的精簡68鍵是沒有最上面一排,就算有,還要按「Fn」同時按某個「Fx」也是不方便。因此把左、右的Shift鍵設成兩種功能,短按一下左Shift是音量減少,短按一下右Shift是音量增加,而長按左或右Shift都是當正常Shift使用,同樣定義在(deflayermap (main)內部。

  lsft (tap-hold-release 150 200 vold lsft) 
  rsft (tap-hold-release 150 200 volu rsft)

這裡的tap-hold-release是用來分辨Shift鍵是不是跟別的鍵「一起按,然後又放掉」?如果偵測到這樣的行為,這個Shift就判定是Shift,如果是單獨按沒有搭配別的鍵按下又放掉,那就判定是「調整音量」的用途。
「vold」--> vol down
「volu」--> vol up
「lsft」--> left shift
「rsft」--> right shift

 看了這兩個例子,不曉得你會不會想用kanata?

2026-05-31

什麼樣的鍵盤最好用?

 去年曾經提到60%鍵盤最好用,不過經過將近十個月之後,那個觀點修正為「附有音量旋鈕的65%鍵盤最好用」,或者說「附有音量旋鈕的68鍵鍵盤」最好用!

 65%的比60%的基本上多了上、下、左、右以及像是Del、PgUp、PgDn等等。

 68鍵鍵盤是怎樣的概念?
就是將104鍵的鍵盤拿掉最上面那排F1……F12,以及拿掉右邊九宮格數字盤,剩下幾個NumLock、ScrollLock、PrintScreen、Pause、Insert、Home、End這些也都不要,所剩下的簡約鍵盤。

 然後要加一個「音量旋鈕」,這可以讓我們有如使用實體音響器材般的感受。那是很直覺的轉動旋鈕來調整大小聲,而不是用老鼠不斷的按「+」或「-」的圖樣,或者不斷按實體鍵盤上的某兩個「音量+」或「音量-」鍵,操作旋鈕來改變音量真的直覺、簡單好用得多。

 加了音量旋鈕的65%鍵盤有哪些好處:
➀調整音量大小時很直覺,只需兩支手指轉動旋鈕
➁經由軔體或軟體定義後,手指移動範圍變很小,眼睛不必看鍵盤
➂鍵盤體積小,只佔用桌子上小小的面積
➃清理鍵盤灰塵、掉降物時,省掉很多麻煩事

 這是我在用了好幾個機械鍵盤之後的最終心得。

 至於用來定義鍵盤的軟體,強力推薦kanata!
 https://github.com/jtroo/kanata

2025-07-10

60%鍵盤最好用

自從使用鍵盤定義軟體keyd加上home row概念之後,改變了以前一直認為要用全幅鍵盤的想法。回顧鍵盤實際使用的經驗,全幅鍵盤確實有很多鍵幾乎從來不會去按。

註:home row指的是「ASDF JKL;」這一排鍵位,手指平常會停放在這個基準位。

全幅鍵盤指又稱為100%鍵盤,或是叫做108鍵,右邊九宮數字以及Prtscr/Scroll/Pause從來不用,82鍵或叫75%鍵盤,最上面12個Fx鍵也幾乎用不到。

68鍵鍵盤也叫做65%鍵盤,61鍵比起68鍵少了「上、下、左、右、Home、End、Del」七個鍵,又叫做60%鍵盤。

鍵盤經由keyd或kanata的軟體自行定義後,要用什麼鍵就有什麼鍵,像常用的上、下、左、右、Home、End、PgUp、PgDn、Del、Backspace、Esc這幾個鍵都可以藉由軟體定義安排到更方便按的位置。

在使用全幅鍵盤(108鍵)時,常常要用眼睛去看右手右邊的那些鍵,確定位置才按。但61鍵經過自行定義把一些常用鍵安排到home row之後,根本不必用眼睛去看位置,手指可以一直保持在home row的範圍,就能操控所有鍵的效果,不但不必跨越長距離去按,更是可以關燈操作,所以是最好用的鍵盤。

筆記型電腦受到物理上的限制,會把一些鍵做得比較小,或是做得位置不好按,或是必需按複合鍵「Fn」加上某個鍵來達到其他功能,但「Fn」鍵位置往往不好搭配要按的某個鍵位、距離,手的移動有諸多不便。

在OS裡安裝keyd或kanata,操作習慣之後可以讓各種電腦鍵盤,包括筆記型電腦或外接式機械鍵盤有統一的操作方式之外,更可以讓鍵盤的操作變得很方便、快速。

註:某些61鍵的鍵盤在不使用keyd或kanata情況下,「上、下、左、右」鍵可以先按住Fn再按按一次W,放開之後A=左、S=下、W=上、D=右,按住Fn再按一次W,便取消A,S,W,D的上下左右功能,但還是不如用keyd或kanata自行定義來得好用。

再來談到Alice佈局鍵盤,其實在Alice名稱佈局的鍵盤出現之前,十幾年前就已經有這種左右手鍵位分開的鍵盤在販售,以前稱為「人體工學鍵盤」。我一直有個迷思,認為這樣的佈局才符合人體工學。直到最近使用鍵盤定義軟體搭配61鍵的鍵盤,才破除這個迷思。

其實整齊排式式(非左右分離、非Alice)的傳統型鍵盤,我們在打字時的手腕角度其實沒有很大的彎曲,並不違反手腕、手指的使用。

因為基本上手指擺放位置會是
A: 左小指
W: 左無名指
E: 左中指
F: 左食指
space: 左拇指、左拇指
J: 右食指
I: 右中指
O: 右無名指
;: 右小指
所以手腕仍然近乎伸直,不致於彎曲不舒服。

這樣的位置適合把兩鍵組合起來(一起按)當某一個功能使用。
W+E
E+F
I+J
I+O

以及稍微移動就能按到的各種延伸變化:
U+H
H+B
R+G
G+B
2+3
9+0
X+C
C+V
,+.
,+M
E+R
U+I

總計有16個組合位置,可供定義出我們最常用的功能。而61+16=77鍵,已經非常夠用了。

這樣的組合鍵盤佈局,按的時候完全不用眼睛看一下,就包括了Home, End, PgUp, PgDn, Del, Backspace, Insert, Up, Down, Left, Right 11個鍵功能,16-11=5,還剩五個空位,可以重複定義,例如定義兩個Home, 兩個PgUp, 兩個Esc……等等。

總之經由鍵盤定義軟體(如keyd, kanata)設定後,61鍵的鍵盤不但夠用而且操作方便,讓桌面有更多空間。

2025-05-16

鍵盤也能當滑鼠用:mouseless

 前面介紹了keyd這個軟體式的QMK,把沒有QMK的鍵盤變成跟QMK鍵盤一樣,不管機械鍵盤或一般鍵盤都能用,特別是筆記型電腦的鍵盤也能有layer、改鍵位、組合。而且跨X11/Wayland/tty,讓你在不同的鍵盤、不同的筆記型電腦(有些筆記型電腦上面的鍵盤位置差很大)、Macbook,都像用同一把鍵盤一樣有相同的鍵位,不必再用眼睛去尋找控制/編輯…等等的鍵位而中斷思路。

 本文來介紹如何把鍵盤設成滑鼠一樣的使用。

 有時在某些狀況下不想用,或不能用滑鼠,也可以透過軟體方式,用這個就能把鍵盤當滑鼠使用,不論是在X11/Wayland,皆能使用。

 https://github.com/jbensmann/mouseless
(最近的程式修改是七個月前)
它是使用go語言寫的,在github的Releases都附了一個compile好的binary執行檔可用,可以不必自己compile.

 mouseless的config.ymal跟keyd的default.conf類似,很容易看懂,自行修改後,放在
$HOME/.config/mouseless/config.yaml

 devices: 下要用你電腦裡真正顯示的檔名,用
ls /dev/input/by-id/
看一下你的鍵盤是什麼叫做kbd結尾的檔名。

 以下是我初次使用的設定檔,我原本把左、中、右三個按鍵放在移動上、下、左、右的鍵的下一排的"n,m,.",比較近。後來發現這樣沒辦法單手進行拖曳,還是把這三個鍵放在左手,押住後右手按上、下、左、右才能進行拖曳。

 按住Tab同時再按一下r,可以固定住鍵盤當滑鼠用。
按住Tab跟config裡定義的字母,就是只用一次定義裡的功能,例如往上移動遊標,放掉Tab就打出i。

devices:
  - "/dev/input/by-id/usb-XXX_Gaming_Keyboard-event-kbd"
# the default speed for mouse movement and scrolling
baseMouseSpeed: 750.0
baseScrollSpeed: 20.0

# the rest of the config defines the layers with their bindings
layers:
  # the first layer is active at start
  - name: initial
    bindings:
      # when tab is held and another key pressed, activate mouse layer
      tab: tap-hold-next tab ; toggle-layer mouse ; 500
      # when a is held for 300ms, activate mouse layer
      #a: tap-hold a ; toggle-layer mouse ; 300
  # a layer for mouse movement
  - name: mouse
    # when true, keys that are not mapped keep their original meaning
    passThrough: true
    bindings:
      # quit mouse layer
      q: layer initial
      # keep the mouse layer active
      r: layer mouse
      l: move  1  0
      j: move -1  0
      k: move  0  1
      i: move  0 -1
      u: scroll up
      h: scroll down
      s: speed 4.0
      d: speed 0.3
      f: speed 0.1
      x: button left
      c: button middle
      v: button right
      m: button left
      comma: button middle
      60: button right

如果要讓一般user有使用權限,必需把他加到input的group 

usermod -aG input USER_NAME

 另外還要建立一個檔
/etc/udev/rules.d/99-XXXX.rules

可以用以下的script來建立:
sudo tee /etc/udev/rules.d/99-$USER.rules <<EOF
KERNEL=="uinput", GROUP="$USER", MODE:="0660"
KERNEL=="event*", GROUP="$USER", NAME="input/%k", MODE="660"
EOF

 以及跟keyd一樣透過systemd來啟動/停止,需要建立
/etc/systemd/system/mouseless.service
讓它被systemctl控制。
以下的PATH跟USER要用你系統裡真實的路徑。

[Unit]
Description=mouseless

[Service]
ExecStartPre=/bin/sleep 2
ExecStart=/PATH/bin/mouseless --config /home/USER/.config/mouseless/config.yaml

[Install]
WantedBy=multi-user.target
目前的使用,發現mouseless先啟動
systemctl start mouseless
再執行
systemctl start keyd


如果mouseless的config有錯誤,systemctl status mouseless會失敗,然後keyd功能會失效,這時必需restart keyd,先讓keyd功能回來。修改mouseless的config.yaml,等成功後,中止keyd,等mouseless啟動後,再啟動keyd。
如果要用到「非字母鍵」來定義,需要改用「鍵值」,這時可以執行xev來查出鍵值。
例如原本用v
v: button right
改成句點
.: button right
mouseless執行會失敗,這時執行xev查出句點"." 是60,改成
60: button right
systemctl start mouseless 才能成功。

2025-05-02

keyd default.conf 嚐試二

 先前的設定在使用上有時會出現未預期的情況,應該就是按鍵時間的問題。後來在網路上看到這一位作者的設定方式 https://github.com/argenkiwi/kenkyo/blob/main/keyd/components/main.conf 

於是修改了Home Row幾個modifier鍵的設定,從單用overloadt改成overloadi+timeout+overloadt2
其中的overloadi是為了避免在快速打字時誤擊,timeout是在連續打字時確保功能,overloadt2是在確保搭配的鍵壓下再放開後Modifier的功能。

經過這些修改,使用上感覺更加穩定,特別是在使用線性軸打字速度很快時,經過這樣修改,不論快速打英文或中文都沒問題。(如果在打中文時出現問題,可以比對中文輸入法的按鍵設定與keyd的設定是否有衝突?)

另外是把";"改為"/",以避開被[navig]定義鎖住後無法用同一個";"鍵自我解除。

以及加了幾個「不需modifier」的組合方式,以複合鍵(同時按下)做為單一鍵使用,這些一樣是為了讓手指不必移動大距離去找按鍵,一直維持在home row附近。

2+3 = esc
w+e = A-left <--這是切換terminator的tabs
x+c = A-tab
c+v = middlemouse
8+9 = backspace
i+o = A-right <--這是切換terminator的tabs
h+u = pageup
b+h = pagedown <--這是因為Alice鍵盤多了一個右手B鍵,如果不是Alice鍵盤就改一下別的組合。
comma+dot = S-C-n <--這是切換terminator分割區
以上的複合鍵在使用線性軸鍵盤時,感覺還蠻順暢,如果是用筆記型電腦本身的鍵盤,反應有點不是很順,可以依據你的鍵盤實際使用習慣,改成更適合手勢的組合。

當然使用keyd這些新規則的按鍵方式,是需要一點時間來記憶跟適應,我相信熟悉這種佈局的按鍵排列之後,會比以往使用傳統式按鍵佈局更順手。

順便一提,keyd是透過kernel層來管理鍵盤,所以可能無法port到別的OS(?),另一個跟keyd類似的是 https://github.com/jtroo/kanata 它可以在Windows或macOS(功能受限)使用,不過它的設定檔不如keyd這麼簡單明瞭、好上手。

以下是 /etc/keyd/default.conf

[ids]
*

[main]
capslock = overload(caps, C-space)
leftshift = overload(shift, M-a)
rightshift = overload(shift, M-f)
rightcontrol = overload(candm, C-f12)
rightalt = layer(rightalt)
leftalt = layer(navig)
2+3 = esc
w+e = A-left
x+c = A-tab
c+v = middlemouse
8+9 = backspace
i+o = A-right
h+u = pageup
b+h = pagedown
comma+dot = S-C-n
a = overloadi(a, timeout(overloadt2(navig, a, 200), 500, a), 125)
s = overloadi(s, timeout(overloadt2(shift, s, 200), 500, s), 125)
d = overloadi(d, timeout(overloadt2(control, d, 200), 500, d), 125)
f = overloadi(f, timeout(overloadt2(meta, f, 200), 500, f), 125)
j = overloadi(j, timeout(overloadt2(meta, j, 200), 500, j), 125)
k = overloadi(k, timeout(overloadt2(control, k, 200), 500, k), 125)
l = overloadi(l, timeout(overloadt2(shift, l, 200), 500, l), 125)
/ = overloadi(/, timeout(overloadt2(rightalt, /, 200), 500, /), 125)

[caps:C]
f = esc
g = `
j = leftmouse
k = middlemouse
l = rightmouse
t = S-C-f

[candm:M]

[navig:A]
layer_indicator = 1
i = up
j = left
k = down
l = right
h = home
' = pagedown
y = backspace
p = pageup
u = delete
; = end
m = mute
, = volumedown
. = volumeup
space = space
[ = A-left
] = A-right

[rightalt:A]
j = toggle(navig)

2025-04-27

keyd default.conf 新嚐試

 主要修改是把幾個modifier加到home row,也就是ASDFGHJKL基本位這一行,讓手指不需移動到更遠的地方,能方便操作。以及加了timeout給幾個modifier,因為發現在不同鍵盤可能反應時間不同,如果不加timeout會出現非預期的結果。像是在terminal要打sudo時,會出現大寫U,打"cd空一格" 時會變成Ctrl+space呼叫中文輸入,在browser裡打字要打at時會變成Alt+T,要打do會變成Ctrl+O要Open file,要打dp會變成Ctrl+P列印頁面。

 所謂timeout指的是按鍵在按下後,在多少範圍時間內又放掉而且不搭配其他鍵,單位是millisecond。不加timeout的話,只要鍵被下去下後沒再同時按了別的鍵,放開後,就是做為單鍵用,不管這期間的時間長短。加timeout的話就限制要在這樣的時間內完成同時按別的鍵,才有效,否則做為單鍵用。

 至於該用多少的時隙值,目前以200為較符合我的鍵盤,這幾個timeout是從錯誤嚐試中評估出來的,用在別的鍵盤不一定適用,該用多長的timeout需要慢慢試,會因鍵盤或是個人的操作習慣而不同。

另外就是把「右Ctrl」改成當Meta用。(註:Meta在其他OS或軟體有叫做WindowsKey、或Super、或Command)

左手:
字母A鍵可以作為Alt功能
字母S鍵可以作為Shift功能
字母D鍵可以作為Ctrl功能
字母F鍵可以作為Meta功能
右手:
字母;鍵可以作為Alt功能
字母L鍵可以作為Shift功能
字母K鍵可以作為Ctrl功能
字母J鍵可以作為Meta功能

註: 如果有出現跟中文輸入衝突的情況,可以找一下中文輸入介面的設定,看有什麼按鍵可以改設定以避開衝突,我是用hime輸入介面,其中有一項是單按Shift可以輸入片語,我把它取消。

"overload"跟"overloadt"差別在尾巴那個"t",是用來指定該鍵單用的timeout,在這個時間範圍內做為單用,否則為組合用。

"caps" layer加了":C"來繼承Ctrl layer,讓CapsLock在指定那幾個字母組合裡有特殊用途,其餘便按照Ctrl一般使用,這裡還加了三個mouse作用,用來模擬成老鼠左、中、右三個按鈕,在操作瀏覽器或GUI軟體時可以用。

"navig" layer加了":A"繼承Alt layer,就是在指定的鍵之外,通通跟Alt鍵的使用一樣。

[ids]
*

[main]
capslock = overload(caps, C-space)
leftshift = overload(shift, M-a) 
rightshift = overload(shift, M-f)
rightalt = layer(rightalt)
leftalt = layer(navig)
rightcontrol = overload(candm, C-f12)
# 把「右Ctrl」指向自訂的 candm
# 以下的timeout都用200
a = overloadt(navig, a, 200)
s = overloadt(shift, s, 200)
d = overloadt(control, d, 200)
f = overloadt(meta, f, 200)
j = overloadt(meta, j, 200)
k = overloadt(control, k, 200)
l = overloadt(shift, l, 200)
; = overloadt(altgr, ;, 200)

[caps:C]
# 繼承Ctrl
f = esc
g = `
j = leftmouse
k = middlemouse
l = rightmouse
t = S-C-f

[candm:M]
# 不做任何指定,直接繼承Meta

[navig:A]
# 繼承Alt
i = up
j = left
k = down
l = right
h = home
' = end
y = backspace
p = pageup
u = delete
; = pagedown
m = mute
, = volumedown
. = volumeup
space = space
[ = A-left
] = A-right

[rightalt:A]
j = toggle(navig)

2025-04-18

在Linux使用非QMK鍵盤

 對於不是使用QMK firmware的鍵盤,我們還是可以用其他軟體來設定,之前用過xmodmap, setxkbmap, xcape來設定鍵盤,讓它更能快速、方便操作不同組合疊層(layer),但都需要交互搭配,使用起來有點麻煩。後來試用keyd之後發現前幾個都不必,只要一支keyd全部搞定!

 keyd的開發者還在繼續研發中,像device.c, config.c 最後更新時間是兩個禮拜前。keyd的config是純文字檔,位置在/etc/keyd/default.conf,相對的簡單明瞭,不像有些鍵盤設定軟體的config檔不太好維護。

 keyd是用C寫的,體積很小,執行檔不到兩百多KB,它是從kernel level來改變鍵盤行為與佈局,跟前面那幾支僅限在X11環境不同,所以keyd不論在X11/Wayland/tty console都能使用,反應速度快而且是透過systemctl來啟動、停止,簡單好用。

 如果請大家來投票鍵盤上哪個鍵最沒用?我想CapsLock應該會是第一名!它最沒用卻佔住最有用的位置之一,所以把它改成常用的功能吧!只要以下內容放在default.conf裡

[ids]
*
[main]
capslock = C-space 

這四行就足夠了,這樣按一下CapsLock就等同按Ctrl-space切換中文輸入程式

 不過這太簡單了,我們的需求應該不止這樣。鍵盤上另一個沒什麼用的按鍵就是右手下方的Ctrl,我把一個簡單的功能加給它,用來彈出或收回類比時鐘oclock,已經把它定義在fluxbox的「Control加F12」。當「右Ctrl」只按一下,而不跟任何鍵搭配時,就會執行「Ctrl-F12」呼叫出oclock。

 左或右的Shift僅按一下的話,便是用來切換左側或右側的桌面,fluxbox稱為NextWorkspace, PrevWorkspace,把它定義在fluxbox的「Super_L(左Win)-a」及「Super_L-f」。「左Alt」按住不放的同時再按[navig]所定義的某個鍵,可以「僅執行一次[navig]」的功能,「右Alt」跟「j」同時按住,可以鎖定[navig]功能,再一次按「右Alt」跟「j」解除已鎖定的[navig]功能。以下是我目前使用的設定例子:

[ids]
*
# *號的意思是宣告不限制特定輸入來源,凡接在這台電腦上的都受這個設定管控
[main]
capslock = overload(caps, C-space)
leftshift = overload(shift, M-a)
rightshift = overload(shift, M-f)
rightalt = layer(rightalt)
alt = overload(navig, leftalt)
rightcontrol = overload(control, C-f12)

# 以下自訂三個疊層 caps, navig, rightalt:A
[caps]
f = esc
g = `

[navig]
i = up
j = left
k = down
l = right
h = home
' = end
y = backspace
p = pageup
u = delete
; = pagedown
m = mute
, = volumedown
. = volumeup
n = M-n
space = space
[ = A-left
] = A-right
left = A-left
right = A-right

[rightalt:A]
j = toggle(navig)
# 這裡加了 :A 的意思是這個疊層除了按j用來固定(或解除)navig疊層之外,其餘都遵行原始的Alt搭配鍵。

CapsLock定義成 overload(caps, C-space) 意思是「按一下CapsLock」便執行Ctrl-space,如果搭配其他鍵,就執行「caps」這個自定疊層,當按住CapsLock以及f時,等同按了Esc,當按住CapsLock以及g時,等同按了「`」讓中文輸入列出同音字(例如在倉頡輸入時)。 A-left及A-right是定義成在terminator裡切換next_tab或prev_tab用。以上只是簡單的例子,大家可以根據自己的喜好任意修改,搭疊出更多好用的功能。
keyd可以找linux distribution本身repository裡的來用,或是抓github的source來安裝,keyd放在
https://github.com/rvaiya/keyd

2025-02-27

MacBook與Linux kernel

 之前在一台退休的Intel MacBook跑Linux Live系統都只是用USB隨身碟開機進入使用,完全沒動到它的SSD,因為老機器RAM很少,不能用"toram"來載入,因此全程都要掛一支USB碟在機器上,其實有些不方便也不好看。

 後來這台MacBook的macOS已經無法再升級(其實硬要升級還是有辦法,只是已經對使用macOS沒什麼興趣)。個人在各種機器上使用Linux Live system已經二十幾年了,想到這台老MacBook的touchpad觸感不錯,重量相對的輕,電池續航力也有三個多小時,偶而帶它外出也蠻好用,現在把它的SSD割了10GB一小塊,打算用來塞入Live system(只是單純從USB copy到SSD, 不是執行正常的Linux install)。

 之前做的USB開機碟可以支援MacBook本身的Wifi以及Camera,更新到最後是Ubuntu 20.04.4,可以看到MacBook的SSD無誤,但有一陣子沒再用它,加上20.04有點年紀了,某些軟體無法換用新版本,於是這次改用Debian Trixie來開機,並且做好Wifi以及Camera(Mac叫做FacetimeHD)的支援,MacBook的硬體都能用到。

只是用它開機完成後,發現完全看不到MacBook已經割好的SSD!就是說用cat /proc/partitions時除了USB隨身碟之外完全看不到MacBook的SSD partition。變成使用的全程要一直依賴插一支支USB隨身碟。

 這時再降回去用Ubuntu 20.04.4開機,卻是可以在/proc/partitions看得到SSD,先懷疑Trixie包的initrd方式不同,於是拆除initrd裡的early,early2,再試還是一樣!看來不是initrd裡面的問題。

 搜尋網路上的相關Linux以及MacBook的資訊,但看到一堆都是講怎麼用apfs-fuse來mount,而我遇到的問題是完全看不到SSD,跟mount的問題無關。

 接著分別找了Arch,Debian,Ubuntu相關或衍生的distribuion的kernel/initrd (4.x或5.x以及6.x)來開機比對,發現只有5.x能看到SSD,而4.x跟6.x都看不到,真的是很奇怪的問題?

 又在網路上陸續找一些相關MacBook問題,最後找到一篇小小的文裡提到解決方法是在boot option加上intel_iommu=off

 加了這個option的Trixie 6.x kernel開機後果然能看到MacBook的SSD。

 那麼隨機找幾個不同kernel版本來看看它是怎麼定義"intel_iommu"的?

  • 4.9.0
    CONFIG_INTEL_IOMMU_DEFAULT_ON=y
  • 4.15.0-20
    CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
  • 5.10.188
    CONFIG_INTEL_IOMMU_DEFAULT_OFF=y
  • 5.19.0-32
    CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
  • 6.1.0-29
    CONFIG_INTEL_IOMMU_DEFAULT_OFF is not set
  • 6.11.5
    CONFIG_INTEL_IOMMU_DEFAULT_OFF is not set
  • 6.12.6-1
    CONFIG_INTEL_IOMMU_DEFAULT_ON=y
  • 6.13.2
    CONFIG_INTEL_IOMMU_DEFAULT_ON=y

 以上各版本kernel在不加任何boot option的情況下,只有5.10.188可以看得到MacBook SSD, 因為只有它是CONFIG_INTEL_IOMMU_DEFAULT_OFF=y 也就相當於在開機時加上 intel_iommu=off

 其它版本有幾個都是相當於
intel_iommu=on
或可以說,沒定義成off 就看不到SSD了。

 根據kernel文件提到「The Intel IOMMU driver allocates a virtual address per domain. Each PCIE device has its own domain.」
如果想進一步研究,可以參考以下文件:
http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/vt-directed-io-spec.pdf

2025-01-31

Deepseek R1與π小數點

 農歷新年這幾天,Deepseek成為新聞談話的主題,因為它把NVDA股價嚇了一大跳,原本只是到Youtube找找看有什麼評論資訊,其中看到包括微軟退休工程師David Plummer的看法,他提到如果Deepseek所宣稱的都是真的,那就像你在家裡就可以自製一台法拉利跑車,而且功能完全跟公司貨真品法拉利一模一樣,這當會嚇掉法拉利公司的股價。

 David又提到從它的model來看,它是從大model來training出小model,這個小model不必依賴強大的硬體就能在一般人家裡的電腦執行AI。

就像幾十年前個人電腦發展史一樣,PC出來的時候讓一般人不必購買像大公司大機構裡的大電腦,而可以擁有自己的個人電腦來執行各種軟體。但這樣的問題是,當大model裡有什麼bug,由它train出來的小model便繼承了先前的bug。

 另外也看了Jeff Geerling以及Aleksandar Haber的Youtube video,發現只要用Raspberry Pi也可以安裝小model的Deepseek在家裡玩,於是動手用一台比Pi的性能還高一些的舊Macmini(16GB RAM)裝來玩玩看。從https://www.ollama.com可以找到六個distill的版本,當然也有原本的R1(671b)。我的舊Macmini完全沒有NVidia GPU,所以不可能快,不過我想正確性應該相同。

先裝一個最低階1.5b來玩,發現它幾乎答非所問,於是再裝一個8b的,問它列出π小數點後面100位,結果它開始跟我聊天,說什麼一般人不會用到小數點後面100位,接著東扯西扯。我想這跟我的電腦沒有NVidia GPU應該無關吧?但它還是繼續東扯西扯就是不肯列出小數點後面100位,後來終於列了小數點後40位,不過我一看,從第21位數開始就是錯的!因為我記得小數點後面50位,可以百分之百確認從第21位之後就是錯的。

 我再孤狗一下「怎麼用python程式列出π小數點後面100位」,得出來的結果是只用了三行python code就能做到要列幾位數就列幾位數,但是為什麼8b model 的deepseek一直列不出來?

 另外在一篇網路文章https://www.kelacyber.com/blog/deepseek-r1-security-flaws/ 裡看到說他利用兩年前早就公開的技術,可以jailbreak Deepseek來得到想要的資料,也就是說別的AI裡早已補起來的漏洞,在Deepseek卻仍存在!而且能從Deepseek得到一些違法的知識,像是製造爆裂物等等。

 目前OpenAI也質疑Deepseek偷了他們的東西來用,這也讓人難免不想到中國各行各業過去幾十年來總是盜用、抄襲別人的智慧財,OpenAI指責Deepseek利用OpenAI的model來train Deepseek的model,也就像盜印圖書館的書來自己成立一間圖書館,這樣當然不必花大錢買書。但目前對於版權的法律還沒進步到AI這一塊,因此就算OpenAI能舉出Deepseek抄襲、盜用,這個問題目前仍是無解。

2024-12-28

Bluetooth跟network stack有關嗎?

最近拿到一台Asus UX303UB舊電腦, 原主人嫌它在Windows跑不動,我拿來跑Debian Trixie,週邊device都沒什麼問題,查一下BIOS是202版,未曾更新,再到Asus網站download新版302來升級。下載的BIOS是zip檔,解開之後cp到USB隨身碟上。

這台機器的好處是可以直接開機進BIOS,在這環境下升級BIOS,不必依賴其他程式在Windows環境裡進行升級。開機按F2進BIOS畫面,從flash的畫面找到USB碟上面的BIOS檔案,按下去,確認要升級,等BIOS升級完成後reboot進入Trixie,跑一個script來巡一遍系統週邊,發現竟然沒有Bluetooth!

用lsmod查一下bluetooth module已載入無誤,modinfo查它並不需要相關firmware,再用rfkill看竟然沒有bluetooth, systemctl查bluetooth有啟動,bluetoothctl查看是沒有controller!太奇怪了!原本有啊!

重開機進BIOS畫面找找看是不是有什麼bluetooth的設定?找了半天並沒有,倒是有一個Network stack的設定項目,發現它是disabled,之前看到是enabled,所以把它改回enable,包括ipv4、ipv6,然後重開機進Trixie,有bluetooth了!

試試看連接Android手機傳送檔案、藍牙喇叭,都可以正常工作。

google查了一下好像找不到bluetooth跟network stack有相關的資訊?

2024-03-16

隨手關歪壞(Wifi)

日常生活中大家常說「要隨手關燈、要隨手關水龍頭」,但是沒有人說「要隨手關歪壞」?一來是人們使用歪壞也沒幾年,對歪壞認識不多,反正種花電信來安裝,可以用就好了,沒想過要關掉。二是歪壞設備大部份是沒有像電燈的開關,沒辦法讓人按一下就關、就開。

大部份歪壞設備要透過網路從瀏覽器畫面登入,再慢慢翻頁到可以關或開的選項,然後進行設定,而且幾乎只有透過時程控管開或關,沒有按一下就開或關的,而且按一下設定之後,還要等一段時間讓歪壞重新啟動才能生效。

現在市售歪壞設備更是標榜「穿牆」,功率越強越好,賣方跟買方都有這樣訴求。所以我們打開歪壞一掃,左右鄰居的AP名字都會出現,有的甚至比你家裡的更強!

嚴格一點來看,歪壞訊號到處射,也會有安全上的隱憂吧?如果能「隨手關歪壞」應該會比較安全,也比較環保。

要能夠隨手關歪壞,大概只有自己DIY一途,DIY需要哪些東西?(可能需要一點電子焊接工作) 

1.一組SBC ARM電腦,例如各種Pi,Banana pi Zero, NanoPi Neo, RPi zero……,不需要高規格硬體。
2.作業系統使用Linux,所以需要一些基本的使用經驗。
3.Wifi硬體,SBC板上內建的,或PCIe/MiniPCIe介面的,或USB介面的,最好有外接天線。(可能會遇到某些硬體沒有支援AP mode,或需要自行compile driver,要實際試才知道)
4.紅外線接收頭(有些SBC會內建),網路買一個5元以內(搜尋1838B這一款),紅外線發射器(家裡不用的紅外線遙控器,或壞掉只剩一個按鍵正常的遙控器,因為我們只要用一個鍵就夠了)
5.一個LED(可以是onboard的或接在GPIO腳上)來顯示歪壞On/Off,或是接一個WS2812(NeoPixel)多彩LED,這個好用,只要三支GPIO就能控制幾十個RGB LED。
6.板上內建的MCU或外接的MCU(例如RPi pico 或 RP2040-zero),用來解讀紅外線訊號,下指令控制歪壞的開、關。
7.用某種語言來寫控制介面,例如常見的python,以及MCU上面的程式(例如circuitpython)。
8.底層控制程式,一為控制AP的hostapd,另一為dhcpd(可以用dnsmasq或是更簡便的busybox udhcpd)分配IP,以及routing, iptables NAT給client端。

SBC上面內建紅外線接收頭是最方便的,如果沒有,就要在GPIO上面插紅外線接收頭,如果從GPIO插有問題,那就把紅外線接收頭插在USB外接式MCU(RPi pico 或RP2040-zero)上面也可以。

解碼紅外線發射器的某個按鍵所發出來訊號的值,如果是內建MCU,可以在SBC上面執行例如"sudo ir-keytable -c -t"來讀取按鍵值,以便寫入介面程式。如果用RPi pico或RP2040-zero這種外接MCU,可以用"adafruit_irremote"這個circuitpython用的library來讀取按鍵值。

用bash寫一個同時啟動dhcpd以及hostapd的介面程式。

最後寫一個銜接MCU到OS的介面程式,來「開」「關」歪壞AP。
1.紅外線『發射器』送出訊號
2.紅外線『接收頭』收到訊號
3.MCU確認這個訊號是要控制歪壞AP,而非其他按鍵
4.MCU向介面程式傳達『收到了』
5.介面程式檢查hostapd,若是未執行,就執行bash介面,啟動hostapd及dhcpd
6.介面程式檢查hostapd,若是執行中,就執行bash介面,中斷hostapd及dhcpd

完成之後,按下遙控器上某一個鍵,歪壞就開啟,LED就亮,再按一下同一鍵,歪壞就關閉,LED就滅,這樣就能「隨手關歪壞」了。

2023-09-18

UV-K5可以DIY firmware的無線電

 之前玩過DM-1801自行燒OpenGD-77 firmware,最近又有一支新手機UV-K5,一樣可以自行燒firmware(不是燒OpenGD-77). 網路上已經有多種firmware以及附加功能,覺得最有用的應該算「Advanced Spectrum(頻譜掃描)」,原廠firmware的掃描只能看到頻率數字,這個增加的Spectrum可以開到3.2MHz頻寬 可以達到12.8MHz 寬度來掃描(比RTL-SDR的2.4MHz還寬)進行掃描,看著範圍內的出現訊號,並能聽到被掃到的頻率通訊內容。(OpenGD-77的掃描在進行時,是無法聽到訊通內容的,但UV-K5的firmware可以聽。)

這些公開的firmware可以打開全部頻寬,從18到1300MHz,不過受限於BK4819本身的限制,中間有一小段620到840 MHz是無法工作的。它可以收聽AM通訊,像是飛航管制等等(不是一般中波AM廣播),也能聽一般FM廣播,就是包括日本跟台灣的範圍,76到108MHz這一段的wide FM,以及包括SATCOM衛星電話的243-270MHz。

不過它的AM效果不很理想,就是聽起來有些背景雜訊,以RCSS ATIS為例,127.4有些雜訊,但341.0就很清晰,這幾天在Telegram UV-K5群組裡看到有人利用改register的辦法,也能聽SSB(LSB/USB)!

網路上看到有人說加一個100nF(104)的電容跨在喇叭的兩個端子,可以改善音質,但我實際拆機DIY焊上去之後,覺得音效沒有明顯變化。據說UV-K6的喇叭仍然跟K5用同一個型號,只是加了一粒電容。

在Linux環境原本只能透過wine比官方的燒錄軟體,現在已經有web介面的方法,不管是在Linux或Windows環境都是只用瀏覽器(Chrome)就能燒firmware,當然你要有一條連接UV-K5跟電腦的cable,它的腳位跟Kenwood的cable是一樣的,當然也可以自行DIY。
3.5mm耳機插頭中段跟尖端都沒接,只用到根部RX,要接到USB-TTL(例如FTDI/PL2303…等等)的TX
2.5mm耳機插頭的根部是GND,中段是TX,要接到USB-TTL的RX,尖端沒接
Web介面的燒錄在這裡
https://github.com/whosmatt/uvmod
https://github.com/RE3CON/UVMOD-Enhanced
解開打包後,cd到它的目錄,執行
python3 -m http.server 8000
打開Chrome瀏覽器(firefox可以看,沒辦法燒)
http://localhost:8000
一項一項的勾選你要的功能,最後不能大於大於61439 bytes,再按Patch firmware,然後按Flash directly,就開始燒你選的firmware.

要注意的是,在不該發射的頻率工作,除了自身電氣迴路可能受損,它的溢出波也會很多,會造成週圍的干擾,另外在群組裡看到是這支手機的發射功率不佳,所以建議就拿它當一台寬頻純接收機來現就好。

一台才二十幾美元(台灣露天賣699台元),光是拿來當有頻譜功能的接收機,它的C/P值已經爆表了!

2023-03-31

pico解譯各種紅外線訊號

利用Raspberry Pi Pico + Adafruit 的 IR remote library 來做個泛用型紅外線接收器,插到電腦的USB就可以用來遙控任何電腦。

https://github.com/adafruit/Adafruit_CircuitPython_IRRemote

只需要 copy adafruit_irremote.py 放到 pico 的lib/ 目錄下面即可

這裡所謂泛用是說,因為同樣是按數字「2」,但不同遙控器發射出來的訊號卻不一樣。任何市面上有的紅外線遙控器,像是控制電視、播放機、機上盒、DVD機、選台器,甚至市售萬用型紅外線遙控器也是,都可以拿來做為遙控pico用。

IR receiver 有三支腳,接到pico的GPIO腳,一支接3V3 一支接GND 一支接任何GPIO, 然後把GPIO腳的GPXX 代入 pulsein 裡,這裡以GP18為例。

import board, pulseio, adafruit_irremote
pulsein = pulseio.PulseIn(board.GP18, maxlen=128, idle_state=True)

def draw():
  decoder = adafruit_irremote.GenericDecode()
  while True:
    try:
      pulses = decoder.read_pulses(pulsein)
      code = decoder.decode_bits(pulses)
      pulses.clear()
      print(code)
    except Exception as ex:
      print(str(ex))

然後從電腦用 pyserial-miniterm /dev/ttyACM0 115200 --raw 指令就可以連上pico, 來看你用的紅外線遙控器發射什麼訊號碼?

大部份解出來的都有四組數字,以我手上的幾支發射器,解出來像是
(255, 0, 183, 72)
(255, 0, 191, 64)
(255, 0, 199, 56)
或是
(49, 107, 69, 186)
(49, 107, 203, 52)
(49, 107, 163, 92)
或是
(158, 41, 15, 240)
(158, 41, 159, 96)
(158, 41, 191, 64)
或是
(191, 191, 167, 88)
(191, 191, 143, 112)
(191, 191, 39, 216)
但也有只發射兩組數字的,像是
(29, 191)
(29, 79)
(29, 207)
(這種是市售的一種包含USB接收器的遙控組,一組一百多台幣)
以四組碼的來說,前兩碼是固定,可以用第三碼來辨識發射的是哪個鍵
而兩組訊號碼的,第一碼是固定,可以用第二碼來辨識發射的是哪個鍵

知道這些訊號碼之後,就可以搭配像是Adafruit HID linbrary 來模擬鍵盤或老鼠來控制電腦,或單純從serial port送按鍵碼給電腦來做操控。

https://github.com/adafruit/Adafruit_CircuitPython_HID

較早的版本有分給circuitpython 7 或 8 版用,現在都用 8 所以只有一個目錄
adafruit_hid
把整個目錄copy到pico lib/ 下面即可使用。
例如:

elif code[2] == 63:
    kbd.send(Keycode.CONTROL, Keycode.W)
    如果第三碼是 63 就按下 Ctrl 跟 w 關閉分頁
 

elif code[2] == 123:
    kbd.send(Keycode.CONTROL, Keycode.SHIFT, Keycode.EQUALS)
    如果第三碼是123就按下Ctrl 跟 + 放大(zoom in)

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-07-31

SDR與電腦的連接設置

 RTL SDR出現在巿面大概快20年了吧?之後各種不同牌子的SDR紛紛出現,在功能上更加複雜,不過還是以RTL283x 為基礎的RTL-SDR最普遍,雖然它的頻寬只有2MHz,其它SDR甚至有頻寬幾十MHz。

一開始RTL-SDR出現巿面時大都沒有TCXO,後來的產品才有這個功能,當然價格也會有所不同,在開機使用一段時間後SDR溫度會上升,導致頻率偏移,TCXO是做為熱偏移補償,工作頻率才能穩定。

絕大多數SDR都是以USB裝置連接到電腦上,這樣可能接涉到所在位置的訊號強弱。如果SDR放在訊號強的地方,再透過網路讓其他電腦接收,就能得到更良好的結果。rtl-sdr軟體包裡面的rtl_tcp就是這個用途。

直接執行rtl_tcp 按Enter,然後可以在gqrx的Device選項裡找RTL-SDR Spectrum Server,在Device string項目裡使用rtl_tcp=localhost:1234,這是使用RTL SDR。

如果使用RSP公司的SDR例是RSP1A, 可以先安裝RSP公司的 "SDRplay_RSP_API-Linux-3.07.1.run" 再安裝 https://github.com/SDRplay/RSPTCPServer 這樣可以讓gqrx 也能使用 RSP1A (gqrx是不支援RSP1A, 在device設定裡是看不到的).

使用rsp_tcp之前要先執行 systemctl start sdrplay 再執行 rsp_tcp, 在gqrx的Device選項跟使用 rtl_tcp 完全一樣。

既然能透過TCP方式讓SDR跟電腦連接,那就是可以把SDR與電腦分別放在不同地方,只要網路能連上,就能使用,這時 rtl_tcp(或rsp_tcp) 要加上IP參數,例如 "rtl_tcp -a 192.168.3.135",不過有時候gqrx仍無法連線時,可以試試看加上 "-n" 也就是例如 "rtl_tcp -a 192.168.3.135 -n 250", rsp_tcp 的使用也一樣。

2021-04-05

在Linux對Raspberry Pi Pico改裝micropython

 這是在純文字的 Linux shell 裡對 Pico 進行的基礎動作。
(也可以用來對 BBC micro:bit 動作)

使用 lsusb 可以看到這個 Pico 是這樣
Bus 001 Device 017: ID 2e8a:0003 Raspberry Pi RP2 Boot
再用 cat /proc/partitions 可以看到它預設 partition 已經割出一個
   8       32     131072 sdc
   8       33     131071 sdc1
(因為我已經插了一支 USB 佔掉 sdb, 所以這裡顯示 sdc)

如果用 fdisk -l 可以看到
/dev/sdc1 1 262143 262143 128M e W95 FAT16 (LBA)

在這裡可以下載 micropython for Pico
https://micropython.org/download/rp2-pico/

rp2-pico-20210403-unstable-v1.14-132-gd87f42b0e.uf2 (目前最新的)

按住 Pico USB旁邊的 BOOTSEL 然後插上 micro USB 到你的電腦
用手動掛載 Pico:
mount /dev/sdc1 /media/sdc1
再把下載來的 micropython 的 uf2 檔直接 copy 到 Pico 的 partition 1
cp rp2-pico-20210205-unstable-v1.14-8-g1f800cac3.uf2 /media/sdc1

然後 Pico 自己會 reboot 進入 micropython mode

使用 miniterm (只要裝了 python serial 就會有的一個好用 terminal)
miniterm /dev/ttyACM0 115200 --raw  就連進 Pico 的 micropython 提示符號

2021-03-31

Raspberry Pi 也發售微控器了

 2021年Raspberry Pi推出這一款微控器:
https://tutorials-raspberrypi.com/raspberry-pi-pico-programming-with-the-affordable-microcontroller/

這個Raspberry Pi Pico, 是一個比一般 Arduino 腳位多,還有 dual cores
售價一百多元台幣的 micro controller.
注意,它不是之前所有的 RPi 那種小型ARM電腦!

板上有26支 GPIO, 因為有 dual cores, 在使用 micropython 時可以跑兩個 threads.
133MHz, 內建溫度感測sensor.
Arduino IDE有支援,所以可以藉由Arduino來開發程式。

特點之一是低耗電,所以可以撐很久。
缺點之一是沒有對外連線,不過Microcontroller本來就不負責連線的事,只要加上週邊設備就能連了。

2020-09-29

KiwiSDR開放全世界天空

隨著電子科技不斷進步,這幾年SDR產品越來越多,因為成本相對的低,所以甚至有不少SDR都開放在網路上任人操作,其中一個就是KiwiSDR,這是一款只有接收的SDR(有些SDR是可以發射電波的)。只要你有適合的環境(天線是必備的),買了它的產品後就可以架設網路站台,讓任何人透過網路來操作你這一台SDR。

http://www.kiwisdr.com/
這是它的官網,任何人有興趣都可以點開它的全世界分部站
http://rx.linkfanel.net/

然後依照你想聽的地方去找看看有沒有人提供服務

目前台灣唯一的一台是BM2KVV所架設提供的服務,點進去,它的default是接收本地的AM電台
http://jplin53.proxy.kiwisdr.com:8073/

你可以操作右下角的控制面板來改變頻率、模式、Waterfall的參數……等等
例如老鼠移到藍色waterfall轉動中央滾輪,可以改變大小(放大、縮小),或左右拖動來改變範圍。

建議把 Waterfall調到 0dB 比較不刺眼,WF Rate也把它調到 Med 或Slow,如果你不是那麼想看它的變化。



KiwiSDR的接收範圍主要是0到30MHz,不過也有少數KiwiSDR台是以接收航空波段,像是這裡有列出所有公開的KiwiSDR站台。
http://kiwisdr.com/public/

日本JP1ODJ有提供一台從118到140MHz的航空波段,位於東京附近,以及俄羅斯也有一台從108到138MHz的航空波段是在莫斯科附近。








由於AM電台從上個世紀到現在仍然在人類社會活得好好的,全世界都有,所以可以透過KiwiSDR聽到全世界各地最原汁原味的廣播,當然你只要能聽懂當地語言,就可以盡情的收聽,而不像短波廣播基本上都由有相當強大資源的政府或宗教來主持,local的AM電台就是小市民的日常生活。

例如想聽聽祖國的廣播,可以按這裡,這是在祖國首都附近的KiwiSDR接收台

http://83.87.152.133:8073/

它除了可以聽到祖國當地的廣播,也可以收到對岸的廣播


不出門也可以週遊全世界,聽到最原汁的當地語言。

2020-06-14

Intel NUC8 S3醒不過來

Intel NUC8xxBEH 在進入S3狀態後,可以按鍵盤上任意鍵讓它醒過來。
不過,如果拔除USB keyboard 再插入,這時再按任意鍵盤,電腦卻不會醒過來。
那不然按一下power鍵,結果就死掉了,連power鍵的heartbeat都滅掉!
也就是要重新投胎,重開機了!

快換新版BIOS吧!換了BE0081.bio就可以正常了。
就是上面的情況(拔除鍵盤,再插回鍵盤)下,可以按一下power鍵,讓電腦醒過來。
BE0081.bio是2002年5月的。