Awesome

Aus wiki.archlinux.de

Awesome

Awesome ist ein in hohem Maße konfigurierbarer Fenstermanager für X. Er ist sehr schnell, erweiterbar und steht unter der GPL Lizenz. In erster Linie ist er für Menschen gedacht welche die volle Kontrolle über ihren Fenstermanager haben wollen und ihn nach ihren Wünschen und Bedürfnissen konfigurieren können.

Installation

Das Programm ist als awesome in extra verfügbar, und kann von dort mittels Pacman installiert werden.

pacman -S awesome

Entwickler Snapshots

Git-basierte Entwicklungsversionen sind auch im AUR verfügbar.[1]

Erweiterungen

Es befinden sich auch einige nützliche Erweiterungen in den Repositories/im AUR:

vicious - Widgets zum Anzeigen von verschiedener Informationen, vergleichbar mit conky [2]

Die stabile Version von Vicious befindet sich in den Repositories als Paket "vicious", der Entwickler-Snapshot vicious-git im AUR.

shifty-git - dynamische Zuweisen von Programmen zu Tags nach einfachen Regeln [3], nur im AUR

bashets - erlaubt es beliebige Shellskripte in awesome widgets einzubinden. [4], nur im AUR

Starten

Awesome kann mit Hilfe eines Login-Manager gestartet werden oder man trägt folgendes in ein Startskript deiner Wahl ein (z.B. ~/.xinitrc).

exec awesome 

Konfiguration

Awesome enthält einige gute Standard-Einstellungen direkt nach der Installation, aber früher oder später wirst du etwas ändern wollen. Awesome wird über folgende Datei konfiguriert:

~/.config/awesome/rc.lua 

Falls die Datei nicht vorhanden ist kann man sie mit folgen Befehl erstellen:

mkdir -p ~/.config/awesome/
cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua

Viele gute Beispiele für eine Konfiguration findet man hier:

Da sich die Syntax der Konfigurationsdatei bei großen Versionssprüngen ändert, muss man diese Datei gegebenenfalls abändern.

Themen

Die Standard-Theme ist unter /usr/share/awesome/themes/default auffindbar .
Kopiere es nach ~/.awesome/themes/default und ändere den theme_path in der rc.lua.

Desweiteren gibt es in der Standardinstallation: sky (helle Farben) und zenburn (kontrastarm - für längere Sitzungen)

Mehr Informationen findest du hier. [5]
Weitere Themen gibt es hier.[6]

Hintergrundbild

Das Standardhintergrundbild ist im Theme definiert. Awesome liefert das Programm awsetbg zum Setzen des Hintergrundbilds mit. Dazu wird eines der folgenden Programme benötigt:

Esetroot habak wmsetbg feh hsetroot chbg display qiv xv xsri xli xsetbg xsetroot 

Tipps und Tricks

Diese Sektion kann von jedem erweitert werden der einen guten Tipp oder einen Kniff für Awesome kennt.

feh

Dieses Programm muss installiert sein, damit Awesome das Hintergrundbild in der Theme.rc erkennt, installiere es mit:

pacman -S feh

Zufälliges Hintergrundbild

Alternative kann man auch das folgene Lua-Script nehmen um Zufällig sein Hintergrundbild zu ändern. Dazu muss lfs installiert sein.

pacman -S lua-filesystem   # Normales Paket
pacman -S lua51-filesystem # Für Lua 5.1

Danach kann neben der rc.lua eine Datei wp_changer.lua mit folgendem Code angelegt werden.

wp_changer.lua
--[[ Wpchange is a script written in lua.
   Usage: Initialize this script with it's init() function.
   After that you can change the wallpaper everytime you call
   change_wp().]]

local math = math
local os = os
local string = string
local coroutine = require("coroutine")
local table = require("table")
local lfs = require("lfs")

-- awesome utils
local screen = screen
local gears = require("gears")
local beautiful = require("beautiful")
local awfule = require("awful")

module("wp_changer")

local files = {}

