X下輕量級桌面WindowMaker上手指南



layout: post
title: 輕量級桌面WindowMaker上手指南
tags: x11, cygwin, raspi

最近工作上需要在遠程Linux上運行一個桌面(我需要跑Netbeans, Firefox, Emacs和Seafile),但是MobaXterm自帶的兩個窗口管理器twm/dwm 都過於簡陋了(而且我覺得都比較無趣); 另一方面一直覺得樹莓派Raspbian自帶的桌面也不好用,我想找個替代品,於是我又想起了以前玩過一陣的WindowMaker。

WindowMaker(常簡稱wmaker,因為它的主程序文件是這個名字)歷史也很久,所以有些設計思想跟現在流行的window manager或者desktop environment差異比較大(從另一個角度說,現在流行的window manager都太雷同了,也就平鋪式的有點新意),但正因為如此,它也可以給我們增加一點新奇感。

WindowMaker的設計是基於NeXTSTEP的,另外還有一個叫做GNUStep的項目也是試圖克隆NeXTSTEP的(甚至編程語言也是Objective-C),它的目標定位是整個desktop environment(包含了文件管理器在、圖片查看器、界面設計器等),並且選擇了WindowMaker作為它的window manager(不過這個是用C語言開發的)。不過我不太喜歡GNUstep里面其它的組件,用起來都慢吞吞而且不穩定。

NeXTSTEP-like window manager for X

WindowMaker的幾個優點:

  • 絕大部分設置(全局快捷鍵也可以!)可以通過自帶的WPrefs程序即可設置,不必自己編輯配置文件,並且大多數是即時生效的;
  • 整體功能比較緊湊,不會需要很多額外的擴展包(是的,聽說fvwm是有很強的可配置性,可我難得折騰)
  • Cygwin官方倉庫有這個程序(在我這個場景里是挺重要的一點)
  • 而且,整體小巧、快捷,占用的內存少,所以很適合我的這兩個場景(Cygwin和Raspbian)

當然,缺點也挺明顯

  • appicon/miniwindows/dock/clip跟現在大家習慣的“任務欄”差別比較大,可能得適應一陣
  • 小部件不是太豐富(主要原因還的確在於wmaker比較古老,現在的人對它興趣不太大了)

參考:

dock/clip是任務欄嗎

首先說一下wmaker里面幾個相關的概念:

  • appicon: 每個程序跑起來時,會在桌面底部顯示一個圖標,這個圖標稱為application icon,常簡稱appicon。程序關掉之后,對應的圖標就消失了。我們可以拖動appicon到其它位置(比如隨意移動,或者移動到dock或者clip上)
  • dock: 桌面最右邊(缺省配置在右邊)有一列圖標,這列圖標就叫做dock。appicon拖動到這一列時就會“停靠”在這里了,即使程序關掉也不會消失,並且重啟WindowMaker它也還在,可以直接點擊它來啟動這個應用程序(當然,可以定制啟動方法,還可以定制一個鼠標中鍵點擊時執行的命令)——簡單地說,dock比較類似於Windows 7里面固定在任務欄的程序 (詳細說明: Window Maker - Dock )
  • clip: 桌面左上角還有一個回型針一樣的圖標,它的名字是clip,但跟“剪貼”沒有什么關系,其實是工作區(workspace)切換器(點擊兩個小三角會切換到上一個/下一個工作區)。不過它還有一個作用:appicon可以停靠到它旁邊,這樣這個appicon對應的應用就只跟當前workspace綁定(當桌面切換到其它工作區時,這個應用的窗口就不會顯示了) 關於clip的詳細說明: Window Maker - Clip
  • miniwindow: 除了appicon之外,每個窗口最小化之后還有另外一個圖標,這個被稱為miniwindow

但這里面有些小問題:

