2024年4月11日 星期四

設定輕巧視窗環境 icewm

先前 在 eee pc 上面安裝 debian 時, 需要找一個輕量級的視窗管理員, 其中最關鍵的參數是記憶體用量。 這篇文章 比較十幾個視窗管理員, 看到 icewm 時就毫不猶豫地選它了, 因為它是我二十幾年的老朋友。 本文描述的是 debian 12.5 (bookworm) 上的 icewm 3.3.1。

一、 基本設定

安裝好 icewm 套件之後, 先把系統的幾個設定檔拷貝回家目錄: mkdir -p ~/.config/icewm ; cp -a /usr/share/icewm/{preferences,toolbar,menu} ~/.config/icewm/ 。 等一下凡是修改過 ~/.config/icewm/ 底下的設定檔, 只要下 icewm --restart 就會生效。 主設定檔是 preferences; 工具列設定在 toolbar; 主選單在 menu。

[中文字型] 剛裝好時, 預設採用英文字型, 選單上的文字大半是空的 :-( 假設你已安裝 fonts-arphic-ukai (文鼎楷書) 套件, 那麼: fc-list :lang=zh | grep -i ukai 會看到一些可用的中文字型。 等一下我要選用 "AR PL UKai TW:style=Book"。 字型設定在 preferences 裡面所有提及 FontName 跟 FontNameXft 的地方。 可能因為預設 PreferFreetypeFonts=1 也就是 xft 字型 優先, 所以只需要把所有提及 Xft 的設定改掉即可:

grep 'FontNameXft' preferences
perl -i.bak -pe 's/^#\s*(\w+FontNameXft=)"[^:]*(.*)"/$1"AR PL UKai TW:style=Book$2"/' preferences

不小心改壞了沒關係, 上面指令會產生 preferences.bak, 而且系統的 /usr/share/icewm/preferences 也還在呀!

[閃個不停,煩欸] 某些情況下 (可能是因為我在 ~/.inputrc 裡面有設 set prefer-visible-bell ?) 我在終端機啟動某些事, 滑鼠離開後才完成, 而 icewm 為了提醒我, 下面工具列上的終端機 icon 會一直閃, 直到我去點終端機它才會停。 只要把 FocusRequestFlashTime 從預設的 0 ("你不點我,我就閃到地老天荒") 改成 2 或 3 (數秒後停止) 即可。

[登入後自動啟動的 apps; 桌布] 在 ~/.config/icewm/ 目錄建立一個文字檔 startup, 記得要 chmod u+x startup。 裡面放入你希望登入時自動啟動的 apps, 像這樣:

sakura -n 3 -c 72 -r 20 &
firefox &
sleep 3 ; icewmbg --scaled=1 -i ~/images/dolphins.jpg
最後一句是設定桌布, 先睡三秒, 等佈景主題 (下詳) 的背景設好之後再覆蓋過去, 這樣的好處是: 之後不論換哪套佈景主題, 仍舊一律採用你自選的桌布。 startup 的設定, 下次登入時生效。

二、 選單

[常用程式放到工具列上] 我的 toolbar 設定檔長這樣:

prog "Sakura終端機" terminal sakura -n 3 -c 72 -r 24
prog "火狐瀏覽器" firefox-esr firefox

每句 prog 會在下方工具列增加一個按鈕。 後面的欄位依序是: 顯示文字名稱、 圖像 (icon)、 啟重的指令與選項+參數。

[圖像檔的完整路徑?] 可以在 preferences 檔案裡設定 Trace="icon"、 用 icewm --restart 重新啟動 icewm、 登出、 從文字界面 (例如 ssh 連線或 VT2 到 VT6) 下: grep 'IceWM:.*icon' ~/.xsession-errors 即可查看每個 icon 檔的完整路徑。 在 這個 issue 查到的。 那個 ~/.xsession-errors 必須等登出之後才看得到完整的紀錄。 (而且這個方式: icewm --restart --trace=icon 並沒有效果。) 事實上 preferences 設定檔裡面有一個 IconPath 的選項, 它決定了 icewm 尋找 icon 的路徑與優先順序。 如果不嫌礙眼, 也可以直接把 icon 檔的完整路徑寫到 prog 指令的圖像欄位。

長在工具列上的選單

[工具列上還可以長出選單]icewm-menu-fdo 指令可以從系統資料自動產生一大串選單與子選單。 我從其中截一段, 例如 menu "美工繪圖" applications-graphics { ... } 把它貼到 toolbar 設定檔裡面。 如右圖, 重啟 icewm 之後, 工具列會多一個 icon, 裡面藏了一整個選單!

[主選單設定檔] 主選單設定檔是 menu。 先前說的 toolbar 設定檔的語法, 在 menu 裡面也都適用。 另外, 也可以用 include "abc" 彷彿把 abc 檔案內容直接貼在此處; menufile "標題" icon "額外的選單檔" 也類似, 可以把 "額外的選單檔" 所描述的選單在此處建立一個 (子選單) 選項, 但它的內容只能是選單格式。 例如預設的 menu 裡面就有這樣一句:

menufile Toolbar folder toolbar
# 指令   標題    icon   設定檔名稱

如果想加入一個「更換視窗管理員、 繼續工作階段」的選項, 可以在 menu 檔裡放入 restart 指令, 例如: restart "openbox" openbox openbox

也可以用 icewm-menu-fdo 跟 icewm-menu-xrandr 這兩個 (shell 底下的) 命令動態產生所有應用軟體的選單、 所有硬體螢幕的選單, 再用 includeprog 或 menuprog 將結果納入選單, 像我在 bookworm 的 ~/.config/icewm/menu 裡面看到的這兩句預設:

includeprog icewm-menu-fdo --no-sep-others --seps
menuprog Monitors ../devices/computer icewm-menu-xrandr

其他更多選單內可用的指令, 詳見 man 5 icewm-menu

三、 佈景主題

從主選單的 「設定」 => 「主題」 進去, 可以試選各種佈景主題。 如果想試更多, 可以到 box-lookgnome-look、 點選 (頁面上方) 想要的排序方式, 例如按評分 (rating) 或按更新時間 (latest) 排序、 下載你要的主題檔、 把檔案解壓縮到 /usr/share/icewm/themes 底下即可。

想要設定自己的桌布, 除了上述在 startup 裡面用 icewmbg 之外, 也可以:

mkdir ~/.config/icewm/themes
cp -a cp -a /usr/share/icewm/themes/你選的主題 ~/.config/icewm/themes/
cp 很帥的桌布.jpg ~/.config/icewm/themes/

然後編輯 ~/.config/icewm/themes/你選的主題/*.theme 找到這一句, 改成正確的檔名: DesktopBackgroundImage="很帥的桌布.jpg"

四、 其他設定

[免點,視窗自動跳起並獲得焦點] Linux 的許多視窗管理員都有 "AutoRaise" 的功能: 滑鼠移到某視窗上方停個零點幾秒, 不必點, 它自動就取得鍵盤滑鼠焦點。 手指使用過度的我, 非常仰賴它, 已用了二三十年, 到現在不知幫我的食指省了多少耗損。 從主選單的 「設定」 => 「焦點」 進去, 選 「精確滑鼠焦點」 ("Strict-mouse-focus"), 意謂著: 滑鼠移到哪個視窗, 鍵盤的輸入就跟著切換到那個視窗。 此時 icewm 會建立一個 ~/.config/icewm/focus_mode 設定檔, 內含一句 FocusMode=4 。 這效果相當於在 preferences 裡面手動設定 "AutoRaise=1" 以及其他某些設定,我沒研究。 建議不要手動設定 "AutoRaise=1", 以免 產生困惑的效果。 預設等待的時間太短 (還是根本不等我? 我反應太慢, 分不出來), 所以我又到 preferences 裡面, 找到 PointerFocusDelay 那一句, 把 200 改成 500。 (記得, 要重新啟動 icewm 才會生效!)

[看著 A 視窗的文件, 同時矇著眼睛在 B 視窗打字] 例如人工 OCR (看著圖形版的 pdf 檔,抄寫文字) 的時候, 可能會有此需求。 此時可以選擇 「粗略的滑鼠焦點」 (Sloppy-mouse-focus) 或 「安靜的滑鼠焦點」 (Quiet-sloppy-focus)。 如果需要自訂更複雜的規則, 就選 「自訂」 (custom), 並且要研究 這一頁 裡的 「FocusMode」 那一節最後面提到的十個選項。

[多個桌面] 從工具列可以看到: 預設有四個桌面。 在 preferences 裡面設定 WorkspaceNames 那一句, 可以改變桌面的個數及名稱。

[免點,切換桌面] 在 preferences 裡面設定 EdgeSwitch=1 跟 EdgeSwitchDelay=800 並重啟 icewm 之後, 滑鼠只要在螢幕右側或左側停留超過 0.8 秒, 就會自動切到隔壁的桌面。 就像移滑鼠自動切換視窗一樣, 食指又少了一些負擔。

[快速鍵] 有些快速鍵很好用, 例如 alt-tab 切換視窗、 alt-f10 把視窗放到最大、 alt-shift-f10 把視窗向垂直方向延伸填滿桌面、 .. 等等。 也可以在 keys 設定檔裡自訂其他快速鍵。 詳見 man 5 icewm-keys

IceWM FAQ and Howto 有更豐富的教學。

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。