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 主题

posted @ 2016-08-06 21:57 巴蛮子 阅读(...) 评论(...) 编辑 收藏