FluxBox Window Manager Settings

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,此檔某些內容會被改得很奇怪。


發表留言