但是多用一陣發現我不太習慣它的dock/clip設計,一方面它可以啟動應用,另一方面它又有任務欄的作用(一個appicon停靠到dock后,原來的appicon就不顯示了,雙擊它可以激活應用的主窗口),但只能針對已經dock/clip的應用,其它應用不在這里,而是在下面(appicon)。而且每個應用有兩個圖標,一個是appicon,另一個是最小化的圖標,一般情況下雙擊dock圖標可以激活應用程序窗口,但不能激活已經最小化的窗口。

基於這個問題,如果你要切換回某個程序的話,有時要點右邊的dock,有時需要點擊左上角的clip,有時要點擊下方的appicon,很分裂。感覺要解決這個問題,得把dock欄和appicon欄放在同一排,但dock只能是豎着的 (appicon的位置和方向倒是可以在wprefs里面修改),同時將dock和appicon都放在右側豎着的話,多開幾個程序就沒空間了。

網上也有人問能不能將dock搞成橫着的,一個答復是變通地用0.95.5(Aug/2013)里面新增的抽屜(drawer)功能,但我試了一下發現,dock里面缺省那個按鈕不能是drawer,也不能刪除,得另外添加一個drawer按鈕,這樣至少需要兩個按鈕 😦 ,放在右下角的話也只能算是可以湊合着用。

