Xubuntu Window Tiling (視窗平鋪)
前言
今天研究了一下在「Xubuntu (XFCE)」下,「Window Tiling (視窗平鋪)」的功能。
一開始找到了兩個方案。
後來又找到一個「Tiling by drag window」,原本就有的功能,
有一個設定要調整,請看最下面的說明。
- xfwm4-settings ( Settings / Window Manager / Advanced / )個
找尋過程
一開始想說,找看看「Xubuntu(Xfce)」下的快速鍵,
我知道的有兩個地方可以設定「快速鍵(Shortcuts)」。
- xfce4-keyboard-settings ( Settings / Keyboard / Application Shortcuts )
- xfwm4-settings ( Settings / Window Manager / Keyboard )
一開始摸不著頭緒,所以想起以前看過的的一篇文章「Gnome、KDE 與 Cinnamon 的平鋪視窗控制」
找到關鍵字「Tiling」,用「xfce tilingg」,查了一下,找到上面兩個解決方案。
後來又找到一個「Tiling by drag window」,原本就有的功能,
只是因為一個設定的關係變成另一個功能,請看最下面的說明。
測試環境
Xubuntu 14.04 64 位元
方案 - xfwm4-settings
在Xubuntu左上方,點選,下拉出「功能選單(開始功能表)」,
然後點選「Settings / Window Manager (或是執行 $ xfwm4-settings
)」。
就會出現「Window Manager」這個設定對話框。
選擇「Keyboard」這個頁籤。
然後向下捲動,就會看到四個「Action」
- Tile window to the top
- Tile window to the bottom
- Tile window to the left
- Tile window to the right
一開始是沒有綁定「快速鍵」,所以「shortcut」那一個欄位是空白。
所以我自己做了以下的設定。
- Tile window to the top =>
Super+K
- Tile window to the bottom =>
Super+J
- Tile window to the left =>
Super+H
- Tile window to the right =>
Super+L
「hjkl」跟vi的方向鍵一樣。
而「Super」則是,「視窗鍵(window鍵)」。
設定檔的路徑在「~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml」。
方案 - QuickTile
事先安裝相依套件
1 | $ sudo apt-get install python python-gtk2 python-xlib python-dbus python-wnck |
clone 「QuickTile」專案下來
1 | $ git clone https://github.com/ssokolow/quicktile.git |
切換到「quicktile」這個資料夾
1 | $ cd quicktile |
安裝
1 | $ sudo ./setup.py install |
就會安裝完畢
主要有兩個檔
- 「/etc/xdg/autostart/quicktile.desktop」 <== 重新開機就會執行這個檔
- 「/usr/local/bin/quicktile.py」<== 上面的設定則會執行「quicktile.py」這個指令。
第一次執行下面指令,產生預設的設定檔
1 | $ quicktile.py |
會顯示
1 | INFO: Wrote default config file to /home/user/.config/quicktile.cfg |
也就是會在「~/.config/」這個資料夾,產生預設的設定檔「quicktile.cfg」。
觀看「~/.config/quicktile.cfg」的內容
1 | $ cat ~/.config/quicktile.cfg |
顯示
1 | [general] |
執行下面的指令,將「ModMask = <Ctrl><Alt>
」改成「ModMask = <Ctrl><Mod4>
」。
1 | $ sed 's/ModMask = <Ctrl><Alt>/ModMask = <Ctrl><Mod4>/g' ~/.config/quicktile.cfg -i.bak |
就會將「~/.config/quicktile.cfg」先備份到「~/.config/quicktile.cfg.bak」
然後改掉內容,如下
1 | [general] |
執行下面的指令,就會起一個背景程式(指令行最後面可以加&
, 目前測試所以沒加)
1 | $ quicktile.py -d |
或是
1 | $ quicktile.py --daemonize |
就會顯示
1 | <class 'Xlib.protocol.request.QueryExtension'> |
這時候就可以找一個目前使用的「視窗(應用程式)」來測試,
同時按下「Ctrl」+「視窗鍵」+「數字鍵」,就會將該視窗平鋪在該位置。
注意這裡指的「數字鍵」,是鍵盤右方的「數字鍵盤」,「9宮格位置」剛好對應「螢幕位置」。
1 | 7 8 9 |
剛剛只是測試,上面的指令「quicktile.py --daemonize
」,重開機會自動執行,
因為有這個檔「/etc/xdg/autostart/quicktile.desktop」。
觀看「/etc/xdg/autostart/quicktile.desktop」。
1 | $ cat /etc/xdg/autostart/quicktile.desktop |
顯示
1 | [Desktop Entry] |
你也可以在「Settings / Session and Startup / Application Autostart」
找到「QuickTile」這一個項目。
「Settings / Session and Startup」的指令是「xfce4-session-settings」
所以也可以執行下面的指令啟動。
1 | $ xfce4-session-settings |
quicktile.py 更多用法
直接執行
1 | $ quicktile.py |
會顯示
1 | Known Commands |
所以就可以執行
1 | $ quicktile.py show-desktop |
就會將所有的視窗縮小到工具列,顯示桌面。(Xubuntu內建的快速鍵Ctrl+Alt+D
)
其他就自行把玩吧。
manual
執行
1 | $ quicktile.py -h |
顯示
1 | Usage: quicktile.py [options] [action] ... |
執行
1 | $ quicktile.py --show-bindings |
顯示
1 | Keybindings defined for use with --daemonize: |
執行
1 | $ quicktile.py --show-actions |
等同剛剛執行 $ quicktile.py
顯示的結果。
也可以執行
1 | $ quicktile.py show-desktop --debug |
加上「–debug」,可以看到額外的「除錯訊息」。
Tiling by drag window
從「這篇討論」,
發現「Tiling by drag window」的方式。
一開始我嘗試不出來,所以才先找快速鍵的方式。
原來設定的方式,導致變成另一個功能,關鍵點如下,
從「Settings / Window Manager / Advanced」
在「Wrap workspaces when reaching the screen edge」,
有一個選項「With a dragged window」不勾選。
這樣用滑鼠拖拉視窗到左方,上方,下方,右方,
就會有「Tiling」的效果。
我原本有勾選「With a dragged window」,
而且我有開多個「Workspace」,所以當拖拉視窗到左右邊界的時候,是會切換到不同的「Workspace」。
我就在納悶,我以前用拖拉的方式可以,現在怎麼不行。
原來是要更改這個設定。
Move window to another workspace
視窗移到不同的Workspace,我通常是在視窗標題列按下右鍵,選擇「Move to Another Workspace / n」。
今天發現「( Settings / Window Manager / Keyboard / )」那也有綁定快速鍵,可以從那裡查詢。
相關討論
- Xubuntu(XFCE) Window Tiling (視窗平鋪)
- xfce windows snapping,也可以查到很多相關資料。例如「這篇url」。
官方文件
- Xfce / Xfce 4.10 tour
- Xfce Docs / xfwm4 / preferences