awesome
來自awesome網站:
Awesome 是 Xorg 下可高度定製的新一代窗口管理器,運行快捷、擴展性強。Awesome主要面向高級用戶、開發者和那些希望完美控制自己電腦的圖形界面的人。
安裝
啟動
使用 xinit 運行 awesome。要使用其包括的 xsession 文件,參考顯示管理器頁面。
與GNOME一同使用
你可以設置 GNOME 使用 awesome 作為其窗口管理器,但必須讓 GNOME 在後台運行。詳見 awesome-gnomeAUR。
XFCE
詳見 XFCE#使用不同的窗口管理器。
配置
配置文件是一個lua腳本:~/.config/awesome/rc.lua。
創建配置文件
創建配置文件所在的文件夾:
$ mkdir -p ~/.config/awesome/
編譯後,awesome會自動使用~/.config/awesome/rc.lua裡的所有配置。這個文件並不會自動創建,所以我們先要從模板複製一個過來:
$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome
配置文件的語法會隨著Awesome的版本升級而變化,所以當你升級了之後遇到問題時,重複上面的步驟,或者你得手動修改配置文件。
要獲得關於配置Awesome的更多信息,請看Awesome wiki的配置部分。
例子
擴展
下列擴展對 awesome 來說是可用的:
| E | 功能 | 版本 |
|---|---|---|
| 顯示所有已打開客戶端的視圖 | Awesome 3.5+ | |
| 動態標籤 | Awesome 3.5 | |
| 彈出通知 | Awesome 3.5+ | |
| 額外的 widgets | Awesome 3.5 |
自動啟動
要實現 XDG 自動啟動規範,安裝 xorg-xrdb包和 dex包,並將以下行添加到 ~/.config/awesome/rc.lua:
~/.config/awesome/rc.lua
awful.spawn.with_shell(
'if (xrdb -query | grep -q "^awesome\\.started:\\s*true$"); then exit; fi;' ..
'xrdb -merge <<< "awesome.started:true";' ..
'dex --environment Awesome --autostart --search-paths "${XDG_CONFIG_HOME:-$HOME/.config}/autostart:${XDG_CONFIG_DIRS:-/etc/xdg}/autostart";'
)
尤其是對於沒有托盤圖標的守護進程,使用自動啟動目標的 systemd 用戶單元是一個有趣的替代方案,因為它們可以被配置為保持運行狀態,即被監控並在意外停止後自動重啟。
最後, 也可以創建 autorun.sh 然後插入下列文字:
~/.config/awesome/autorun.sh
#!/bin/sh
run() {
if ! pgrep -f "$1" ;
then
"$@"&
fi
然後,讓它可執行。
要添加自啟動程序, 只需要向 autorun.sh 添加 run "program [some arguments]"。 run 函數檢查是否已經有一個帶著一些參數的 program 實例,並且只在沒有該實例時運行 program。你可以通過運行你的 autorun.sh 來檢查它:
$ ~/.config/awesome/autorun.sh
如果配置成功, 將以下行添加到 rc.lua:
~/.config/awesome/rc.lua
awful.spawn.with_shell("~/.config/awesome/autorun.sh")
或者,添加你希望運行的命令(包括設置環境變量)到 xinitrc(或 xprofile,當使用顯示管理器時)。
改變鍵盤布局
有許多方法配置鍵盤布局。
setxkbmap 配置方法
Awesome的默認配置已經激活了鍵盤布局 widget。
要暫時設置多鍵盤布局,運行
$ setxkbmap -layout "us,de"
點擊 widget 將改變鍵盤布局。如果你想要一個組合鍵來改變鍵盤布局,你可用加上 -option "grp:alt_shift_toggle"。這是一個通過按 Shift+Alt 改變鍵盤布局的例子,完整的命令如下:
$ setxkbmap -layout "us,de" -option "grp:alt_shift_toggle"
設置帶有音標的英語和俄語鍵盤布局:
$ setxkbmap -model pc105 -option "grp:shifts_toggle,compose:sclk" "us,ru(phonetic_YAZHERTY)"
其中
- Compose key is 設為 "Scroll Lock" ,語言切換鍵設為左 Shift + 右 Shift。
- 鍵盤上有105個鍵。
如果使用 LightDM 開啟會話,添加上述命令到 .xprofile 文件。
rc.lua 配置方法 (自 v.4 版本開始可用)
你可以使用 awesome 自身來切換鍵盤布局 (自 v.4 版本開始可用)。要通過按 Shift+Alt 改變鍵盤布局, 添加這兩行到 globalkeys:
~/.config/awesome/rc.lua
-- Key bindings
globalkeys = gears.table.join(
-- ...
awful.key({ "Shift" }, "Alt_L", function () mykeyboardlayout.next_layout(); end),
awful.key({ "Mod1" }, "Shift_L", function () mykeyboardlayout.next_layout(); end)
)
這需要你提前通過 setxkbmap 命令或 X 配置文件設置你想要切換的鍵盤布局。
當你找到了設置你的鍵盤布局的適合方法,添加到 #自啟動。
Xorg 配置方法
詳見 Xorg/鍵盤配置。
主題
Beautiful 是一個允許你使用外部文件給 awesome 配置主題的 lua 庫,可以讓你非常容易地動態地改變背景圖片和顏色主題,而不需要改變 rc.lua。
默認的主題文件在 /usr/share/awesome/themes/default。把它複製到 ~/.config/awesome/themes/default(可選複製其他所有主題)然後修改一下 rc.lua 中的 theme_path。
-- beautiful.init(gears.filesystem.get_configuration_dir() .. "/themes/default/theme.lua")
local theme_path = string.format("%s/.config/awesome/themes/%s/theme.lua", os.getenv("HOME"), "default")
beautiful.init(theme_path)
如果你同時也複製了其他主題,你可以把 "default" 替換為 "sky","gtk" 或 "zenburn" 來容易地切換主題,並且本地主題文件可以被學習、修改和用於測試。額外的主題配置選項參考這裡。例如要添加一個 useless gap,添加
beautiful.useless_gap = 5
到你的 rc.lua 的主題配置部分。
設置牆紙
Beautiful 可以設置牆紙,所以你就不用在 .xinitrc 或者 .xsession 中自己設置了。這允許你給每個主題配一個牆紙。
有兩種方式設置牆紙:
- 在
theme.lua中:-- 绝对路径 theme.wallpaper = "/path/to/wallpaper.png" -- 相对于主题目录的相对路径 theme.wallpaper = theme_path .. "path/to/wallpaper.png"
- 或在
rc.lua中,位於beautiful.init和local function set_wallpaper之間:-- 绝对路径 beautiful.wallpaper = "/path/to/wallpaper.png" -- 相对于主题目录的相对路径 beautiful.wallpaper = awful.util.get_configuration_dir() .. "path/to/wallpaper.png"
要設置隨機牆紙,添加這個到 rc.lua(v3.5+)。要從一個特點目錄自動獲取牆紙,使用這個。
小技巧
顯示/隱藏wibox
從 awesome 4.0 開始:
awful.key({ modkey }, "b",
function ()
myscreen = awful.screen.focused()
myscreen.mywibox.visible = not myscreen.mywibox.visible
end,
{description = "toggle statusbar"}
),
在 awesome 中,只在按下 Modkey 時顯示 wibox(或執行其他操作)是不可能的,但這裡有一個 Python 腳本實現了這個功能:autohidewibox。
截圖
設置鍵盤輸入,確保 PrtSc 鍵被正確綁定了。然後安裝一個截圖工具,例如 scrot。
在配置文件中的 globalkeys 中輸入並保存:
awful.key({ }, "Print", function () awful.util.spawn("scrot -e 'mv $f ~/screenshots/ 2>/dev/null'") end),
這裡的 ~/screenshots/ 可以改成你截圖想要保存的地方。
移除窗口間隔
自 awesome 3.4 起,移除創建之間的小間隔是可能的。在 awful.rules.rules 表格中的 properties 章節添加:
size_hints_honor = false
透明度
參見合成器。
在 awesome 3.5 中, 窗口透明度可以用信號動態設置。例如,rc.lua 可以包含下列內容:
client.add_signal("focus", function(c)
c.border_color = beautiful.border_focus
c.opacity = 1
end)
client.add_signal("unfocus", function(c)
c.border_color = beautiful.border_normal
c.opacity = 0.7
end)
Conky
當使用 conky 時,你必須設置它讓它創建自己的窗口,而不是使用桌面。為此,編輯 ~/.conkyrc以包含
own_window yes own_window_transparent yes own_window_type desktop
否則你可能會看到奇怪的表現,比如所有的窗口都變得完全透明。注意由於 conky 將會在你的桌面上創建一個透明窗口,所有定義於 rc.lua 的動作在 conky 所在的位置都不會工作。
wiboxes
Wiboxes具有內置的偽透明功能。要啟用它,在主題文件中的顏色後附加2位十六進制數字(例如~/.config/awesome/themes/default/theme.lua, 通常為 /usr/share/awesome/themes/default/theme.lua 的複製品),如下所示:
theme.bg_normal = "#000000AA"
其中 "AA" 為透明度。
To change transparency for the actual selected window by pressing Modkey + PgUp/PgDown you can also use transset-dfAUR and the following modification to your rc.lua:
globalkeys = gears.table.join(
-- your keybindings
[...]
awful.key({ modkey }, "Next", function (c)
awful.util.spawn("transset-df --actual --inc 0.1")
end),
awful.key({ modkey }, "Prior", function (c)
awful.util.spawn("transset-df --actual --dec 0.1")
end),
-- Your other key bindings
[...]
)
Widget 間隔
默認 rc.lua 在一個 wibox 裡放置包括鍵盤布局和時鐘等所有 widgets,widgets 之間只有很小的間隔。使用 spacing 屬性在 widgets 之間增加額外的間隔是可能的:
{ -- Right widgets
layout = wibox.layout.fixed.horizontal,
spacing = 10,
mykeyboardlayout,
...
ImageMagick
如果你用 ImageMagick 的 display 命令來設置你的牆紙,可能會遇到 xcompmgr 效果不好的問題。請注意 awsetbg 可能會用 display 如果它沒有其他選項。安裝 habak,feh,hsetroot 或者其他的包應該會解決這個問題。(grep -A 1 wpsetters /usr/bin/awsetbg 來看你有哪些選項)
使用 awesome-client 給文本插件傳遞信息
只需要創建一個新的插件,就可以很容易的傳遞信息。
mywidget = widget({ type = "textbox", name = "mywidget" })
mywidget.text = "initial text"
使用 awesome-client 從外部更新「initial text":
echo -e 'mywidget.text = "new text"' | awesome-client
不要忘記把插件增加到 wibox。
使用其他任務欄
如果你喜歡 awesome 既輕量又強大的功能,但又不喜歡默認那個任務欄的外觀,你可以安裝其他的,比如 xfce4-panel包。
然後要把它添加到配置文件 rc.lua 的自動啟動部分,你可以注釋掉配置文件中給每個桌面創建 wiboxes 的那部分(開頭是mywibox[s] = awful.wibox({ position = "top", screen = s })),但不是必要的。檢查配置文件沒有錯誤之後就可以執行命令生效:
$ awesome -k rc.lua
另外你還需要改變 modkey+R 的快捷鍵綁定,來用一些其他的應用啟動器替代awesome自帶的啟動器。別忘了添加
properties = { floating = true } },
{ rule = { instance = "$yourapplicationlauncher" },
到你的 rc.lua。
菜單欄中的應用程式目錄
Awesome 軟體包含有 menubar(默認情況下,按下 Mod+p 會在屏幕上方打開一個類似於 dmenu 的應用程式菜單)。它搜索位於$XDG_DATA_DIRS/applications 及 $XDG_DATA_HOME/applications/ 目錄下的 .desktop 文件。
通過修改 menubar.menu_gen.all_menu_dirs,你可以擴充或取代這些目錄:
~/.config/awesome/rc.lua
table.insert(menubar.menu_gen.all_menu_dirs, "/path/to/custom/applications/")
注意每次 awesome 啟動都會重新讀取 .desktop 文件,因此文件過多會拖慢 Awesome 的啟動速度。如果你更喜歡使用其他方式來運行程序,可以通過在 rc.lua 移除 local menubar = require("menubar") 及其它涉及到 menubar 的變量來禁用菜單欄。
應用菜單
自 awesome 3 以來,默認提供了一個簡單的菜單,簡化了自定義菜單。如果你想要一個freedesktop.org的菜單,可以查看awesome-freedesktop。
如果想要在點擊Awesome圖標,或者在桌面空白處右鍵點擊時,看到較傳統模式的應用菜單,可以參照Xdg-menu#Awesome的說明。但應用菜單不會在安裝或卸載程序時進行更新。所以,確保運行類似如下的命令,更新應用菜單:
xdg_menu --format awesome --root-menu /etc/xdg/menus/arch-applications.menu >~/.config/awesome/archmenu.lua
標題欄
你可以很容易地在配置文件中rule把 titlebars_enabled 設置為 true 來啟用標題欄。
{ rule_any = {type = { "normal", "dialog" }
}, properties = { titlebars_enabled = true }
},
如果想要切換標題欄的顯示與否,可以把以下代碼加入配置文件中鍵位綁定部份的clientkeys部份中間位置(因為這段代碼是以逗號結尾,請不要放在 clientkeys 的最後),然後通過按 modkey + Ctrl + t 來切換。
-- working toggle titlebar
awful.key({ modkey, "Control" }, "t", function (c) awful.titlebar.toggle(c) end,
{description = "Show/Hide Titlebars", group="client"}),
如果想默認情況下隱藏標題欄,僅需要在配置文件中標題欄創建後(即在 "manage" 信號處理器內)加入以下代碼:
awful.titlebar.hide(c)
電池通知
參考這篇博文以向 rc.lua 添加一個簡單的電池通知。注意它需要 naughty 用來通知(3.5 版本起默認安裝)。Awesome wiki 上也有其他的參考案例。
媒體控制
使用 amixer(1)(通過 alsa-utils包 安裝)和 playerctl包 的組合控制音量和媒體播放是可能的。下列代碼可以被添加到你的 rc.lua 配置文件中與快捷鍵相關的章節:
-- Volume Keys
awful.key({}, "XF86AudioLowerVolume", function ()
awful.util.spawn("amixer -q -D pulse sset Master 5%-", false) end),
awful.key({}, "XF86AudioRaiseVolume", function ()
awful.util.spawn("amixer -q -D pulse sset Master 5%+", false) end),
awful.key({}, "XF86AudioMute", function ()
awful.util.spawn("amixer -D pulse set Master 1+ toggle", false) end),
-- Media Keys
awful.key({}, "XF86AudioPlay", function()
awful.util.spawn("playerctl play-pause", false) end),
awful.key({}, "XF86AudioNext", function()
awful.util.spawn("playerctl next", false) end),
awful.key({}, "XF86AudioPrev", function()
awful.util.spawn("playerctl previous", false) end),
Steam 鍵盤
可通過 Steam 控制器激活的屏幕Steam鍵盤在嘗試輸入一個字符後似乎會凍結。這是因為本應接收輸入的客戶端必須處於焦點狀態才能接收輸入,而鍵盤會等待輸入成功發送。手動將焦點切換到另一個客戶端會將輸入發送到此客戶端,並再次解凍鍵盤,直到輸入下一個字符。
讓鍵盤正常工作的訣竅在於防止它獲得焦點。請將以下信號添加到您的配置中(或與現有的客戶端焦點信號合併):
client.connect_signal("focus", function(c)
if awful.rules.match(c, { name = "^Steam Keyboard$" }) then
awful.client.focus.history.previous()
end
end)
每當鍵盤獲得焦點時,焦點將返回至上一個客戶端。由於鍵盤輸入是由 Steam 客戶端處理的,因此不需要焦點,現在輸入文本將正常工作。
故障排除
調試 rc.lua
Xephyr 允許你在一個 X 客戶端窗口內運行另一個 X。用這種方式可以在不破壞現有桌面的情況下對 rc.lua 進行測試。首先把 rc.lua 複製到一個新文件(例如 rc.lua.new),接著進行修改。然後在 Xephyr 中運行新的 awesome 實例,使用 rc.lua.new 作為配置文件,就像這樣:
$ Xephyr -ac -br -noreset -screen 1152x720 :1 & $ DISPLAY=:1.0 awesome -c ~/.config/awesome/rc.lua.new
這種方式的巨大優勢在於如果你弄壞了 rc.lua.new,你不至於把現有的 awesome 桌面弄得一團糟,並且很可能還會把 XWindow 弄崩潰了,沒保存的工作全部丟失。一旦你覺得新的配置文件不錯,就用 rc.lua.new 代替 rc.lua,然後重啟 awesome。
自動重載
作為上述方法的補充,你可以使用 inotify-tools包 以在更新 ~/.config/awesome 目錄下的配置文件時,在 Xephyr 內自動重載 awesome 實例 :
#!/usr/bin/env bash Xephyr :1 -ac -br -noreset -screen 1920x1080 -dpi 96 & sleep 1 DISPLAY=:1.0 awesome -c ~/.config/awesome/rc.lua.new & instance=$! while inotifywait -r -e close_write ~/.config/awesome; do kill -s SIGHUP $instance done
使用 awmtt
awmttAUR (Awesome WM Testing Tool) 是一個基於 Xephyr 的易於使用的腳本。默認情況下,它會測試 ~/.config/awesome/rc.lua.test 。如果該文件不存在,它會測試當前使用的 rc.lua 。也可以指定要測試的配置文件所在路徑:
$ awmtt start -C ~/.config/awesome/rc.lua.new
當測試完成後,使用以下命令關閉窗口:
$ awmtt stop
或者通過以下命令立即查看變化:
$ awmtt restart
aawmtt
aawmttAUR (Another Awesome WM Testing Tool) 是 awmttAUR 的另一種實現,默認包含Live-Reload功能。它與 awmtt-ng 類似,但針對 Xorg 顯示檢測問題做了一些修復,因為 awmtt-ng 在某些機器上無法正常檢測 Xorg 顯示。它與 awmtt 的不同之處在於,它不會先嘗試運行測試文件,而是直接運行默認配置。
要打開一個已加載 awesome 的 Xephyr 窗口,請運行:
$ aawmtt
現在,awesome 的輸出將列印到您的終端,並且當您更改配置文件夾中的任何文件時,awesome 將重新加載。
如果你想修改被監視以檢測文件更改的目錄,或者配置文件的位置,只需運行:
$ aawmtt --config "location_of_config_file" --watch "directory_to_watch_for_changes"
默認情況下,會被監視以檢測更改的目錄是配置文件的父目錄,因此默認情況下,該目錄將是「~/.config/awesome」。
日誌文件
如果你正在使用 LightDM, awesome 會將日誌記錄到 `$HOME/.xsession-errors`。如果你使用 .xinitrc 啟動 awesome, awesome FAQ 中的 "Where are logs, error messages or something?" 也許是有用的資源。
Mod4 鍵
Awesome建議重新映射 mod4 鍵,該鍵默認應為超級鍵或「Windows」鍵。如果由於某種原因它未被映射到 mod4,請使用 xmodmap 來找出其映射情況。要更改映射,請使用 xev 來查找要映射的鍵的鍵碼和名稱。然後在 ~/.xinitrc 中添加類似以下的內容
xmodmap -e "keycode 115 = Super_L" -e "add mod4 = Super_L" exec awesome
此案例中的問題是,某些 Xorg 安裝能夠識別鍵碼115,但錯誤地將其識別為「選擇」鍵。上述命令明確地將鍵碼115重新映射到正確的「Super_L」鍵。
要使用 setxkbmap 重新映射 mod4(與 xmodmap 衝突)參見:
tail -50 /usr/share/X11/xkb/rules/evdev
要將 caps lock 鍵設為 mod4,添加下列內容到 ~/.xinitrc:
setxkbmap -option caps:hyper
修復 Java (GUI 只顯示灰色)
參見 Java#灰色窗口,應用程式不隨窗口管理器調整大小,菜單立即關閉和這篇文檔。
Eclipse: 不能調整或移動主窗口
如果你遇到卡頓,無法移動或調整主窗口大小(使用 mod4 鍵 + 滑鼠左/右鍵),請編輯 workbench.xml 文件,將 fullscreen/maximized 設置為 false(如果已設置),並將寬度和高度減小到小於你的單屏桌面區域的值。
Netbeans: 代碼預測出現在錯誤的屏幕上
如果你有兩個顯示器,同時使用 Netbeans 的代碼預測(Ctrl + Space),代碼預測可能會出現在錯誤的屏幕。下列代碼能修復問題:
.config/awesome/rc.lua
awful.rules.rules = {
...
{
rule_matches = { -- Fix Netbeans
class = {
"sun-awt-X11-XWindowPeer", "NetBeans IDE 8.2"
},
name = {
"win1"
}
}, properties = { screen = 1 } -- even with screen 1 here, this still works on the seccond screen, too (do not know why).
},
...
IntelliJ: 菜單出現在錯誤的位置,一些窗口打不開
參見 GitHub issue #2204。下列代碼能解決問題:
.config/awesome/rc.lua
clientbuttons_jetbrains = gears.table.join(
awful.button({ modkey }, 1, awful.mouse.client.move),
awful.button({ modkey }, 3, awful.mouse.client.resize)
)
...
awful.rules.rules = {
...
{
rule = {
class = "jetbrains-.*",
}, properties = { focus = true, buttons = clientbuttons_jetbrains }
},
{
rule = {
class = "jetbrains-.*",
name = "win.*"
}, properties = { titlebars_enabled = false, focusable = false, focus = true, floating = true, placement = awful.placement.restore }
},
...
}
scrot: 無法使用鍵盤快捷鍵進行滑鼠選區的截圖
使用 scrot 時,在為滑鼠選擇選項分配鍵盤快捷鍵時,你可能會遇到問題(形式上是 scrot -s)。要修復它,向你的 rc.lua 添加下列內容:
awful.key( { modkey, }, <shortcut>, nil, function () awful.spawn("scrot -s") end)
注意 nil 被傳送到 awful.key 的 press 參數。相反,回調函數作為第四個參數傳遞,該參數名為 release。.
YouTube: 全屏出現在背景
參見此處。如果在全屏模式下,YouTube 視頻出現在你的瀏覽器下層,添加這些到你的 rc.lua:
{ rule = { instance = "plugin-container" },
properties = { floating = true } },
如果你使用 Chromium 瀏覽器,添加:
{ rule = { instance = "exe" },
properties = { floating = true } },
或:
{ rule = { role = "_NET_WM_STATE_FULLSCREEN" },
properties = { floating = true } },
參見此處。
防止滑鼠滾輪更改標籤
在你的 rc.lua 中,修改滑鼠綁定為下列內容:
-- {{{ Mouse bindings
root.buttons(gears.table.join(
awful.button({ }, 3, function () mymainmenu:toggle() end)
))
-- }}}
Xdg-menu 生成重複菜單項
如果你將 /usr/share/applications 中的桌面文件複製到 ~/.local/share/applications,Xdg-menu將會生成重複條目,儘管直接覆蓋原始文件可能更可取,例如為特定應用程式使用不同的主題。解決這個問題的一種方法是使用awk過濾生成的輸出,以刪除與前一條目名稱相同的條目。
xdg_menu --format awesome --root-menu /etc/xdg/menus/arch-applications.menu | awk -F, '{if (a!=$1) print $a; a=$1}' >~/.config/awesome/archmenu.lua
Xfce4 中部分快捷鍵因按鍵重疊而失效
檢查你的
$ xfce4-keyboard-settings
關於像「Super L」這樣的重疊鍵或應由 awesome 運行的組合鍵。
內存洩漏
有些用戶即使沒有進行任何操作也會遇到內存洩漏問題。當使用大量小部件時,內存洩漏的速度可能高達每分鐘5 MB。為了緩解這一問題,您可以通過在 ~/.config/awesome/rc.lua 文件中添加以下內容來強制執行更頻繁的垃圾收集:
-- Run garbage collector regularly to prevent memory leaks
gears.timer {
timeout = 30,
autostart = true,
callback = function() collectgarbage() end
}
額外連結
- https://awesomewm.org/apidoc/documentation/90-FAQ.md.html - FAQ
- https://www.lua.org/pil/ - Lua編程指南(第一版)
- https://awesomewm.org/ - awesome 官方網站
- https://bbs.archlinux.org/viewtopic.php?id=88926 - 分享你的awesome!
- https://web.archive.org/web/20111222025635/http://www.penguinsightings.org/desktop/awesome/ - 一條評論
- https://web.archive.org/web/20120427051008/http://compsoc.tardis.ed.ac.uk/wiki/AwesomeWM_guide - Awesome 指南