-- changes the background theme with gears
function change_wp()
   math.randomseed( os.time() )
   local state = math.random(#files)

   for s = 1, screen.count()  do
      gears.wallpaper.maximized(files[state], s, true)
   end
end

-- Search for wallpapers and store them in a set
-- We do it recursive or plane.
function init(path, recursive)
   -- if recursive flag is set we go recursive down the folder path or not if not set
   for filename  in (recursive and dirtree(path) or lfs.dir(path)) do
      if string.match(filename, "%.jpg$") or string.match(filename, "%.png$") then
         table.insert(files, filename)
      end
   end
end

-- recursive iterator
function dirtree(dir)
   if string.sub(dir, -1) == "/" then
      dir=string.sub(dir, 1, -2)
   end

   local function yieldtree(dir)
      for entry in lfs.dir(dir) do
         if entry ~= "." and entry ~= ".." then
            entry=dir.."/"..entry
            local attr=lfs.attributes(entry)
            coroutine.yield(entry,attr)
            if attr.mode == "directory" then
               yieldtree(entry)
            end
         end
      end
   end
   return coroutine.wrap(function() yieldtree(dir) end)
end

In der rc.lua wird nun folgender Code unter den Library Bindings hinzugefügt.

-- loading wallpaper
local wp = require("wp_changer")

Und an einer beliebigen Stelle kann nun der Timer für den wp_changer aktiviert werden.

--[[ wallpaper changer
   Changes the desktop wallpaper after n seconds.
   You have to change the wp_path to your wallpaper folder
   and choose if seek files recursivly or not.
   Set the timeout to your needs.
]]

local wp_path = os.getenv("HOME").."/path/to/your/wallpapers"
wp.init(wp_path, true)
-- get the frist wp on start up
wp.change_wp()

-- startup timer and set it to 20 minutes
local timer = timer({ timeout = (20 * 60) })
timer:connect_signal("timeout", function() wp.change_wp()  end)
timer:start()

Expose-Effekt wie in Compiz

Aus und Einblenden der Statusbar

Lua code:

mystatusbar.screen = nil

Anschließend fügst du folgendes zu deiner rc.lua in der Tabelle globalkeys hinzu:

awful.key({ modkey, }, "b", function ()
  if mystatusbar[mouse.screen].screen == nil then
    mystatusbar[mouse.screen].screen = mouse.screen
  else
    mystatusbar[mouse.screen].screen = nil
  end
end),

Vergiss nicht mystatusbar (standardmäßig: mywibox) durch den Namen deiner Statusbar zu ersetzten. Bei mehreren Statusbars müssen auch alle berücksichtigt werden.

Transparenz

Awesome unterstütz Transparenz durch xcompmgr. Die neueste git Version von xcompmr gibt es im AUR. Füge das deiner ~/.Xinitrc hinzu:

xcompmgr &

In der rc.lua kann man dann unter signals zum Beispiel die Transparenz für unfokussierte Fenster festlegen:

 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)

Alt-Tab ähnliche Funktion (cycle clients)

Diese Funktion rotiert alle sichtbaren Programme durch drücken von Mod-Tab. Das Programm in der Hauptarbeitsfläche bekommt den Focus. Füge Folgendes der rc.lua hinzu:

 awful.key({ modkey,           }, "Tab",
   function ()
   local allclients = awful.client.visible(client.focus.screen)
   for i,v in ipairs(allclients) do
     allclients[1]:swap(allclients[i])
   end
   client.focus = awful.client.getmaster()
   awful.client.getmaster():raise()                
 end),

Ausgewählte Programme immer mit einem vordefinierten Tag öffnen

In der rc.lua gibt es eine Sektion, wo man Attribute wie Tag, Floating usw. vordefinieren kann:

 -- {{{ Rules
 awful.rules.rules = { ...
 ...    
 { rule = { instance = "Navigator" },
 properties = { tag = tags[1][2] } },
 { rule = { class = "Pidgin" },
 properties = { tag = tags[1][3] } },
 ...

Instance und Class kann man so herausfinden:

  xprop |grep "WM_CLASS(STRING)"

Die Ausgabe enthält als ersten String die Instance und als zweiten die Class.

Autostart in Awesome

Da man Lua Dateien sehr einfach laden kann, bietet es sich hier an eine neue Datei autostart.lua neben der rc.lua anzulegen.

 --autostart.lua
 local awful = require("awful")
 
 -- urxvt daemon starten
 awful.util.spawn_with_shell("if [ -z `pgrep urxvtd` ]; then urxvtd -f; fi")
 -- NetworkManager starten
 awful.util.spawn_with_shell("if [ -z `pgrep nm-applet` ]; then nm-applet; fi")

Diese Datei wird nun einfach mit folgenden Zeilen in der rc.lua geladen

 local autostart = require("autostart")
 require("autostart")

Fn-Buttons Lautstärke

Bei wem die Fn-Buttons für die Lautstärke nicht funktionieren, kann bei dem Abschnitt Key bindings folgendes hinzufügen.

 --{{{ Key bindings
 globalkeys = awful.util.table.join(
 ...
 -- Fn Buttons
 awful.key({ }, "XF86AudioRaiseVolume",
           function ()
               awful.util.spawn(
                    "/usr/bin/amixer -q set Master 5\\%+", false)
               end),
 awful.key({ }, "XF86AudioLowerVolume",
           function ()
               awful.util.spawn(
                    "/usr/bin/amixer -q set Master 5\\%-", false)
               end),
 awful.key({ }, "XF86AudioMute",
           function ()
               awful.util.spawn(
                    "/usr/bin/amixer -q set Master toogle", false)
               end),
 ...
 )

Wer die Zeilen am Ende hinzufügt muss das letzte Komma weglassen.

Weblinks


Dieser Artikel (oder Teile davon) steht unter GNU FDL (GNU Freie Dokumentationslizenz) und ist eine Übersetzung aus dem ArchLinux.org Wiki. Am Original-Artikel kann jeder Korrekturen und Ergänzungen vornehmen. Im ArchLinux.org Wiki ist eine Liste der Autoren verfügbar.