另一個思路是只將dock作為launcher來用,不搶任務欄的工作(即dock之后仍然在桌面下方顯示appicon,可以通過點擊appicon來激活窗口),但好像沒有看見開關。文檔里有這個功能的描述,沒有說如何關閉(http://windowmaker.org/guidedtour/dock.html )

這里另外提供了一個方法 http://www.linuxquestions.org/questions/debian-26/windowmaker-icons-206322-print/ : 禁用dock,只用clip,而且clip還有attract icons的功能,更像任務欄了。這種這個方法當然也有副作用:clip吸附的程序只在當前workspace可見

2016 Aug.07更新:

這兩天發現一個更好的解決辦法,不用糾結於上面這些煩人的問題了: 直接跑一個其它桌面(desktop environment)里面的面板就可以了——當然,是要那種能夠支持任務列表(task list)的面板,這樣wmaker的dock就只是用作大家通常意義上理解的dock,也就是用於啟動常用應用和收納一些dockapps

當然,我們最好是挑一個依賴比較少的面板。樹莓派Raspbian里面默認就有的 lxpanel 是一個不錯的選擇,而且它還有“通知欄”插件,下面說到的 wmsystemtray/ 也可以不用裝了。

這里有一個WindowMaker + LXPanel的效果圖: https://www.vivaolinux.com.br/screenshot/Window-Maker-WMaker-green-Lxpanel-no-Linux-Mint-17/

dockapps

這是使用wmaker需要掌握的第二個概念。wmaker是用dock來替代其它窗口管理器里面的板(panel)的,如果你有往panel上嵌入一些小部件的需求時(比如想顯示一下日期/時間/天氣,或者顯示一下CPU利用率曲線),wmake里面就是用 dockapps 來解決。

dockapps其實只是一些小程序,不過程序窗口都跟wmaker的dock圖標一樣大小,這樣的應用程序也沒有appicon,可以拖到dock或者clip上(不過它也可以放在其它位置獨立顯示)。

自動啟動程序

對於放到dock/clip的程序圖標,直接在圖標屬性里面勾選 Start when Window Maker is started 就可以讓該應用跟隨wmaker自動啟動了。

dock

對於不適合拖到dock/clip的(比如那些啟動后不顯示窗口只有通知欄圖標的程序: nm-applet, seafile-applet等),可以編輯文件 ~/GNUstep/Library/WindowMaker/autostart (它是個腳本,按shell腳本的寫法來添加你要啟動的程序就就可以了,記得啟動GUI程序時在命令后面添加 & 號)

#!/bin/bash
xset m 20/10 4

wmsystemtray &
.nutstore/dist/bin/nutstore-pydaemon.py &
nm-applet &
glipper &
wmcalclock &

通知欄(system tray / notification area)

現在有很多程序(比如網絡管理器、Dropbox、剪貼板監視器Glipper/Parcellite等)會在啟動時隱藏主窗口,只在通知欄(system tray / notification area)顯示一個圖標。所以我們需要以dockapps形式存在的通知欄容器,將那些應用的通知欄圖標收納在里面。

雖然archwiki上推薦的是stalonetray ,但我實際試驗了一下還是wmsystemtray 跟wmaker配合得更好一些,而且也更穩定一些。圖標個數增加后,stalonetray大小擴展比較奇怪,這也許跟她的設計目標並不是針對 wmaker 有關; 而wmsystemtray是只能一次顯示4個圖標,通過切換按鈕來切換到下一組/上一組4個圖標(如果以 wmsystemtray --small方式啟動,它會采用更小的圖標,這樣一次可以顯示9個圖標).

使用方法:

  1. 先安裝wmsystemtray包: apt install wmsystemtray
  2. 然后在上一節所說的 autostart 文件中添加一行 wmsystemtray & (注意結尾的 &),這一行放在靠前面的位置,確保那些需要顯示通知欄圖標的程序在之后啟動.

wmsystemtray 4 icons
wmsystemtray 9 icons
(上兩圖來自: wmsystemtray - dockapps.windowmaker.org

window snapping功能

之前我在Linux上一直用gnome 2/mate desktop比較多,它支持window snapping,不過比較簡單,只支持左右半屏。

wmaker也有類似的能力,不僅可以最大化半屏,而且還可以只占據四角1/4面積,但需要0.95.5 (2013 Aug)以上的版本。而且在0.95.5里面只能在WPrefs里添加快捷鍵來操作(Debian 8 jessie和Ubuntu 14.04目前是這個版本),而去年月發布的0.95.7版本增加了直接通過鼠標拖放和窗口菜單來完成(注意官網的News頁面只更新到0.95.5版本,后面的變化需要直接看代碼庫的News文件),如果你想要這個功能的話,Ubuntu可以用這個ppa https://launchpad.net/~profzoom/+archive/ubuntu/wmaker , Debian得自己編譯了。

wmaker window snapping

全局快捷鍵

對於WindowMaker自身的功能(比如打開桌面菜單,打開窗口菜單,最大化窗口,切換工作區等),可以在它的偏好設置程序 WPrefs 中設置快捷鍵(這個程序可以通過桌面菜單 WindowMaker->Preferences打開,也可以通過命令行WPrefs打開. 打開后切換到倒數第五個圖標 Keyboard Shortcut Preferences即可)

configuring shortcuts in WPrefs

如果要設置全局快捷鍵來啟動一個程序(或者執行一段腳本),也是在 WPrefs 里面設置,但是在倒數第六個圖標 Applications Menu Definition 里面.我們得拖一個 Run Program 按鈕到菜單上,設置對應的快捷鍵和要運行的命令.

configuring menu in WPrefs

參考:

另外有一個小細節要注意: 在默認的X11配置下,NumLock鍵也是一個修飾鍵(modifier key),所以WPrefs設置快捷鍵時會將這個鍵考慮在內.比如本來想設置win+r這個快捷鍵,但NumLock打開時,WPrefs會捕捉為 Mod2+Mod4+r (我這里NumLock映射為Mod2, win鍵被映射為Mod4.用xmodmap可以查到這個信息).然后當你使用時,如果NumLock關閉了,只按 win+r 是不能啟動這個程序的.

詳細說明和解決方法可以參考: Num Lock Can Bork Your Keyboard Shortcuts in Window Maker - Window Maker and I: busprof's Blog (但被薔,我截取了一份副本在這里

gtk主題

如果你想讓你的gtk/gnome程序跟wmaker桌面的風格更貼近一點的話,可以安裝 OneStepBack 主題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM