Translation(s): English - Français
Awesome is a tiling Window Manager that can replace or live together with other desktop environments like Gnome and KDE Plasma.
Usage is optimized for shortcuts. It may take some time to get used to it. Access to some programs may afford configuring or using command prompt and exact program name. Information about battery usage, wifi, etc. needs configuration.
On the other hand Awesome is small and therefore fast opening especially compared with Plasma. It allows to place clients on several tags, and display several tags at the same time.
On the Awesome home page is stated that "it is primarly targeted at power users, developers and any people dealing with every day computing tasks and who want to have fine-grained control on theirs graphical environment."
Awesome works at least with Debian Jessie (Awesome 3.4) and Debian Stretch (Awesome 4).
Installation
# apt-get install awesome
Optional (adds extra widgets as usage of battery, wifi, cpu memory, etc.):-
# apt-get install awesome-extra
Now, if you are using GDM or KDM, it should appear in the login window, so you can select Awesome instead of Gnome or KDE Plasma.
For Debian with KDM have a look in the left bottom corner of the login screen for the place to change the window manager. Depending on the background image it might draw no immediate attention.
Using KDM be aware that the login window only appears if automatic login isn't activated in the KDE-settings, starting, login window. Here you can also decide which window manager will be used for automatic login. It is recommended not to use automatic login while configuring awesome. Mistakes in the configuring file can in extreme case prevent Awesome from starting. In this case it is convenient to use the other window manager to reset the configuring file.
If it doesn't show up in the window manager list on the login screen edit /usr/share/xsessions/awesome.desktop, change NoDisplay=true to NoDisplay=false.
Hint: You can also write your own Xsession startup script and choose "System Default" in GDM or KDM.
This is a sample Xsession file, working at least on Debian Wheezy and Jessie (the file must be saved as $HOME/.Xsession):
gnome-screensaver & gnome-settings-daemon & export $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg) xrdb -cpp /usr/bin/cpp-4.7 -merge ~/.Xresources xrandr --output HDMI2 --right-of HDMI1 exec awesome
If you are not using a login manager you should configure .xinitrc as usual, running awesome at the end of the script. In order to obtain certain privileges for your user (like being able to make the computer sleep and things like that), use ck-launch-session like this:
#.xinitrc xrdb -merge ~/.Xresources #if you have Xresources xmodmap ~/.Xmodmap #if you use xmodmap nm-applet& #if you want to use network-manager bluetooth-app`let& #if you have bluetooth volti& #this is a program to control audio volume ("apt-get install volti") ck-launch-session awesome
If you want to use Awesome at the same time than Gnome or Plasma of XFCE, there is good news: it is possible. All this information is on the Awesome official wiki (for example: Awesome with Gnome).
Usage
Most programs can be started through the Debian menu which "hides" behind the Awesome icon, a very stylistic "a" in the upper left corner. Press it as button and you will find a menu hierarchy also containing "edit config" in the Awesome submenu.
Awesome is mostly managed using the keyboard.
It first run in "normal" mode, but pressing win+space repeatedly goes through different tiling modes.
- Press win+enter to open terminals.
- Press win+l or win+h to enlarge or shrink windows.
- Press win+j to go to the next window.
- Press win+r to get a command for starting programs, The command line showing "Run:" appears in the menu line just right of the tags section.
- Press win+shift+q for quitting Awesome
- Press win+ctrl+r for a restart of Awesome
Learn more key commands by pressing win+s or running:
man awesome
Configuration
Unlike Gnome or Plasma type desktops environments, Awesome is configured editing a "lua" source file located either in /etc/xdg/awesome/rc.lua or ~/.config/awesome/rc.lua.
It is highly recommended that you edit the file in your personal folder. So your changes do not affect other users. Furthermore in the case of a severe mistake in your personal configuring file Awesome will use the original "rc.lua" as fallback. You do so by coping the general file first:
$ mkdir ~/.config/awesome $ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua
It could make sense to copy the default theme from /usr/share/awesome/themes/default to ~/.config/awesome/themes/default and change theme_path in rc.lua from beautiful.init(awful.util.get_themes_dir() .. "default/theme.lua") to beautiful.init("~/.config/awesome/themes/default/theme.lua"), too.
Now edit the configuration file:
$ nano ~/.config/awesome/rc.lua
Further configuration (highly recommended)
To get an idea of what you can do with awesome, it is recommended that you dedicate some time to fully configure it to your taste. It is recommended to investigate The official Awesome wiki.
Before starting be aware that the configuring file "rc.lua" of Awesome 3.4 is very different from that of Awesome 4. Only some examples and code snippets work with both versions. In addition only some websites state explicitly which Awesome version will work with their examples.
Awesome 3.4 is documented well, code snippets are available for many cases on different websites.
The vicious library contained in the awesome-extra package contains several useful widgets. ~/.config/awesome/vicious/README contains a detailled description of the widgets and their use. Not all of these work for Awesome 4.
Configuration example for Debian Stretch and Awesome 4
Theming, transparency and wallpaper
Beautiful is a lua library that allows you to theme Awesome using an external file, it becomes easy to dynamically change your whole Awesome colours and wallpaper without changing your rc.lua.
The default theme is at /usr/share/awesome/themes/default. Copy it to ~/.config/awesome/themes/default and change theme_path in rc.lua from beautiful.init(awful.util.get_themes_dir() .. "default/theme.lua") to beautiful.init("~/.config/awesome/themes/default/theme.lua").
Use theme.menu_bg_normal for transparency e.g. change theme.bg_normal = "#222222" to theme.menu_bg_normal = "#aaaaaa32" and add theme.taglist_bg_focus = "#ffff0064".
To set your personal wallpaper name it background.png, put it in ~/.config/awesome/themes/default and change theme.wallpaper = /usr/share/awesome/themes/default/background.png to theme.wallpaper = ~/.config/awesome/themes/default/background.png.
Default terminal
Change os.getenv("EDITOR") or "editor" to an editor of your choice e.g. editor = "kate"
Tiling modes
In the section -- Table of layouts to cover with awful.layout.inc, order matters. you may want to reduce the possibilites, comment the lines out you don't need.
Menu
If you like to create your personal menu because the Debian menu doesn't contain all programs or the sorting doesn't satisfy you, you can start with the following example.
mymainmenu = awful.menu({ items = { -- { "Menü", ts_menu,"/usr/share/icons/oxygen/base/22x22/places/start-here-kde.png" }, { "",""}, -- { "Shutdown", 'kshutdown',"/usr/share/icons/oxygen/base/22x22/actions/system-shutdown.png"}, { "Quit", function() awesome.quit() end,"/usr/share/icons/oxygen/base/22x22/actions/system-log-out.png" }; { "",""}, -- { "Notizzettel","/usr/bin/knotes","/usr/share/icons/oxygen/base/22x22/apps/knotes.png"}, -- { "File Manager", "dolphin","/usr/share/icons/oxygen/base/22x22/apps/system-file-manager.png" }, -- { "Search","kfind","/usr/share/icons/hicolor/22x22/apps/kfind.png" }, { "",""}, { "Browser", "firefox", "/usr/share/pixmaps/firefox-esr.png" }, -- { "E-mail", "icedove","/usr/share/pixmaps/icedove.xpm" }, { "",""}, { "Terminal", konsole, "/usr/share/icons/oxygen/base/22x22/categories/applications-utilities.png" }, -- { "Synaptic","kdesudo synaptic-pkexec","/usr/share/synaptic/pixmaps/synaptic_32x32.xpm"}, { "",""}, -- { "System-settings","kdesudo systemsettings5","/usr/share/icons/oxygen/base/22x22/categories/preferences-system.png"}, -- { "Bluetooth","blueman-applet","/usr/share/icons/hicolor/32x32/apps/blueman.png"}, { "Network-Manager", "nm-applet","/usr/share/icons/gnome/base/22x22/places/network_local.png" }, { "",""}, -- { "gtkam","/usr/bin/gtkam","/usr/share/gtkam/pixmaps/camera.xpm"}, { "",""}, { "awesome", myawesomemenu, beautiful.awesome_icon }, { "Debian", debian.menu.Debian_menu.Debian, "/usr/share/icons/gnome/22x22/places/debian-swirl.png" }, } })
Many lines are commented out because missing programs or icons lead to errors. Since the search for actual paths of programs and their icons takes some time the lines are included in spite of this.
And here is the submenu ts_menu mentioned in the menu.
audio = { -- {"Spotify","/usr/bin/spotify","/usr/share/icons/hicolor/32x32/apps/spotify-client.png"}, -- {"Audacity","/usr/bin/audacity","/usr/share/pixmaps/audacity32.xpm"}, -- {"Clementine","/usr/bin/clementine","/usr/share/pixmaps/clementine.xpm"}, -- {"",""}, -- {"Ex Falso","/usr/bin/exfalso","/usr/share/pixmaps/exfalso.png"}, -- {"Puddletag","/usr/bin/puddletag","/usr/share/pixmaps/puddletag.png"}, -- {"TuxGuitar","tuxguitar","/usr/share/pixmaps/tuxguitar.xpm"}, -- {"Timidity","timidity -ig","/usr/share/pixmaps/timidity.xpm"}, } office = { {"ding","/usr/bin/ding","/usr/share/pixmaps/dbook.xpm"}, {"writer","/usr/bin/libreoffice --writer","/usr/share/icons/hicolor/32x32/apps/libreoffice-writer.png"}, {"calculation","/usr/bin/libreoffice --calc","/usr/share/icons/hicolor/32x32/apps/libreoffice-calc.png"}, {"impress","/usr/bin/libreoffice --impress","/usr/share/icons/hicolor/32x32/apps/libreoffice-impress.png"}, {"base","/usr/bin/libreoffice --base","/usr/share/icons/hicolor/32x32/apps/libreoffice-base.png"}, {"",""}, {"pdfshuffler","/usr/bin/pdfshuffler","/usr/share/icons/hicolor/scalable/apps/pdfshuffler.svg"}, {"pdfchain","/usr/bin/pdfchain","/usr/share/icons/hicolor/32x32/apps/pdfchain.png"}, {"pdfmod","/usr/bin/pdfmod","/usr/share/icons/hicolor/32x32/apps/pdfmod.png"}, {"",""}, {"KMyMoney","/usr/bin/kmymoney","/usr/share/icons/hicolor/32x32/apps/kmymoney.png"}, } development = { {"UMLet","/usr/bin/umlet","/usr/share/umlet/img/umlet_logo24.png"}, {"Ruler","/usr/bin/kruler","/usr/share/kde4/apps/kdewidgets/pics/kruler.png"}, {"Link Status prüfen","/usr/bin/klinkstatus","/usr/share/icons/hicolor/32x32/apps/klinkstatus.png"}, {"netbeans","/usr/bin/netbeans","/usr/share/icons/hicolor/32x32/apps/netbeans.png"}, } photo = { {"gtkam","/usr/bin/gtkam","/usr/share/gtkam/pixmaps/camera.xpm"}, {"Gwenview","/usr/bin/gwenview","/usr/share/icons/hicolor/32x32/apps/gwenview.png"}, {"phototonic","/usr/bin/phototonic","/usr/share/pixmaps/phototonic.png"}, {"digikam","/usr/bin/digikam","/usr/share/icons/oxygen/base/22x22/apps/digikam.png"}, -- {"SQLiteBrowser","/usr/bin/sqlitebrowser"}, {"",""}, {"RawTherapee","rawtherapee","/usr/share/pixmaps/rawtherapee.xpm"}, {"GIMP","/usr/bin/gimp -n","/usr/share/pixmaps/gimp.xpm"}, } photo_2 = { -- {"FotoWall","/usr/bin/fotowall","/usr/share/pixmaps/fotowall.xpm"}, {"Hugin","/usr/bin/hugin","/usr/share/pixmaps/hugin.png"}, {"luminance-hdr","/usr/bin/luminance-hdr","/usr/share/icons/hicolor/32x32/apps/luminance-hdr.png"}, -- {"PhotoPrint","/usr/bin/photoprint","/usr/share/icons/hicolor/48x48/apps/fotoprint.png"}, {"PTBatcherGUI","/usr/bin/PTBatcherGUI","/usr/share/pixmaps/ptbatcher.png"}, -- {"DNG-Koverter","/usr/bin/dngconverter","/usr/share/icons/hicolor/48x48/apps/kipi-dngconverter.png"}, } graphics = { -- {"Scribus","/usr/bin/scribus","/usr/share/pixmaps/scribus.xpm"}, {"Inkscape","/usr/bin/inkscape","/usr/share/pixmaps/inkscape.xpm"}, {"Office Draw","/usr/bin/libreoffice --draw","/usr/share/icons/hicolor/32x32/apps/libreoffice-draw.png"}, -- {"PTBatcherGUI","/usr/bin/PTBatcherGUI"}, } internet = { {"Firefox", "firefox", "/usr/share/pixmaps/firefox-esr.png" }, {"Icedove E-mail","icedove","/usr/share/pixmaps/icedove.xpm"}, {"dropbox","/usr/bin/dropbox start -i","/usr/share/icons/hicolor/32x32/apps/dropbox.png"}, } games = { -- {"MegaGlest","/usr/games/megaglest","/usr/share/pixmaps/megaglest.xpm"}, -- {"widelands","/usr/games/widelands","/usr/share/icons/hicolor/32x32/apps/widelands.xpm"}, } system = { {"Synaptic","kdesudo synaptic-pkexec","/usr/share/synaptic/pixmaps/synaptic_32x32.xpm"}, {"Apper","kdesudo apper","/usr/share/icons/oxygen/base/22x22/categories/applications-other.png"}, {"",""}, {"Systems ettings","kdesudo systemsettings","/usr/share/icons/oxygen/base/22x22/categories/preferences-system.png"}, {"",""}, {"Krusader-root","kdesudo krusader","/usr/share/icons/hicolor/32x32/apps/krusader_root.png"}, {"",""}, {"K3b","/usr/bin/k3b","/usr/share/icons/hicolor/32x32/apps/k3b.png"}, {"luckybackup","/usr/bin/luckybackup","/usr/share/pixmaps/luckybackup.png"}, -- {"luckybackup-root","su-to-root -X -c /usr/bin/luckybackup","/usr/share/pixmaps/luckybackup.xpm"}, {"Partition Manager","kdesudo partitionmanager","/usr/share/icons/oxygen/base/22x22/apps/partitionmanager.png"}, {"Gparted","kdesudo gparted","/usr/share/icons/hicolor/32x32/apps/gparted.png"}, {"Kill","xkill","/usr/share/icons/gnome/32x32/actions/stop.png"}, {"Refresh","xrefresh","/usr/share/icons/gnome/32x32/actions/reload.png"}, {"System Information","kinfocenter","/usr/share/icons/oxygen/base/22x22/apps/hwinfo.png"}, {"System Monitor","/usr/bin/ksysguard","/usr/share/icons/gnome/32x32/apps/ksysguard.png"}, } video = { {"SMPlayer","smplayer","/usr/share/pixmaps/smplayer.xpm"}, {"VLC media player","/usr/bin/qvlc","/usr/share/icons/hicolor/32x32/apps/vlc.xpm"}, {"Dragon Player","/usr/bin/dragon","/usr/share/icons/hicolor/32x32/apps/dragonplayer.png"}, -- {"WinFF","/usr/bin/winff","/usr/share/pixmaps/winff.xpm"}, {"MediaInfo","/usr/bin/mediainfo-gui","/usr/share/pixmaps/mediainfo.xpm"}, } tools = { {"Find","kfind","/usr/share/icons/hicolor/32x32/apps/kfind.png"}, {"File Manager", "dolphin","/usr/share/icons/oxygen/base/22x22/apps/system-file-manager.png" }, {"Krusader-root","kdesudo krusader","/usr/share/icons/hicolor/32x32/apps/krusader_root.png"}, {"Terminal", "konsole", "/usr/share/icons/oxygen/base/22x22/categories/applications-utilities.png"}, {"",""}, {"Screenshot","/usr/bin/ksnapshot","/usr/share/icons/oxygen/base/22x22/apps/ksnapshot.png"}, {"Filelight","filelight","/usr/share/icons/hicolor/32x32/apps/filelight.png"}, {"Editor","kate","/usr/share/icons/hicolor/32x32/apps/kate.png"}, {"Editor-root","kdesudo kate","/usr/share/icons/hicolor/32x32/apps/kate.png"}, {"KWrite","kwrite","/usr/share/icons/oxygen/base/22x22/apps/accessories-text-editor.png"}, {"Klipper","/usr/bin/klipper","/usr/share/icons/oxygen/base/32x32/apps/klipper.png"}, {"Calculator","/usr/bin/xcalc","/usr/share/icons/oxygen/base/22x22/apps/accessories-calculator.png"}, {"",""}, {"Rename","/usr/bin/krename","/usr/share/icons/hicolor/32x32/apps/krename.png"}, {"KDiff3","/usr/bin/kdiff3","/usr/share/icons/hicolor/32x32/apps/kdiff3.png"}, {"Kompare","/usr/bin/kompare","/usr/share/icons/hicolor/32x32/apps/kompare.png"}, -- {"Komparator","/usr/bin/komparator4","/usr/share/icons/hicolor/32x32/apps/komparator4.png"}, {"",""}, {"KMix","/usr/bin/kmix","/usr/share/icons/hicolor/32x32/apps/kmix.png"}, } ts_menu = { { "audio", audio, "/usr/share/icons/oxygen/base/22x22/mimetypes/audio-ac3.png" }, { "office", office, "/usr/share/icons/oxygen/base/22x22/categories/applications-office.png" }, { "development", development, "/usr/share/icons/oxygen/base/22x22/categories/applications-development.png" }, { "photo", photo,"/usr/share/icons/oxygen/base/22x22/apps/showfoto.png" }, { "photo_2", photo_2 }, { "graphics", graphics, "/usr/share/icons/oxygen/base/22x22/categories/applications-graphics.png" }, { "internet", internet, "/usr/share/icons/oxygen/base/22x22/categories/applications-internet.png" }, { "games", games, "/usr/share/icons/oxygen/base/22x22/categories/applications-games.png" }, { "system", system, "/usr/share/icons/oxygen/base/22x22/categories/applications-system.png" }, { "video", video, "/usr/share/icons/gnome/32x32/mimetypes/video.png" }, { "tools", tools, "/usr/share/icons/oxygen/base/22x22/categories/applications-utilities.png" }, }
It has to be added as ts_menu.lua in ~/.config/awesome and
-- Load ts_menu require("ts_menu")
has to be added in the first lines of rc.lua. Perhaps the many lines help to save time for searching of program and icon paths.
Random Wallpapers
Exchange
local function set_wallpaper(s) -- Wallpaper if beautiful.wallpaper then local wallpaper = beautiful.wallpaper -- If wallpaper is a function, call it with the screen if type(wallpaper) == "function" then wallpaper = wallpaper(s) end gears.wallpaper.maximized(wallpaper, s, true) end end -- Re-set wallpaper when a screen's geometry changes (e.g. different resolution) screen.connect_signal("property::geometry", set_wallpaper)
against
-- {{ Function definitions -- scan directory, and optionally filter outputs function scandir(directory, filter) local i, t, popen = 0, {}, io.popen if not filter then filter = function(s) return true end end print(filter) for filename in popen('ls -a "'..directory..'"'):lines() do if filter(filename) then i = i + 1 t[i] = filename end end return t end -- }} -- configuration wp_index = 1 wp_path = "PATH_TO_YOUR_WALLPAPER_DIRECTORY" wp_filter = function(s) return string.match(s,"%.png$") or string.match(s,"%.jpg$") end wp_files = scandir(wp_path, wp_filter) gears.timer.start_new (10, function() for s = 1, screen.count() do gears.wallpaper.maximized(wp_path .. wp_files[wp_index], s, true) end math.randomseed( os.time() ) wp_index = math.random( 1, #wp_files) return true end)
Change PATH_TO_YOUR_WALLPAPER_DIRECTORY to the actual directory.
Tags
Programs can be opened in dedicated tags. These tags can contain an icon. While for Awesome 3.4 tags need no text to be contained, in Awesome 4 the tag text is it's name. So it makes sense to keep the figures 1,..9 as text for the tags.
Change awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[1]) against
awful.tag.add("1", { icon = "/usr/share/icons/oxygen/base/22x22/places/user-desktop.png", layout = awful.layout.suit.tile, -- master_fill_policy = "master_width_factor", -- gap_single_client = true, -- gap = 1, screen = s, selected = true, } ) awful.tag.add("2", { icon = "/usr/share/icons/oxygen/base/22x22/places/user-desktop.png", layout = awful.layout.suit.max, screen = s, } ) awful.tag.add("3", { icon = "/usr/share/icons/oxygen/base/22x22/places/user-desktop.png", layout = awful.layout.suit.max, screen = s, } ) awful.tag.add("4", { icon = "/usr/share/pixmaps/firefox-esr.png", layout = awful.layout.suit.max, screen = s, } )
and add further 5 tags if you like.
Widgets
for each widget add the code shown in the respective widget section below after the following section of rc.lua
-- Create a tasklist widget s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, tasklist_buttons)
and add it in the systray by adding its name, e.g. cpuicon, and cpuwidget, after
mykeyboardlayout, wibox.widget.systray(),
If "vicious.register" appears in the widget, local vicious = require("vicious") must be added in the first lines of rc.lua (and the extra package of Awesome installed).
Widgets which use io.open may freeze the screen shortly while executing. So improvement would be welcome.
Additional information can be found in the Awesome api
CPU
cpuicon = wibox.widget { image = "/usr/share/icons/oxygen/base/22x22/devices/cpu.png", resize = false, widget = wibox.widget.imagebox } cpuwidget = wibox.widget.graph() cpuwidget:set_width(20) cpuwidget:set_color(gears.color.create_solid_pattern("#00ff00")) vicious.cache(vicious.widgets.cpu) cpuwidget.opacity = "1" vicious.register(cpuwidget, vicious.widgets.cpu, "$1", 5)
Memory
memwidget = wibox.widget.graph() memwidget:set_width(20) cpuwidget:set_color(gears.color.create_solid_pattern("#00ff00")) vicious.cache(vicious.widgets.mem) memwidget.opacity = "1" vicious.register(memwidget, vicious.widgets.mem, "$1", 11) beautiful.graph_bg = "#00000000"
File system
fswidgettxt = "" -- root, can easily be adapted for home function fsroot() os.execute("/bin/ts_root.sh") fstext = io.open("fp3") fsnumber = fstext:read(2) if fsnumber+1-1 < 80 then -- +1-1 to get number rootwidget.widget.markup = "" else if fsnumber+1-1 < 90 then -- +1-1 to get number rootwidget.widget.markup = " / " .. fsnumber .. "% " rootwidget.bg = '#ffff0064' else if fsnumber > 95 then rootwidget.bg = '#ff0000' end end end end rootwidget = wibox.widget { { markup = fswidgettxt, widget = wibox.widget.textbox }, bg = '#ffffff00', layout = wibox.container.background } gears.timer.start_new (67, function() fsroot() return true end)
For this widget the following script has to be saved as root in /bin as ts_root.sh. Then the file must be made executable and readable for the user. For home / has to be changed to /home. The script creates files in the home directory which can be used for root and home.
#!/bin/bash df / > fp1 cut -c46-47 fp1 > fp2 rm fp1 tr -d ' ',[A-z],'\n' < fp2 > fp3 rm fp2
Note that the widget is not visible if the used part of the partition is below 80% of it's size.
Battery
local function battery_state() os.execute("/bin/ts_battery.sh") batchar = io.open("batchar") batchartxt = batchar:read() if batchartxt == "Dis" then batpctxt = io.open("batpc") batpczahl = batpctxt:read() lengthbat = string.len(batpczahl) +1 -1 -- only to secure that lengthbat is of type number if lengthbat == 1 then os.execute("/bin/ts_bat_time_low.sh") -- percent is only 1 digit else os.execute("/bin/ts_bat_time.sh") end battime = io.open("battime") battimetxt = " " .. battime:read() .. " " bath = io.open("bath") bathtxt = bath:read(1) batm = io.open("batm") batmtxt = batm:read(1) end end local function get_battery_state() battery_state() -- show remaining timme if discharging if batchartxt == "Dis" then -- change backgroundcolor if only twenty minutes left if bathtxt == "0" and (batmtxt == "0" or batmtxt == "1") then battxtwidget.widget.markup = "<b> Remaining: " .. battimetxt .. "</b>" battxtwidget.widget.font = "\"Liberation Serif\", 16" battxtwidget.bg = '#ff0000' else battxtwidget.widget.markup = ' Remaining: ' .. battimetxt end else battxtwidget.widget.markup = "" end end battery_state() batwidget = wibox.widget { { max_value = 100, value = batpczahl, widget = wibox.widget.progressbar, }, forced_width = 15, direction = 'east', layout = wibox.container.rotate, } battxtwidget = wibox.widget{ { markup = markuptxt, widget = wibox.widget.textbox }, bg = '#ffffff00', layout = wibox.container.background } gears.timer.start_new (61, function() get_battery_state() return true end )
This widget requires the following scripts to be installed with reading rights for the user and execution rights in /bin as
ts_battery.sh
#!/bin/bash acpi > bat1 cut -c12-14 bat1 > batchar cut -c25-26 bat1 > bat2 # if load percentage < 10, 26 is "%" tr -d '%' < bat2 > batpc
ts_bat_time.sh
#!/bin/bash cut -c31-37 bat1 > battime cut -c31-31 bat1 > bath cut -c33-33 bat1 > batm
ts_bat_time_low.sh
#!/bin/bash cut -c30-36 bat1 > battime cut -c30-30 bat1 > bath cut -c31-31 bat1 > batm
The widget appears when battery state is low and discharging.
Upgradable packages
upgradable = os.execute("ts_upgradable.sh") upgrtext = io.open("upgr") upgrnumber = upgrtext:read(2) -1 -- headline doesn't count if upgrnumber > 0 then upgrtext = " " .. upgrnumber .. " updates " else upgrtext = "" end upgrwidget = wibox.widget { { markup = upgrtext, widget = wibox.widget.textbox }, bg = '#ffff0064', layout = wibox.container.background }
This widget requires the following script to be installed with reading rights for the user and execution rights in /bin as
ts_upgradable.sh
#!/bin/bash apt list --upgradable > upgradable wc -l < upgradable > upgr
Network traffic
neticon = wibox.widget { image = "/usr/share/icons/oxygen/base/22x22/actions/go-down.png", resize = false, widget = wibox.widget.imagebox } netwidget = wibox.widget { { markup = " ", widget = wibox.widget.textbox }, bg = '#ffffff00', layout = wibox.container.background } netnumber = 0 gears.timer.start_new (1, function() lastnetnumber = netnumber nettext = io.open("/sys/class/net/INTERFACE/statistics/rx_bytes") netnumber = nettext:read() +1 -- secure to be number netrecent = math.floor((netnumber - lastnetnumber)/1000) netwidget.widget.markup = netrecent .. " " return true end )
For this widget /sys/class/net/INTERFACE/statistics/rx_bytes must be readable,
INTERFACE must be exchanged by the name of the interface e.g. wlp5s0.
Brightness
Add the following in the -- {{{ Key bindings-section:
awful.key({ }, "XF86MonBrightnessUp", function () os.execute("ts_lighter.sh") end, {description = "lighter", group = "ts"}), awful.key({ }, "XF86MonBrightnessDown", function () os.execute("/bin/ts_darker.sh") end, {description = "darker", group = "ts"}),
This requires the following scripts to be installed with reading rights for the user and execution rights in /bin as
ts-lighter.sh
#!/bin/bash read < "/sys/class/backlight/intel_backlight/brightness" brightness var1=20 brightness=`expr $brightness + $var1` echo $brightness > /sys/class/backlight/intel_backlight/brightness
ts_darker.sh
#!/bin/bash read < "/sys/class/backlight/intel_backlight/brightness" brightness var1=20 brightness=`expr $brightness - $var1` echo $brightness > /sys/class/backlight/intel_backlight/brightness
/sys/class/backlight/intel_backlight/brightness must have write access for the user.
The shortcut for a brighter window is then Fn+CURSOR_LEFT.
Audio Volume
Shortcuts are made available by the program Kmix.
Screen snapshot
Add the following in the -- {{{ Key bindings-section:
awful.key({ }, "Print", function () awful.util.spawn("ksnapshot") end, {description = "Screen snapshot", group = "user"})
Floating clients
Consider to add additional clients in the section -- Floating clients., e.g Gimp, knotes or Kmix.
No titlebars
If you prefer the shortcuts for closing and maximizing the windows, titlebars are obsolete. "titlebars_enabled = true" can be changed to open new windows without titlebars.
Set Program to open on a special tag
The rule for Firefox exists already in original rc.lua but is commented out in section Set Firefox to always map on the tag named "2" on screen 1
Autostart and Numlock
Add at the end the programs you want, e.g.
awful.spawn.easy_async("numlockx on") awful.spawn.easy_async("/usr/bin/kmix") awful.spawn.easy_async("nm-applet")