FluxBox Window Manager Settings
【摘要】介紹 FluxBox 視窗管理程式的設定並附上範例,包括 startup、init、menu、windowmenu、keys、apps 各檔。
【目錄】
【前言】【startup 檔】
【init 檔】
【menu 檔】
【windowmenu 檔】
【keys 檔】
【apps 檔】
【slitlist 檔】
【overlay 檔】
【fbrun_history 檔】
【前言】
一、前文談過 Fluxbox 的深灰色樣式,現在來看其他的設定檔。
二、兩年半以前,曾在 Google 的 Blogger 發表過本文,近日重新檢查並更新內容,記錄於此。
三、$HOME/.fluxbox 為放置設定檔的目錄,包含:startup、init、menu、windowmenu、keys、apps、slitlist、overlay、fbrun_history 等各檔。以下逐一介紹設定方法。
【startup 檔】
此檔的內容是 shell 指令,包括 FluxBox 啟動之前和之後要執行的指令。
㈠ 如果在啟動 FluxBox 之後沒有其它指令,此檔最後一個指令是:
exec fluxbox
㈡ 在此之前的指令需在背景執行,不然會一直在等它們結束,除非是設定型的指令。
㈢ 要在啟動 FluxBox 之後執行指令的話,需把上述指令改成在背景執行,並將要執行的指令放在大括號內且在背景執行。語法如下:
exec fluxbox & fbpid=$! sleep 2 { 指令1 & 指令2 & ...... } & wait $fbpid
【startup 檔範例】
#!/bin/sh # 啟動控制列 fbpanel;因為要用到音量控制,故需先載入必要的模組 sudo modprobe snd-mixer-oss fbpanel -p default & # 開啟防火牆 sudo ufw enable & # 設定滑鼠 xset m 3 3 # 設定鍵盤 xset r rate 300 30 # 如果有 fbautostart 檔,就執行。 which fbautostart > /dev/null if [ $? -eq 0 ]; then fbautostart fi # 如果在啟動 FluxBox 之後沒有要執行任何指令,這就是最後一個指令: # exec fluxbox # 若還有指令要執行,就換成: exec fluxbox & fbpid=$! sleep 2 { goldendict & } & wait $fbpid
【init 檔】
此為 Fluxbox 的主要設定檔,可控制工作列、slit、視窗、虛擬桌面等。
㈠ 若修改此檔,必需在桌面右鍵選單中選 [Reconfigure] 使設定生效。
㈡ 若在桌面右鍵選單中有修改相關設定,會自動更新此檔。
【可用值和預設值】
session.appsFile: location (Default: ~/.fluxbox) session.autoRaiseDelay: integer (Default: 250) session.cacheLife: minutes (Default: 5) session.cacheMax: KbSize (Default: 200) session.colorsPerChannel: integer (2-6. Default: 4) session.doubleClickInterval: integer (Default: 250) session.forcePseudoTransparency: boolean (Default: False) session.ignoreBorder: boolean (Default: False) session.keyFile: location (Default: ~/.fluxbox) session.menuFile: location (Default: ~/.fluxbox) session.screen0.autoRaise: boolean (Default: True) session.screen0.clickRaises: boolean (Default: True) session.screen0.colPlacementDirection: (TopToBottom, BottomToTop. Default: TopToBottom) session.screen0.defaultDeco: string (NORMAL, NONE, BORDER, TAB, TINY, TOOL. Default: NORMAL) session.screen0.edgeSnapThreshold: integer (Default: 10) session.screen0.focusModel: (ClickToFocus, MouseFocus, StrictMouseFocus. Default: ClickToFocus) session.screen0.focusNewWindows: boolean (Default: True) session.screen0.fullMaximization: boolean (Default: False) session.screen0.iconbar.alignment: position (Left, Right, Relative. Default: Relative) session.screen0.iconbar.iconTextPadding: integer (Default: 10) session.screen0.iconbar.iconWidth: integer (Default: 128) session.screen0.iconbar.mode: pattern (Default: {static groups} (workspace). See CLIENT PATTERNS in fluxbox-keys(5) or fluxbox-apps(5).) session.screen0.iconbar.usePixmap: boolean (Default: True) session.screen0.menuDelay: integer (Default: 200) session.screen0.opaqueMove: boolean (Default: True) session.screen0.rowPlacementDirection: (LeftToRight, RightToLeft. Default: LeftToRight) session.screen0.showwindowposition: boolean (Default: False) session.screen0.strftimeFormat: date (Default: %k:%M) session.screen0.tab.placement: placement (BottomLeft, BottomCenter, BottomRight, LeftBottom, LeftCenter, LeftTop, RightBottom, RightCenter, RightTop, TopLeft, TopCenter, TopRight. Default: TopLeft) session.screen0.tab.width: integer (Default: 64) session.screen0.tabs.intitlebar: boolean (Default: True) session.screen0.toolbar.height: integer (Default: 0, style file controls) session.screen0.toolbar.tools: tools (Possible & Default: workspacename, prevworkspace, nextworkspace, iconbar, prevwindow, nextwindow, systemtray, clock) session.screen0.toolbar.visible: boolean (Default: True) session.screen0.toolbar.widthPercent: integer (Default: 100) session.screen0.window.{focus|unfocus}.alpha: integer (0-255. Default: 255) session.screen0.windowMenu: location (Default: blank) session.screen0.windowPlacement: strategy (RowSmartPlacement, ColSmartPlacement, CascadePlacement, UnderMousePlacement. Default: RowSmartPlacement) session.screen0.workspaceNames: names (Default: Workspace 1, Workspace 2, Workspace 3, Workspace 4) session.screen0.workspaces: integer (Default: 4) session.screen0.workspacewarping: boolean (Default: True) session.screen0.{slit|toolbar|tabs}.maxOver: boolean (Default: False) session.screen0.{slit|toolbar}.autoHide: boolean (Default: False) session.screen0.{slit|toolbar}.layer: layer (1-13, 2-Above Dock, 4-Dock, 6-Top, 8-Normal, 10-Bottom, 12-Desktop. Default: Dock) session.screen0.{slit|toolbar}.onhead: integer (Default: 0 for slit, 1 for toolbar) session.screen0.{slit|toolbar}.placement: placement (BottomLeft, BottomCenter, BottomRight, LeftBottom, LeftCenter, LeftTop, RightBottom, RightCenter, RightTop, TopLeft, TopCenter, TopRight. Slit default: RightBottom; Toolbar default: BottomCenter) session.slitlistFile: location (Default: ~/.fluxbox) session.styleFile: location (Default: ~/.fluxbox) session.styleOverlay: location (Default: ~/.fluxbox) session.tabPadding: integer (Default: 0) session.tabsAttachArea: (Window, Titlebar. Default: Window) session.titlebar.{left|right}: buttons (Close, Maximize, MenuIcon, Minimize, Shade, Stick, LHalf, RHalf. Default left: Stick. Default right: Shade Minimize Maximize Close)
【menu 檔】
此檔設定在桌面按滑鼠右鍵會出現的主選單。
基本語法:
[begin] (標題) [submenu] (類別名) {標題} <圖示> [exec] (程式名) {指令} <圖示> [exec] (程式名) {指令} <圖示> ...... [end] [end]
㈠ 英文部分為內建名,不可改。
㈡ 標題:是顯示在每一頁最上面的名稱。
㈢ 類別名/程式名:是下方各項的名稱。開頭可加一空白,如:( 類別名) 和 ( 程式名),不然和圖示太靠近了。
㈣ [submenu] 可 nested,以建立子頁。
㈤ 若 [submenu] 後的標題為空字串,也就是只用 {},則其子頁的標題延用類別名。因為兩者通常一樣,所以常是空字串。若用空白,如 { },則沒有標題。
㈥ 圖示:選擇性的。只能用 .png 或 .xpm 檔。
㈦ [submenu] 以外的項目,請看 man fluxbox-menu
。
㈧ 一行首字若是井字號(#)或驚歎號(!),視為註解。
【menu 檔範例】(每種只示範一項)
[begin] ( Main Menu) [submenu] ( Desktop) {} # 這是由 .desktop 檔產生的選單。 [submenu] ( Audio&Video) {} [exec] ( VLC media player) {/usr/bin/vlc} </usr/share/icons/hicolor/48x48/apps/vlc.png> [end] [submenu] ( Graphics) {} [exec] ( GIMP Image Editor) {gimp-2.8} </usr/share/icons/hicolor/48x48/apps/gimp.png> [end] [submenu] ( Network) {} [exec] ( Firefox Web Browser) {firefox} </usr/lib/firefox/browser/chrome/icons/default/default48.png> [end] [submenu] ( Office) {} [exec] ( Geany) {geany} </usr/share/icons/hicolor/48x48/apps/geany.png> [end] [submenu] ( System) {} [exec] ( Synaptic Package Manager) {sudo synaptic} </usr/share/pixmaps/synaptic.png> [end] [submenu] ( Utility) {} [exec] ( SpaceFM) {env UBUNTU_MENUPROXY= spacefm} </usr/share/icons/hicolor/48x48/apps/spacefm.png> [end] [end] [submenu] ( Default) {} # 這是系統自動產生的選單。 [submenu] ( Applications) {} [submenu] ( Accessibility) {} [exec] ( Xmag) {xmag} <> [end] [submenu] ( Editors) {} [exec] ( Xedit) {xedit} <> [end] [submenu] ( Network) {} [submenu] ( Communication) {} [exec] ( Xbiff) {xbiff} <> [end] [end] [submenu] ( Shells) {} [exec] ( Bash) { x-terminal-emulator -T "Bash" -e /bin/bash --login} <> [end] [submenu] ( System) {} [submenu] ( Administration) {} [exec] ( Debian Task selector) { x-terminal-emulator -T "Debian Task selector" -e su-to-root -c tasksel} <> [end] [submenu] ( Hardware) {} [exec] ( Xvidtune) {xvidtune} <> [end] [submenu] ( Monitoring) {} [exec] ( Top) { x-terminal-emulator -T "Top" -e /usr/bin/top} <> [end] [end] [submenu] ( Viewers) {} [exec] ( Xditview) {xditview} <> [end] [end] [submenu] ( Games) {} [submenu] ( Toys) {} [exec] ( Xeyes) {xeyes} <> [end] [end] [submenu] ( Help) {} [exec] ( Xman) {xman} <> [end] [end] # 以下為其他項目 [submenu] ( Window Managers) {} [restart] ( FluxBox) {/usr/bin/startfluxbox} [end] [config] ( Configuration) [submenu] ( Styles) {} [stylesmenu] {/usr/share/fluxbox/styles} [end] [workspaces] ( Workspaces) [reconfig] ( Reconfigure) [submenu] ( Exit) {} [exec] ( Shutdown) {sudo shutdown -h now} </usr/share/icons/gnome/48x48/actions/system-shutdown.png> [separator] [exit] ( Exit X) </usr/share/icons/gnome/48x48/actions/edit-delete.png> [end] [end]
【windowmenu 檔】
此檔設定視窗選單,也就是通常在視窗標題列按滑鼠右鍵所出現的選單。
基本語法:
[begin] [選項] [選項] ...... [end]
㈠ 英文部分為內建名,不可改。
㈡ 可用選項有:
- [shade] 只顯示標題列
- [stick] 顯示於所有虛擬桌面
- [maximize] 最大化;用滑鼠左鍵點選:雙向最大化;中鍵:垂直方向最大化;右鍵:水平方向最大化
- [iconify] 最小化
- [close] 結束程式
- [kill] 中斷程式
- [raise] 視窗中最上層
- [lower] 視窗中最下層
- [settitledialog] 設定標題;某些程式可能會重設回其預設值
- [sendto] 將視窗移至其他虛擬桌面;用滑鼠左鍵只移視窗,用中鍵也切換至該虛擬桌面
- [layer] 設定層次
- [alpha] 設定有無聚焦的透明度
- [extramenus] 額外選單,可記住目前設定
- [separator] 分隔線
㈢ 一行首字若是井字號(#)或驚歎號(!),視為註解。
【windowmenu 檔範例】
[begin] [maximize] [iconify] [shade] [layer] [alpha] [extramenus] [close] [end]
【keys 檔】
本檔設定快捷鍵,包括鍵盤和滑鼠。
語法:
[modifiers] key : 'command' [arguments ...]
㈠ key 和冒號(:)需空開;而冒號和 command 之間可空可不空。
㈡ modifiers 和 command 不區分大小寫,其餘的可能會。
㈢ modifiers 可用 xmodmap -pm
得知。最常用的是 Control, Alt, Shift, Mod4 (此即 Super/Win,但只能用 Mod4)。
對滑鼠而言,還有 OnDesktop, OnToolbar, OnWindow, OnTitlebar, OnTab, Double 。
㈣ 多重 modifiers 就連續列出,空開即可。
㈤ key 可用 keycode(如: 38, 0xf3)或鍵名(如:A, space)。
keycode 和鍵名可用以下指令得知:
xev | awk '/^KeyPress/ { line[NR+2] } NR in line { sub("),", "", $7); printf "keycode: %s, keysym: %s\n", $4, $7 }'
滑鼠事件有:
- MouseN 持續按住
- ClickN 點擊一下
- MoveN 持續按住並移動
其中 N 為滑鼠鍵編號,以慣用右手為例:
- 1 左
- 2 中
- 3 右
- 4 滾輪上
- 5 滾輪下
㈥ command 詳見 man fluxbox-keys
中的 COMMANDS 一節。
㈦ 一行首字若是井字號(#)或驚歎號(!),視為註解。
【keys 檔範例】
##### 滑鼠 ##### # 註解內容為:鍵;施用處;動作;功能 # 滑鼠右/左鍵;桌面;點擊;開關主選單 OnDesktop Mouse3 : RootMenu OnDesktop Mouse1 : HideMenus # Alt + 滑鼠左鍵(用 Mouse1 亦可);視窗內(含標題列);拖移;聚焦並移動視窗 OnWindow Alt Move1 : MacroCmd {Raise} {Focus} {StartMoving} # 滑鼠左鍵;視窗邊框或左/右下角;拖移;調整視窗大小 OnWindowBorder Move1 : MacroCmd {Raise} {Focus} {StartResizing NearestCornerOrEdge} OnLeftGrip Move1 : StartResizing bottomleft OnRightGrip Move1 : StartResizing bottomright # Control + 滑鼠左鍵;視窗標題列;拖至另一視窗標題列;加至其分頁 OnTitlebar Control Mouse1 : StartTabbing # 滑鼠左鍵;視窗標題列;切換分頁 OnTitlebar Mouse1 : MacroCmd {Raise} {Focus} {ActivateTab} # 滑鼠右鍵;視窗標題列;點擊;開關視窗選單 OnTitlebar Mouse3 : WindowMenu ##### 鍵盤 ##### # 註解內容為:鍵;功能 或 鍵;施用處;功能 # Alt+(Shift+)Tab;切換視窗 Alt Tab : NextWindow {groups} (workspace=[current]) Alt Shift Tab : PrevWindow {groups} (workspace=[current]) # Super+(Shift+)Tab;切換分頁 Mod4 Tab : NextTab Mod4 Shift Tab : PrevTab # 鍵盤內建音量鍵;升高音量 XF86AudioRaiseVolume : Exec amixer sset Master,0 1+ # 鍵盤內建音量鍵;降低音量 XF86AudioLowerVolume : Exec amixer sset Master,0 1- # 鍵盤內建音量鍵;靜音開關 XF86AudioMute : Exec amixer sset Master,0 toggle # Super+Space;開啟主選單 Mod4 space : RootMenu # Alt+Space+Space;開啟視窗選單 Alt space space : WindowMenu # Alt+F4;關閉視窗 Alt F4 : Close # Alt+Space+N;最小化 Alt space N : Minimize # Alt+Space+X;切換最大化 Alt space X : Maximize # F11;全螢幕 F11 : Fullscreen # 鍵盤內建截取畫面鍵;截取全畫面 Print : Exec scrot %m%d-%H%M%S.png -e 'mv $f ~/Pictures/' # Super+F;firefox Mod4 F : Exec firefox # Super+G;geany Mod4 G : Exec geany # Super+H;視窗橫向最大化 Mod4 H : MaximizeHorizontal # Super+R;執行 Mod4 R : Exec fbrun # Super+S;spacefm Mod4 S : Exec spacefm # Super+T;虛擬終端機 Mod4 T : Exec x-terminal-emulator # Super+V;視窗縦向最大化 Mod4 V : MaximizeVertical # Super+數字鍵盤;移動視窗 Mod4 KP_Home : MoveTo 0 0 Mod4 KP_End : MoveTo 0 0 BottomLeft Mod4 KP_Next : MoveTo 0 0 BottomRight Mod4 KP_Prior : MoveTo 0 0 TopRight Mod4 KP_Begin : MoveTo 0 0 Center
【apps 檔】
本檔設定應用程式的視窗,如:大小、位置、層次等。可分兩類: app 和 group,前者設定各別程式的視窗,後者將多個視窗合成一個視窗。
語法:
[app] (pattern) {count} 其中 {count} 為可選,表 match 次數 [setting] {value} [setting] {value} [end]
[group] (pattern) 其中 (pattern) 為可選 [app] (pattern) 此中不能有各別 app 的設定 [app] (pattern) [setting] {value} 這些設定對整組 app 都有效 [setting] {value} [end]
㈠ pattern 語法:
([propertyname=]regexp)或
([propertyname!=]regexp)
propertyname 若省略,預設為 name。可用值有: Name, Class, Title, Role, Transient, Maximized, MaximizedHorizontal, MaximizedVertical, Minimized, Fullscreen, Shaded, Stuck, FocusHidden, IconHidden, Urgent, Workspace, WorkspaceName, Head, Layer, Screen, @XPROP (大小寫均可)
㈡ setting 選項有: Workspace, Jump, Head, Layer, Dimensions, Position, Deco, Shaded, Tab, FocusNewWindow, FocusHidden, IconHidden, Hidden, Sticky, Minimized, Maximized, Fullscreen, Close, Alpha. 詳見 man fluxbox-apps
。
【apps 檔範例】
# 將 Run 小窗格開在右下角,無裝飾,Above Dock 層 [app] (name=fbrun) [Position] (BottomRight) {0 -24} [Deco] {NONE} [Layer] {2} [end] # pdf 閱讀程式 evince 預設尺寸太小,又不能設定,故將之放大 [app] (name=evince) [Dimensions] {68% 99%} [end] # 影音播放程式 vlc 在左上角開啟 [app] (name=vlc) [Position] (TopLeft) {0 0} [end] # 將 GIMP 的兩個側框合成一個視窗 [group] [app] (name=gimp) (role=gimp-dock) [app] (name=gimp) (role=gimp-toolbox) [Layer] {4} [end]
【slitlist 檔】
此檔用來記錄桌面小窗格的內容和順序。因為沒有什麼特別好用的功能,所以略過。
【overlay 檔】
此檔用來覆寫樣式的設定。如果樣式檔都設定好,不需用到此檔。
【fbrun_history 檔】
此檔用來記錄 fbrun 的指令歷史。FluxBox 有 bugs,此檔某些內容會被改得很奇怪。